双向音视频通话

更新时间:2024-12-30 06:17:36下载pdf

双向音视频通话包含基于 音视频功能 扩展的双向传输能力和呼叫能力。SDK 发出呼叫请求的同时,发起视频直播,开启本地音视频采集。对端接听和 P2P 通道连接后,进行双向音视频传输。

流程说明

双向音视频通话

核心接口

演示录屏 接口 描述 备注
ThingSmartCameraFactory +(id)cameraWithP2PType:deviceId:delegate: 创建 ThingSmartCameraType 对象 一个设备 ID 对应一个 ThingSmartCameraType 对象
ThingSmartCallChannel -(void)fetchDeviceCallAbilityByDevId:completion: 设备是否支持双向视频对讲高级能力 -
- (void)launch 启动呼叫服务 -
- (BOOL)registerCallInterfaceManager: 注册呼叫 UI 管理 负责生成、跳转和退出呼叫页面
- (BOOL)addDelegate: 添加代理 ThingSmartCallChannelDelegate 详细说明请参考本表格
- (BOOL)isOnCalling 是否正在呼叫 -
- (void)startCallWithTargetId:timeout:extra:success:failure: 发起呼叫 failure 中返回对应错误信息
- (void)handlePushMessage: 处理呼叫推送消息 -
ThingSmartCallChannelDelegate - (void)callChannel:didReceiveInvalidCall: 呼叫无效 参数等非法等
- (void)callChannel:didReceiveInvalidPushCall: 呼叫推送无效 参数等非法/呼叫过期等
- (void)callChannel:didReceiveCallEventsMessage: 拦截所有呼叫事件消息 不推荐,如需自定义呼叫流程可使用
ThingSmartCameraType -(void)connectWithMode: 连接 -3 或 -105 建议重连
- (void)bindLocalVideoView: 绑定本地视频渲染视图 -
- (void)unbindLocalVideoView 解绑本地视频渲染视图 -
-(int)startLocalVideoCaptureWithVideoInfo: 开始本地视频采集 注意手机摄像头的权限申请:NSCameraUsageDescription
-(int)stopLocalVideoCapture 停止本地视频采集 -
-(int)switchLocalCameraPosition 切换手机摄像头方向 -
- (void)startTalk 开始音频对讲 -
- (void)stopTalk 结束音频对讲 -
- (int)startVideoTalk 开始视频对讲 -
-(int)stopVideoTalk 结束视频对讲 -
- (int)pauseVideoTalk 暂停视频对讲 -
- (int)resumeVideoTalk 恢复视频对讲 -
-(int)startAudioRecordWithAudioInfo: 开始音频采集 注意手机麦克风的权限申请:NSMicrophoneUsageDescription
-(int)stopAudioRecord 结束音频采集 -
- (void)startPreviewWithDefinition: 指定清晰度开始直播 根据设备能力上报获取清晰度,开始直播成功后通过 ThingSmartCameraDelegate 中的 - (void)cameraDidBeginPreview: 方法回调
- (int)stopPreview 停止直播 停止直播成功后,通过 ThingSmartCameraDelegate 中的 - (void)cameraDidStopPreview: 方法回调
-(int)disConnect 断开连接 -
ThingSmartCameraDelegate -(void)cameraInitFailed: 创建 ThingSmartCameraType 对象失败 P2P 类型不支持
-(void)cameraDidConnected: 连接成功 -
- (void)cameraDidBeginPreview: 开始直播成功 -
- (void)camera:didReceiveLocalVideoSampleBuffer:localVideoInfo: 手机摄像头视频流数据 -
- (void)cameraDidBeginTalk: 开始语音对讲回调 -
- (void)cameraDidStopTalk: 结束语音对讲回调 -
- (void)cameraDidStartVideoTalk: 开始视频对讲回调 -
- (void)cameraDidStopVideoTalk: 结束视频对讲回调 -
- (void)cameraDidPauseVideoTalk: 暂停视频对讲回调 -
- (void)cameraDidResumeVideoTalk: 恢复视频对讲回调 -
- (void)cameraDidStopPreview: 停止直播成功 -
-(void)camera:didOccurredErrorAtStep:specificErrorCode: 返回直播相关操作失败的步骤和错误码 连接、开始直播、停止直播等操作

