腾讯云实时音视频的事件回调接口
Module: TRTCCloudDelegate @ TXLiteAVSDK Function: 腾讯云实时音视频的事件回调接口
protocol TRTCCloudDelegate-p |
- (void) onAudioDeviceCaptureVolumeChanged: | (NSInteger) | volume | |
muted: | (BOOL) | muted | |
当前麦克风的系统采集音量发生变化
在 Mac 或 Windows 这样的桌面操作系统上,用户可以在设置中心找到声音相关的设置面板,并设置麦克风的采集音量大小。 用户将麦克风的采集音量设置得越大,麦克风采集到的声音的原始音量也就会越大,反之就会越小。 在有些型号的键盘以及笔记本电脑上,用户还可以通过按下“禁用麦克风”按钮(图标是一个话筒上上叠加了一道代表禁用的斜线)来将麦克风静音。
当用户通过系统设置界面或者通过键盘上的快捷键设定操作系统的麦克风采集音量时,SDK 便会抛出此事件。
volume | 系统采集音量,取值范围 0 - 100,用户可以在系统的声音设置面板上进行拖拽调整。 |
muted | 麦克风是否被用户禁用了:YES 被禁用,NO 被启用。 |
- (void) onAudioDevicePlayoutVolumeChanged: | (NSInteger) | volume | |
muted: | (BOOL) | muted | |
当前系统的播放音量发生变化
在 Mac 或 Windows 这样的桌面操作系统上,用户可以在设置中心找到声音相关的设置面板,并设置系统的播放音量大小。 在有些型号的键盘以及笔记本电脑上,用户还可以通过按下“静音”按钮(图标是一个喇叭上叠加了一道代表禁用的斜线)来将系统静音。
当用户通过系统设置界面或者通过键盘上的快捷键设定操作系统的播放音量时,SDK 便会抛出此事件。
volume | 系统播放音量,取值范围 0 - 100,用户可以在系统的声音设置面板上进行拖拽调整。 |
muted | 系统是否被用户静音了:YES 被静音,NO 已恢复。 |
- (void) onAudioEffectFinished: | (int) | effectId | |
code: | (int) | code | |
音效播放已结束(已废弃)
- (void) onAudioRouteChanged: | (TRTCAudioRoute) | route | |
fromRoute: | (TRTCAudioRoute) | fromRoute | |
当前音频路由发生变化(仅适用于移动设备)
所谓“音频路由”,是指声音是从手机的扬声器还是从听筒中播放出来,音频路由变化也就是声音的播放位置发生了变化。
route | 音频路由,即声音由哪里输出(扬声器、听筒)。 |
fromRoute | 变更前的音频路由。 |
- (void) onCameraDidReady |
摄像头准备就绪
当您调用 startLocalPreivew 之后,SDK 会尝试启动摄像头,如果摄像头能够启动成功就会抛出本事件。 如果启动失败,大概率是因为当前应用没有获得访问摄像头的权限,或者摄像头当前正在被其他程序独占使用中。 您可以通过捕获 onError 事件回调获知这些异常情况并通过 UI 界面提示用户。
- (void) onConnectionLost |
SDK 与云端的连接已经断开
SDK 会在跟云端的连接断开时抛出此事件回调,导致断开的原因大多是网络不可用或者网络切换所致,比如用户在通话中走进电梯时就可能会遇到此事件。 在抛出此事件之后,SDK 会努力跟云端重新建立连接,重连过程中会抛出 onTryToReconnect,连接恢复后会抛出 onConnectionRecovery 。 所以,SDK 会在如下三个连接相关的事件中按如下规律切换:
[onConnectionLost] =====> [onTryToReconnect] =====> [onConnectionRecovery] /|\ | |------------------------------------------------------|
- (void) onConnectionRecovery |
SDK 与云端的连接已经恢复
SDK 会在跟云端的连接断开时抛出 onConnectionLost,之后会努力跟云端重新建立连接并抛出onTryToReconnect,连接恢复后会抛出本事件回调。
- (void) onConnectOtherRoom: | (NSString *) | userId | |
errCode: | (TXLiteAVError) | errCode | |
errMsg: | (nullable NSString *) | errMsg | |
请求跨房通话的结果回调
调用 TRTCCloud 中的 connectOtherRoom() 接口会将两个不同房间中的主播拉通视频通话,也就是所谓的“主播PK”功能。 调用者会收到 onConnectOtherRoom() 回调来获知跨房通话是否成功, 如果成功,两个房间中的所有用户都会收到来自另一个房间中的 PK 主播的 onUserVideoAvailable() 回调。
userId | 要跨房通话的另一个房间中的主播的用户 ID。 |
errCode | 错误码,ERR_NULL 代表切换成功,其他请参见错误码。 |
errMsg | 错误信息。 |
- (void) onDevice: | (NSString *) | deviceId | |
type: | (TRTCMediaDeviceType) | deviceType | |
stateChanged: | (NSInteger) | state | |
本地设备的通断状态发生变化(仅适用于桌面系统)
当本地设备(包括摄像头、麦克风以及扬声器)被插入或者拔出时,SDK 便会抛出此事件回调。
deviceId | 设备 ID |
deviceType | 设备类型 |
state | 通断状态,0:设备断开;1:设备连接。 |
- (void) onDisconnectOtherRoom: | (TXLiteAVError) | errCode | |
errMsg: | (nullable NSString *) | errMsg | |
结束跨房通话的结果回调
- (void) onEnterRoom: | (NSInteger) | result |
进入房间成功与否的事件回调
调用 TRTCCloud 中的 enterRoom() 接口执行进房操作后,会收到来自 TRTCCloudDelegate 的 onEnterRoom(result) 回调:
result | result > 0 时为进房耗时(ms),result < 0 时为进房错误码。 |
- (void) onError: | (TXLiteAVError) | errCode | |
errMsg: | (nullable NSString *) | errMsg | |
extInfo: | (nullable NSDictionary *) | extInfo | |
错误事件回调
错误事件,表示 SDK 抛出的不可恢复的错误,比如进入房间失败或设备开启失败等。 参考文档:错误码表
errCode | 错误码 |
errMsg | 错误信息 |
extInfo | 扩展信息字段,个别错误码可能会带额外的信息帮助定位问题 |
- (void) onExitRoom: | (NSInteger) | reason |
离开房间的事件回调
调用 TRTCCloud 中的 exitRoom() 接口会执行退出房间的相关逻辑,例如释放音视频设备资源和编解码器资源等。 待 SDK 占用的所有资源释放完毕后,SDK 会抛出 onExitRoom() 回调通知到您。
如果您要再次调用 enterRoom() 或者切换到其他的音视频 SDK,请等待 onExitRoom() 回调到来后再执行相关操作。 否则可能会遇到例如摄像头、麦克风设备被强占等各种异常问题。
reason | 离开房间原因,0:主动调用 exitRoom 退出房间;1:被服务器踢出当前房间;2:当前房间整个被解散。 |
- (void) onFirstAudioFrame: | (NSString *) | userId |
SDK 开始播放远端用户的首帧音频
SDK 会在播放远端用户的首帧音频时抛出该事件,本地音频的首帧事件暂不抛出。
userId | 远端用户的用户标识 |
- (void) onFirstVideoFrame: | (NSString *) | userId | |
streamType: | (TRTCVideoStreamType) | streamType | |
width: | (int) | width | |
height: | (int) | height | |
SDK 开始渲染自己本地或远端用户的首帧画面
SDK 会在渲染自己本地或远端用户的首帧画面时抛出该事件,您可以通过回调事件中的 userId 参数来判断事件来自于“本地”还是来自于“远端”。
userId | 本地或远端的用户标识,如果 userId 为空值代表自己本地的首帧画面已到来,userId 不为空则代表远端用户的首帧画面已到来。 |
streamType | 视频流类型:主路(Main)一般用于承载摄像头画面,辅路(Sub)一般用于承载屏幕分享画面。 |
width | 画面的宽度。 |
height | 画面的高度。 |
- (void) onLocalRecordBegin: | (NSInteger) | errCode | |
storagePath: | (NSString *) | storagePath | |
本地录制任务已经开始的事件回调
当您调用 startLocalRecording 启动本地媒体录制任务时,SDK 会抛出该事件回调,用于通知您录制任务是否已经顺利启动。
errCode | 错误码 0:初始化录制成功;-1:初始化录制失败;-2: 文件后缀名有误。 |
storagePath | 录制文件存储路径 |
- (void) onLocalRecordComplete: | (NSInteger) | errCode | |
storagePath: | (NSString *) | storagePath | |
本地录制任务已经结束的事件回调
当您调用 stopLocalRecording 停止本地媒体录制任务时,SDK 会抛出该事件回调,用于通知您录制任务的最终结果。
errCode | 错误码 0:录制成功;-1:录制失败;-2:切换分辨率或横竖屏导致录制结束。 |
storagePath | 录制文件存储路径 |
- (void) onLocalRecording: | (NSInteger) | duration | |
storagePath: | (NSString *) | storagePath | |
本地录制任务正在进行中的进展事件回调
当您调用 startLocalRecording 成功启动本地媒体录制任务后,SDK 变会定时地抛出本事件回调。 您可通过捕获该事件回调来获知录制任务的健康状况。 您可以在 startLocalRecording 时设定本事件回调的抛出间隔。
duration | 已经录制的累计时长,单位毫秒 |
storagePath | 录制文件存储路径 |
- (void) onMicDidReady |
麦克风准备就绪
当您调用 startLocalAudio 之后,SDK 会尝试启动麦克风,如果麦克风能够启动成功就会抛出本事件。 如果启动失败,大概率是因为当前应用没有获得访问麦克风的权限,或者麦克风当前正在被其他程序独占使用中。 您可以通过捕获 onError 事件回调获知这些异常情况并通过 UI 界面提示用户。
- (void) onMissCustomCmdMsgUserId: | (NSString *) | userId | |
cmdID: | (NSInteger) | cmdID | |
errCode: | (NSInteger) | errCode | |
missed: | (NSInteger) | missed | |
自定义消息丢失的事件回调
当您使用 sendCustomCmdMsg 发送自定义 UDP 消息时,即使设置了可靠传输(reliable),也无法确保100%不丢失,只是丢消息概率极低,能满足常规可靠性要求。 在发送端设置了可靠运输(reliable)后,SDK 都会通过此回调通知过去时间段内(通常为5s)传输途中丢失的自定义消息数量统计信息。
userId | 用户标识 |
cmdID | 命令 ID |
errCode | 错误码 |
missed | 丢失的消息数量 |
- (void) onNetworkQuality: | (TRTCQualityInfo *) | localQuality | |
remoteQuality: | (NSArray< TRTCQualityInfo * > *) | remoteQuality | |
网络质量的实时统计回调
该统计回调每间隔2秒抛出一次,用于通知 SDK 感知到的当前网络的上行和下行质量。 SDK 会使用一组内嵌的自研算法对当前网络的延迟高低、带宽大小以及稳定情况进行评估,并计算出一个的评估结果: 如果评估结果为 1(Excellent) 代表当前的网络情况非常好,如果评估结果为 6(Down)代表当前网络无法支撑 TRTC 的正常通话。
localQuality | 上行网络质量 |
remoteQuality | 下行网络质量 |
- (void) onRecvCustomCmdMsgUserId: | (NSString *) | userId | |
cmdID: | (NSInteger) | cmdID | |
seq: | (UInt32) | seq | |
message: | (NSData *) | message | |
收到自定义消息的事件回调
当房间中的某个用户使用 sendCustomCmdMsg 发送自定义 UDP 消息时,房间中的其它用户可以通过 onRecvCustomCmdMsg 事件回调接收到该条消息。
userId | 用户标识 |
cmdID | 命令 ID |
seq | 消息序号 |
message | 消息数据 |
- (void) onRecvSEIMsg: | (NSString *) | userId | |
message: | (NSData *) | message | |
收到 SEI 消息的回调
当房间中的某个用户使用 sendSEIMsg 借助视频数据帧发送 SEI 消息时,房间中的其它用户可以通过 onRecvSEIMsg 事件回调接收到该条消息。
userId | 用户标识 |
message | 数据 |
- (void) onRemoteUserEnterRoom: | (NSString *) | userId |
有用户加入当前房间
出于性能方面的考虑,在 TRTC 两种不同的应用场景(即 AppScene,在 enterRoom 时通过第二个参数指定)下,该通知的行为会有差别:
userId | 远端用户的用户标识 |
- (void) onRemoteUserLeaveRoom: | (NSString *) | userId | |
reason: | (NSInteger) | reason | |
有用户离开当前房间
与 onRemoteUserEnterRoom 相对应,在两种不同的应用场景(即 AppScene,在 enterRoom 时通过第二个参数指定)下,该通知的行为会有差别:
userId | 远端用户的用户标识 |
reason | 离开原因,0表示用户主动退出房间,1表示用户超时退出,2表示被踢出房间。 |
- (void) onRemoteVideoStatusUpdated: | (NSString *) | userId | |
streamType: | (TRTCVideoStreamType) | streamType | |
streamStatus: | (TRTCAVStatusType) | status | |
reason: | (TRTCAVStatusChangeReason) | reason | |
extrainfo: | (nullable NSDictionary *) | info | |
远端视频状态变化的事件回调
您可以通过此事件回调获取远端每一路画面的播放状态(包括 Playing、Loading 和 Stopped 三种状态),从而进行相应的 UI 展示。
userId | 用户标识 |
streamType | 视频流类型:主路(Main)一般用于承载摄像头画面,辅路(Sub)一般用于承载屏幕分享画面。 |
status | 视频状态:包括 Playing、Loading 和 Stopped 三种状态。 |
reason | 视频状态改变的原因 |
extrainfo | 额外信息 |
- (void) onScreenCapturePaused: | (int) | reason |
屏幕分享暂停的事件回调
当您通过 pauseScreenCapture 暂停屏幕分享时,SDK 便会抛出此事件回调。
reason | 原因。
|
- (void) onScreenCaptureResumed: | (int) | reason |
屏幕分享恢复的事件回调
当您通过 resumeScreenCapture 恢复屏幕分享时,SDK 便会抛出此事件回调。
reason | 恢复原因。
|
- (void) onScreenCaptureStarted |
屏幕分享开启的事件回调
当您通过 startScreenCapture 等相关接口启动屏幕分享时,SDK 便会抛出此事件回调。
- (void) onScreenCaptureStoped: | (int) | reason |
屏幕分享停止的事件回调
当您通过 stopScreenCapture 停止屏幕分享时,SDK 便会抛出此事件回调。
reason | 停止原因,0:用户主动停止;1:屏幕窗口关闭导致停止;2:表示屏幕分享的显示屏状态变更(如接口被拔出、投影模式变更等)。 |
- (void) onSendFirstLocalAudioFrame |
自己本地的首个音频帧已被发布出去
当您成功进入房间并通过 startLocalAudio 开启本地音频采集之后(开启采集和进入房间的先后顺序无影响), SDK 就会开始进行音频编码,并通过自身的网络模块向云端发布自己本地的音频数据。 当 SDK 成功地向云端送出自己的第一帧音频数据帧以后,就会抛出 onSendFirstLocalAudioFrame 事件回调。
- (void) onSendFirstLocalVideoFrame: | (TRTCVideoStreamType) | streamType |
自己本地的首个视频帧已被发布出去
当您成功进入房间并通过 startLocalPreview 或 startScreenCapture 开启本地视频采集之后(开启采集和进入房间的先后顺序无影响), SDK 就会开始进行视频编码,并通过自身的网络模块向云端发布自己本地的视频数据。 当 SDK 成功地向云端送出自己的第一帧视频数据帧以后,就会抛出 onSendFirstLocalVideoFrame 事件回调。
streamType | 视频流类型:主路(Main)一般用于承载摄像头画面,辅路(Sub)一般用于承载屏幕分享画面。 |
- (void) onSetMixTranscodingConfig: | (int) | err | |
errMsg: | (NSString *) | errMsg | |
设置云端混流的排版布局和转码参数的事件回调
当您调用 setMixTranscodingConfig 调整云端混流的排版布局和转码参数时,SDK 会立刻将这一调整指令同步给云端服务器。 随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
err | 错误码:0表示成功,其余值表示失败。 |
errMsg | 具体的错误原因。 |
- (void) onSpeedTestResult: | (TRTCSpeedTestResult *) | result |
网速测试的结果回调
该统计回调由 startSpeedTest: 触发。
result | 网速测试数据数据,包括丢包、往返延迟、上下行的带宽速率,详情请参考 TRTCSpeedTestResult。 |
- (void) onStartPublishCDNStream: | (int) | err | |
errMsg: | (NSString *) | errMsg | |
开始向非腾讯云 CDN 上发布音视频流的事件回调
当您调用 startPublishCDNStream 开始向非腾讯云直播 CDN 上发布音视频流时,SDK 会立刻将这一指令同步给云端服务器。 随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
err | 0表示成功,其余值表示失败 |
errMsg | 具体错误原因 |
- (void) onStartPublishing: | (int) | err | |
errMsg: | (NSString *) | errMsg | |
开始向腾讯云直播 CDN 上发布音视频流的事件回调
当您调用 startPublishing 开始向腾讯云直播 CDN 上发布音视频流时,SDK 会立刻将这一指令同步给云端服务器。 随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
err | 0表示成功,其余值表示失败 |
errMsg | 具体错误原因 |
- (void) onStatistics: | (TRTCStatistics *) | statistics |
音视频技术指标的实时统计回调
该统计回调每间隔2秒抛出一次,用于通知 SDK 内部音频、视频以及网络相关的专业技术指标,这些信息在 TRTCStatistics 均有罗列:
statistics | 统计数据,包括自己本地的统计信息和远端用户的统计信息,详情请参考 TRTCStatistics。 |
- (void) onStopPublishCDNStream: | (int) | err | |
errMsg: | (NSString *) | errMsg | |
停止向非腾讯云 CDN 上发布音视频流的事件回调
当您调用 stopPublishCDNStream 开始向非腾讯云直播 CDN 上发布音视频流时,SDK 会立刻将这一指令同步给云端服务器。 随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
err | 0表示成功,其余值表示失败 |
errMsg | 具体错误原因 |
- (void) onStopPublishing: | (int) | err | |
errMsg: | (NSString *) | errMsg | |
停止向腾讯云直播 CDN 上发布音视频流的事件回调
当您调用 stopPublishing 停止向腾讯云直播 CDN 上发布音视频流时,SDK 会立刻将这一指令同步给云端服务器。 随后 SDK 会收到来自云端服务器的处理结果,并将指令的执行结果通过本事件回调通知给您。
err | 0表示成功,其余值表示失败 |
errMsg | 具体错误原因 |
- (void) onSwitchRole: | (TXLiteAVError) | errCode | |
errMsg: | (nullable NSString *) | errMsg | |
切换角色的事件回调
调用 TRTCCloud 中的 switchRole() 接口会切换主播和观众的角色,该操作会伴随一个线路切换的过程, 待 SDK 切换完成后,会抛出 onSwitchRole() 事件回调。
errCode | 错误码,ERR_NULL 代表切换成功,其他请参见错误码。 |
errMsg | 错误信息。 |
- (void) onSwitchRoom: | (TXLiteAVError) | errCode | |
errMsg: | (nullable NSString *) | errMsg | |
切换房间的结果回调
调用 TRTCCloud 中的 switchRoom() 接口可以让用户快速地从一个房间切换到另一个房间, 待 SDK 切换完成后,会抛出 onSwitchRoom() 事件回调。
errCode | 错误码,ERR_NULL 代表切换成功,其他请参见错误码。 |
errMsg | 错误信息。 |
- (void) onSystemAudioLoopbackError: | (TXLiteAVError) | err |
系统声音采集是否被成功开启的事件回调(仅适用于 Mac 系统)
在 Mac 系统上,您可以通过调用 startSystemAudioLoopback 为当前系统安装一个音频驱动,并让 SDK 通过该音频驱动捕获当前 Mac 系统播放出的声音。 当用于播片教学或音乐直播中,比如老师端可以使用此功能,让 SDK 能够采集老师所播放的电影中的声音,使同房间的学生端也能听到电影中的声音。 SDK 会将统声音采集是否被成功开启的结果,通过本事件回调抛出,需要您关注参数中的错误码。
err | ERR_NULL 表示成功,其余值表示失败。 |
- (void) onTryToReconnect |
SDK 正在尝试重新连接到云端
SDK 会在跟云端的连接断开时抛出 onConnectionLost,之后会努力跟云端重新建立连接并抛出本事件,连接恢复后会抛出 onConnectionRecovery。
- (void) onUserAudioAvailable: | (NSString *) | userId | |
available: | (BOOL) | available | |
某远端用户发布/取消了自己的音频
当您收到 onUserAudioAvailable(userId, YES) 通知时,表示该用户发布了自己的声音,此时 SDK 的表现为:
userId | 远端用户的用户标识 |
available | 该用户是否发布(或取消发布)了自己的音频,YES: 发布;NO:取消发布。 |
- (void) onUserEnter: | (NSString *) | userId |
有主播加入当前房间(已废弃)
- (void) onUserExit: | (NSString *) | userId | |
reason: | (NSInteger) | reason | |
有主播离开当前房间(已废弃)
- (void) onUserSubStreamAvailable: | (NSString *) | userId | |
available: | (BOOL) | available | |
某远端用户发布/取消了辅路视频画面
“辅路画面”一般被用于承载屏幕分享的画面。当您收到 onUserSubStreamAvailable(userId, YES) 通知时,表示该路画面已经有可播放的视频帧到达。 此时,您需要调用 startRemoteSubStreamView 接口订阅该用户的远程画面,订阅成功后,您会继续收到该用户的首帧画面渲染回调 onFirstVideoFrame(userid)。
userId | 远端用户的用户标识 |
available | 该用户是否发布(或取消发布)了辅路视频画面,YES: 发布;NO:取消发布。 |
- (void) onUserVideoAvailable: | (NSString *) | userId | |
available: | (BOOL) | available | |
某远端用户发布/取消了主路视频画面
“主路画面”一般被用于承载摄像头画面。当您收到 onUserVideoAvailable(userId, YES) 通知时,表示该路画面已经有可播放的视频帧到达。 此时,您需要调用 startRemoteView 接口订阅该用户的远程画面,订阅成功后,您会继续收到该用户的首帧画面渲染回调 onFirstVideoFrame(userid)。
当您收到 onUserVideoAvailable(userId, NO) 通知时,表示该路远程画面已经被关闭,关闭的原因可能是该用户调用了 muteLocalVideo 或 stopLocalPreview。
userId | 远端用户的用户标识 |
available | 该用户是否发布(或取消发布)了主路视频画面,YES: 发布;NO:取消发布。 |
- (void) onUserVideoSizeChanged: | (NSString *) | userId | |
streamType: | (TRTCVideoStreamType) | streamType | |
newWidth: | (int) | newWidth | |
newHeight: | (int) | newHeight | |
用户视频大小发生改变回调。
当您收到 onUserVideoSizeChanged(userId, streamtype, newWidth, newHeight) 通知时,表示该路画面大小发生了调整,调整的原因可能是该用户调用了 setVideoEncoderParam 或者 setSubStreamEncoderParam 重新设置了画面尺寸。
userId | 用户标识 |
streamType | 视频流类型:主路(Main)一般用于承载摄像头画面,辅路(Sub)一般用于承载屏幕分享画面。 |
newWidth | 视频流的宽度(像素) |
newHeight | 视频流的高度(像素) |
- (void) onUserVoiceVolume: | (NSArray< TRTCVolumeInfo * > *) | userVolumes | |
totalVolume: | (NSInteger) | totalVolume | |
音量大小的反馈回调
SDK 可以评估每一路音频的音量大小,并每隔一段时间抛出该事件回调,您可以根据音量大小在 UI 上做出相应的提示,比如“波形图”或“音量槽”。 要完成这个功能, 您需要先调用 enableAudioVolumeEvaluation 开启这个能力并设定事件抛出的时间间隔。 需要补充说明的是,无论当前房间中是否有人说话,SDK 都会按照您设定的时间间隔定时抛出此事件回调,只不过当没有人说话时,userVolumes 为空,totalVolume 为 0。
userVolumes | 是一个数组,用于承载所有正在说话的用户的音量大小,取值范围 0 - 100。 |
totalVolume | 所有远端用户的总音量大小, 取值范围 0 - 100。 |
- (void) onWarning: | (TXLiteAVWarning) | warningCode | |
warningMsg: | (nullable NSString *) | warningMsg | |
extInfo: | (nullable NSDictionary *) | extInfo | |
警告事件回调
警告事件,表示 SDK 抛出的提示性问题,比如视频出现卡顿或 CPU 使用率太高等。 参考文档:错误码表
warningCode | 警告码 |
warningMsg | 警告信息 |
extInfo | 扩展信息字段,个别警告码可能会带额外的信息帮助定位问题 |
protocol TRTCVideoRenderDelegate-p |
构造函数 | |
(void) | - onRenderVideoFrame:userId:streamType: |
|
optional |
自定义视频渲染回调
当您设置了本地或者远端的视频自定义渲染回调之后,SDK 就会将原本要交给渲染控件进行渲染的视频帧通过此回调接口抛送给您,以便于您进行自定义渲染。
frame | 待渲染的视频帧信息 |
userId | 视频源的 userId,如果是本地视频回调(setLocalVideoRenderDelegate),该参数可以忽略 |
streamType | 频流类型:主路(Main)一般用于承载摄像头画面,辅路(Sub)一般用于承载屏幕分享画面。 |
protocol TRTCVideoFrameDelegate-p |
构造函数 | |
(uint32_t) | - onProcessVideoFrame:dstFrame: |
(void) | - onGLContextDestory |
|
optional |
SDK 内部 OpenGL 环境被销的通知
|
optional |
用于对接第三方美颜组件的视频处理回调
如果您选购了第三方美颜组件,就需要在 TRTCCloud 中设置第三方美颜回调,之后 TRTC 就会将原本要进行预处理的视频帧通过此回调接口抛送给您。 之后您就可以将 TRTC 抛出的视频帧交给第三方美颜组件进行图像处理,由于抛出的数据是可读且可写的,因此第三方美颜的处理结果也可以同步给 TRTC 进行后续的编码和发送。
srcFrame | 用于承载 TRTC 采集到的摄像头画面 |
dstFrame | 用于接收第三方美颜处理过的视频画面 |
情况一:美颜组件自身会产生新的纹理 如果您使用的美颜组件会在处理图像的过程中产生一帧全新的纹理(用于承载处理后的图像),那请您在回调函数中将 dstFrame.textureId 设置为新纹理的 ID:
uint32_t onProcessVideoFrame(TRTCVideoFrame * _Nonnull)srcFrame dstFrame:(TRTCVideoFrame * _Nonnull)dstFrame{ self.frameID += 1; dstFrame.pixelBuffer = [[FURenderer shareRenderer] renderPixelBuffer:srcFrame.pixelBuffer withFrameId:self.frameID items:self.renderItems itemCount:self.renderItems.count]; return 0; }
情况二:美颜组件需要您提供目标纹理 如果您使用的第三方美颜模块并不生成新的纹理,而是需要您设置给该模块一个输入纹理和一个输出纹理,则可以考虑如下方案:
protocol TRTCAudioFrameDelegate-p |
构造函数 | |
(void) | - onCapturedRawAudioFrame: |
(void) | - onLocalProcessedAudioFrame: |
(void) | - onRemoteUserAudioFrame:userId: |
(void) | - onMixedPlayAudioFrame: |
(void) | - onMixedAllAudioFrame: |
|
optional |
本地采集并经过音频模块前处理后的音频数据回调
当您设置完音频数据自定义回调之后,SDK 内部会把刚采集到并经过前处理(ANS、AEC、AGC)之后的数据,以 PCM 格式的形式通过本接口回调给您。
frame | PCM 格式的音频数据帧 |
|
optional |
本地采集并经过音频模块前处理、音效处理和混 BGM 后的音频数据回调
当您设置完音频数据自定义回调之后,SDK 内部会把刚采集到并经过前处理、音效处理和混 BGM 之后的数据,在最终进行网络编码之前,以 PCM 格式的形式通过本接口回调给您。
特殊说明: 您可以通过设置接口中的 TRTCAudioFrame.extraData
字段,达到传输信令的目的。 由于音频帧头部的数据块不能太大,建议您写入 extraData
时,尽量将信令控制在几个字节的大小,如果超过 100 个字节,写入的数据不会被发送。 房间内其他用户可以通过 TRTCAudioFrameDelegate 中的 onRemoteUserAudioFrame
中的 TRTCAudioFrame.extraData
字段回调接收数据。
frame | PCM 格式的音频数据帧 |
|
optional |
SDK 所有音频混合后的音频数据(包括采集到的和待播放的)
当您设置完音频数据自定义回调之后,SDK 内部会把所有采集到的和待播放的音频数据混合起来,以 PCM 格式的形式通过本接口回调给您,便于您进行自定义录制。
frame | PCM 格式的音频数据帧 |
|
optional |
将各路待播放音频混合之后并在最终提交系统播放之前的数据回调
当您设置完音频数据自定义回调之后,SDK 内部会把各路待播放的音频混合之后的音频数据,在提交系统播放之前,以 PCM 格式的形式通过本接口回调给您。
frame | PCM 格式的音频数据帧 |
|
optional |
混音前的每一路远程用户的音频数据
当您设置完音频数据自定义回调之后,SDK 内部会把远端的每一路原始数据,在最终混音之前,以 PCM 格式的形式通过本接口回调给您。
frame | PCM 格式的音频数据帧 |
userId | 用户标识 |
protocol TRTCLogDelegate-p |
构造函数 | |
(void) | - onLog:LogLevel:WhichModule: |
|
optional |
本地 LOG 的打印回调
如果您希望捕获 SDK 的本地日志打印行为,可以通过设置日志回调,让 SDK 将要打印的日志都通过本回调接口抛送给您。
log | 日志内容 |
level | 日志等级 参见 TRTC_LOG_LEVEL |
module | 保留字段,暂无具体意义,目前为固定值 TXLiteAVSDK |