iOS 快速接入 您所在的位置:网站首页 flash8百度云 iOS 快速接入

iOS 快速接入

2023-05-05 08:57| 来源: 网络整理| 查看: 265

iOS 快速实现音视频通话

实时音视频通话能够拉近人与人之间的距离,帮助你的 APP 提高用户黏性。 本文介绍如何通过少量代码集成百度 RTC SDK ,快速实现高质量、低延迟的视频通话功能。

实现视频通话的步骤如下: 初始化

调用 initWithAppID初始化SDK

2.设置显示视图

设置本地与远端显示视图

3.加入房间

调用loginRtcRoomWithRoomName 加入房间

说明:在 APP ID 一致的前提下,传入相同房间名的用户会进入同一个房间通话。

4.发布/订阅

加入房间后,两位主播可以手动发布音视频并互相订阅

如果设置自动发布 或 自动订阅 ,则自动发布/订阅音视频

5.退出房间

挂断,退出房间

视频通话的 API 调用时序见下图:

时序流程.png

前期准备 Xcode 9.0 或以上版本 支持 iOS 9.0 或以上版本的 iOS 设备 两台支持音视频功能的模拟器或真机 申请百度智能云官网 APP ID,详见https://cloud.baidu.com/product/rtc.html 下载精简SDK https://doc.bce.baidu.com/bce-documentation/RTC/rtc_iOS_release_fastdemo_20230407.zip 或下载SDK https://cloud.baidu.com/doc/RTC/s/Hk29sqi42 可以访问互联网的计算机。确保你的网络环境没有部署防火墙,否则无法正常使用百度服务。 在 Xcode 中进行以下操作,在你的 app 中实现视频通话功能: 创建一个新的项目,Application 选择 App,Interface 选择 Storyboard,Language 选择 Objective_C。如果你没有添加过开发团队信息,会看到 Add account… 按钮。点击该按钮并按照屏幕提示登入 Apple ID,点击 Next,完成后即可选择你的 Apple 账户作为开发团队。 为你的项目设置自动签名。 设置部署你的 app 的目标设备。

说明:使用已有的项目也可以集成SDK。

项目设置 打开 Xcode,选择:项目 TARGET -> General -> Deployment Target,设置 9.0 或以上版本。

d3d7c6c440ca3a2eb3a4090fabbaa9f1.png

继续在 Xcode 中,选择:项目 TARGET -> Build Settings -> Build Options -> Setting,设置要编译的项目 TARGET。

e67ca032f84d33cec75101717aaceb80.png

添加 SDK 静态库文件 将下载的SDK中lib文件夹内的文件复制到项目文件夹下 选择:项目 TARGET -> Build Phases ->Link Binary With Libraries,将 BaiduRtcRoom.framework SocketRocket.framework添加 SDK 静态库文件到项目。

ca9e44624d2bbc1ba14209741a2219e9.png

ecf4a657ab9e6a3586b3fdda63b1d684.png

选择:项目 TARGET -> Build Phases ->Link Binary With Libraries,将libyuv.a,libcrypto.a,libssl.a添加到项目中 添加系统依赖库

将系统库libc++.tbd,libnetwork.tbd,libicucore.A.tbd,WebKit.framework,VideoToolbox.framework,GLKit.framework添加到项目中

d098f84f5a23944a11764f917827bd75.png

说明 :

BaiduRtcRoom 为 BRTC SDK 主依赖库,必须添加;

SocketRocket 为三方依赖库,必须添加;

其中libyuv.a,libcrypto.a,libssl.a为百度内部依赖库,必须添加;

其余为系统依赖库,必须添加。

添加相机/麦克风权限

在Info.plist文件中添加Privacy相机/麦克风权限

563d2a553d7f02ca0ad0babe835ceaa9.png

添加Background Modes

在Target -> Signing & Capabilities -> Background Modes中添加如下Modes

69f4ca2feee23ff4faea2c92dca02ac3.png

代码示例

1.以新建项目为例,在ViewController.m文件中导入头文件

#import

2.定义 rtc room hanlde 变量

@property (nonatomic, strong) BaiduRtcRoomApi *rtcRoomApi;

3.初始化 sdk, 返回 rtc room handle, 初始化的时候要带上 appid,token 串,和 delegate

3.1 内部采集

self.rtcRoomApi = [[BaiduRtcRoomApi alloc] initSDKWithAppID:self.appId tokenStr:self.tokenStr delegate:self];

3.2 自定义采集