重点关注

  • 手机音视频采集,请提前申请系统权限。
  • 开启音视频通话时,调用大量原子化接口。为避免打开页面卡顿,请控制接口调用顺序。
  • 设备需要开启双向视频高级能力才可以发送和接收呼叫。

核心代码

创建 ThingSmartCameraType 对象

+ (id<ThingSmartCameraType>)cameraWithP2PType:(id)type deviceId:(NSString *)devId delegate:(id<ThingSmartCameraDelegate>)delegate;

- (void)cameraInitFailed:(ThingSmartCameraErrorCode)errorCode;

连接

- (void)connectWithMode:(ThingSmartCameraConnectMode)mode;

- (void)cameraDidConnected:(id<ThingSmartCameraType>)camera;

开始直播

//开始直播
- (void)startPreviewWithDefinition:(ThingSmartCameraDefinition)definition;
//开始直播成功
- (void)cameraDidBeginPreview:(id<ThingSmartCameraType>)camera;

停止直播

//停止直播
- (void)stopPreview;
//停止直播成功
- (void)cameraDidStopPreview:(id<ThingSmartCameraType>)camera;

断连

//主动断开连接
- (void)disConnect;
//被动断开连接
- (void)cameraDisconnected:(id<ThingSmartCameraType>)camera specificErrorCode:(NSInteger)errorCode;

本地视频渲染视图

//绑定自定义本地视频渲染视图
- (void)bindLocalVideoView:(UIView<ThingSmartVideoViewType> *)videoView;
//解绑自定义本地视频渲染视图
- (void)unbindLocalVideoView:(UIView<ThingSmartVideoViewType> *)videoView;

音频对讲

//开启音频采集
-(int)startAudioRecordWithAudioInfo:(nullable id<ThingSmartLocalAudioInfoType>)audioInfo;
//开启音频对讲
- (void)startTalk;
//开启音频对讲完成
- (void)cameraDidBeginTalk:(id<ThingSmartCameraType>)camera;

//关闭音频采集
-(int)stopAudioRecord;
//停止音频对讲
- (void)stopTalk;
//停止音频对讲完成
- (void)cameraDidStopTalk:(id<ThingSmartCameraType>)camera;

视频对讲

//开启本地摄像头
-(int)startLocalVideoCaptureWithVideoInfo:(nullable id<ThingSmartLocalVideoInfoType>)videoInfo;

//关闭本地摄像头
-(int)stopLocalVideoCapture;

//切换摄像头
-(int)switchLocalCameraPosition;

//本地视频流数据
- (void)camera:(id<ThingSmartCameraType>)camera didReceiveLocalVideoSampleBuffer:(CMSampleBufferRef)sampleBuffer localVideoInfo:(id<ThingSmartLocalVideoInfoType>)localVideoInfo;

//开始视频对讲
- (int)startVideoTalk;
//开始视频对讲完成回调
- (void)cameraDidStartVideoTalk:(id<ThingSmartCameraType>)camera;

//停止视频对讲
-(int)stopVideoTalk;
//停止视频对讲完成回调
- (void)cameraDidStopVideoTalk:(id<ThingSmartCameraType>)camera;

//暂停视频对讲
- (int)pauseVideoTalk;
//暂停视频对讲完成回调
- (void)cameraDidPauseVideoTalk:(id<ThingSmartCameraType>)camera;;

//恢复视频对讲
- (int)resumeVideoTalk;
//恢复视频对讲完成回调
- (void)cameraDidResumeVideoTalk:(id<ThingSmartCameraType>)camera;


示例代码

SDK sample 中包含完整流程,可点击查看。