这个开源示例项目演示了如何快速集成 网易云信 新一代(G2)音视频 SDK,实现1对1音视频通话。
在这个示例项目中包含了以下功能:
- 加入通话和离开通话
- 静音和解除静音
- 关闭视频和打开视频
- 切换前置摄像头和后置摄像头
- Xcode 10.0+
- iOS真机设备
- 支持模拟器运行,但是部分功能无法使用
这个段落主要讲解了如何编译和运行实例程序。
在编译和启动实例程序前,您需要首先获取一个可用的App Key:
-
若您已经与专属客户经理取得联系,可直接向他获取Appkey
-
若您并未与专属客户经理取得联系那么请按后续步骤获取Appkey
-
首先在 网易云信 注册账号
-
然后在「应用」一栏中创建您的项目
-
等待专属客户经理联系您,并向他获取Appkey
-
将AppKey填写进AppKey.h
NSString *const AppKey = <#请填入您的APPKey#>;
- 进入Demo根路径,执行
Pod install
- 使用Xcode打开NERtcP2pSample.xcworkspace,连接iPhone/iPad测试设备,设置有效的开发者签名后即可运行
-
引擎初始化。配置音视频相关参数。
- (void)setupRTCEngine { NERtcEngine *coreEngine = [NERtcEngine sharedEngine]; NERtcEngineContext *context = [[NERtcEngineContext alloc] init]; context.engineDelegate = self; //引擎事件回调 context.appKey = AppKey; //注册APPkey [coreEngine setupEngineWithContext:context]; //初始化SDK }
-
加入和离开房间。调用SDK接口加入和退出音视频房间
/* ---- 加入房间 ---- */ NSString *channelName = "频道名称" uint64_t userId = "用户ID" [NERtcEngine.sharedEngine joinChannelWithToken:@"" channelName:channelName myUid:userId completion:^(NSError * _Nullable error, uint64_t channelId, uint64_t elapesd) { if (error) { //加入失败 } else { //加入成功,建立本地canvas,准备渲染本地视图 } }]; /* ---- 离开房间 ---- */ [NERtcEngine.sharedEngine leaveChannel];
-
建立Canvas,渲染画面。针对每个用户需要单独建立Canvas用于渲染该用户的图像。
/* ---- 本地用户渲染 ---- */ - (void)setupLocalCanvas { NERtcVideoCanvas *canvas = [[NERtcVideoCanvas alloc] init]; canvas.container = _localRenderView; /* UIView,本地待渲染view */ canvas.renderMode = kNERtcVideoRenderScaleCropFill; /* 渲染模式 */ [NERtcEngine.sharedEngine setupLocalVideoCanvas:canvas]; } /* ---- 远端用户渲染 ----- */ - (void)setupRemoteCanvas:(uint64_t)userId { NERtcVideoCanvas *canvas = [[NERtcVideoCanvas alloc] init]; canvas.container = _remoteRenderView; /* UIView,远端待渲染view */ canvas.renderMode = kNERtcVideoRenderScaleCropFill; /* 渲染模式 */ [NERtcEngine.sharedEngine setupRemoteVideoCanvas:canvas forUserID:userID]; }
-
订阅/取消订阅远端视频流
/* ---- 引擎回调(NERtcEngineDelegateEx),有远端用户开启了视频 --- */ - (void)onNERtcEngineUserVideoDidStartWithUserID:(uint64_t)userID videoProfile:(NERtcVideoProfileType)profile { [NERtcEngine.sharedEngine subscribeRemoteVideo:YES /* 参数如果为NO,则为取消订阅 */ forUserID:userID streamType:kNERtcRemoteVideoStreamTypeHigh]; }
-
音视频控制
/* ---- 本地音频控制(开关) ---- */ BOOL enableLocalAudio = YES; /* YES:开启音频 NO:关闭音频 */ [NERtcEngine.sharedEngine enableLocalAudio:enableLocalAudio]; /* ---- 本地视频控制(开关) ---- */ BOOL enableLocalVideo = YES; /* YES:开启视频 NO:关闭视频 */ [NERtcEngine.sharedEngine enableLocalVideo:enableLocalVideo];