/** 视频自定义采集 FooCameraCapturer 是您自己的视频源实现类,需要实现 id 协议。 如果您的视频源是系统相机源,并且想要通过 BRTC 接口实现对相机的部分控制,则需要同时实现 id 协议 */ FooCameraCapturer *capturer = [FooCameraCapturer new]; [self.rtcRoomApi setVideoCapturer:capturer]; /** 音频自定义采集 FooAudioExternalDevice 是您自己的音频采集源实现类,需要实现 id 协议 */ FooAudioExternalDevice *audioDevice = [[FooAudioExternalDevice alloc] init]; rps.isEnableExternalAudioDevice = YES; [self.rtcRoom setParamSettings:rps paramType:RTC_AUDIO_PARAM_SETTINGS_DEVICE_MODE]; [self.rtcRoom setAudioExternalDeviceDelegate:audioDevice]; }

4.音视频参数设置:

RtcParameterSettings *rps = [[RtcParameterSettings alloc] init]; //是否开启多人模式(YES:多人模式;NO:两人模式) rps.isMultiPlayerModel = YES; [self.rtcRoomApi setParamSettings:rps paramType:RTC_VIDEO_PARAM_SETTINGS_SESSION_MODE]; //以下参数按需设置 // 视频采集参数 RtcVideoBaseParams *captureParams = [[RtcVideoBaseParams alloc] init]; captureParams.videoFps = 15; captureParams.videoWidth = 720; captureParams.videoHeight = 1280; rps.videoCaptureParams = captureParams; [self.rtcRoomApi setParamSettings:rps paramType:RTC_VIDEO_PARAM_SETTINGS_CAPTURE_PARAMS]; // 视频采集参数 - 前置摄像头 BOOL frontCamera = YES; [self.rtcRoomApi setCameraFace:frontCamera]; // 视频编码参数 RtcVideoEncodeParams *videoParams = [[RtcVideoEncodeParams alloc] init]; videoParams.videoFps = 15; videoParams.videoWidth = 720; videoParams.videoHeight = 1280; videoParams.videoBitrate = 1500; //是否自动发布流 rps.isAutoPublish = YES; [self.rtcRoomApi setParamSettings:rps paramType:RTC_PARAM_SETTINGS_AUTO_PUBLISH]; //是否自动订阅流 rps.isAutoSubscribe = YES; [self.rtcRoomApi setParamSettings:rps paramType:RTC_PARAM_SETTINGS_AUTO_SUBSCRIBE];

5.视频显示 view 设置

@interface ViewController () < BaiduRtcRoomDelegate, RTCRemoteVideoViewDelegate > @property (nonatomic, strong) BaiduRtcRoomApi *rtcRoomApi; //声明本地与远端用户显示的视图 @property (nonatomic, strong) RTCLocalVideoView *localView; @property (nonatomic, strong) RTCRemoteVideoView *remoteView; @end - (void)viewDidLoad { //初始化本地用户显示视图 self.localView = [[RTCLocalVideoView alloc] initWithDelegate:self]; self.localView.videoView.frame = CGRectMake(0, 0, 100, 200); [self.view addSubview:self.localView.videoView]; //初始化远端用户显示视图 self.remoteView = [[RTCRemoteVideoView alloc] initWithDelegate:self]; self.remoteView.videoView.frame = CGRectMake(0, 120, 100, 200); [self.view addSubview:self.remoteView.videoView]; //设置本地视频显示view [self.rtcRoomApi setLocalDisplay:self.localView]; //设置远端用户视频显示view //当多人模式rps.isMultiPlayerModel = NO时,通过此方法设置远端画面 [self.rtcRoomApi setRemoteDisplay:self.remoteView]; /** 当多人模式rps.isMultiPlayerModel = YES时,在BaiduRtcRoomDelegate代理回调里通过以下方法设置远端画面。 可以在提供的demo里面搜索此方法 [self.rtcRoomApi setRemoteDisplay:videoInfo.videoView userId:rtcStreamInfo.userId]; */ } 登录房间 uint32_t tempUserId = [self getRandomNumber:1000 to:9000]; //随机生成数或者输入读取 [self.rtcRoomApi loginRtcRoomWithRoomName:self.roomName userID:tempUserId displayName:@"James"]; 发布流 [self.rtcRoomApi publishStreaming]; 订阅流 [self.rtcRoomApi subsribeStreaming:@[@(123)]]; 登出房间,结束音视频通话 [self.rtcRoomApi logoutRtcRoom];


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有