TRTCCloudDelegate.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492
  1. /*
  2. * Module: TRTCCloudDelegate @ TXLiteAVSDK
  3. *
  4. * Function: 腾讯云视频通话功能的事件回调接口
  5. *
  6. */
  7. #import <Foundation/Foundation.h>
  8. #import "TRTCCloudDef.h"
  9. #import "TXLiteAVCode.h"
  10. NS_ASSUME_NONNULL_BEGIN
  11. @class TRTCCloud;
  12. @class TRTCStatistics;
  13. /**
  14. * 腾讯云视频通话功能的事件回调接口
  15. */
  16. @protocol TRTCCloudDelegate <NSObject>
  17. @optional
  18. /////////////////////////////////////////////////////////////////////////////////
  19. //
  20. // (一)通用事件回调
  21. //
  22. /////////////////////////////////////////////////////////////////////////////////
  23. /// @name 通用事件回调
  24. /// @{
  25. /**
  26. * 1.1 错误回调:SDK 不可恢复的错误,一定要监听,并分情况给用户适当的界面提示。
  27. *
  28. * @param errCode 错误码
  29. * @param errMsg 错误信息
  30. * @param extInfo 扩展信息字段,个别错误码可能会带额外的信息帮助定位问题
  31. */
  32. - (void)onError:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg extInfo:(nullable NSDictionary*)extInfo;
  33. /**
  34. * 1.2 警告回调:用于告知您一些非严重性问题,比如出现了卡顿或者可恢复的解码失败。
  35. *
  36. * @param warningCode 警告码
  37. * @param warningMsg 警告信息
  38. * @param extInfo 扩展信息字段,个别警告码可能会带额外的信息帮助定位问题
  39. */
  40. - (void)onWarning:(TXLiteAVWarning)warningCode warningMsg:(nullable NSString *)warningMsg extInfo:(nullable NSDictionary*)extInfo;
  41. /// @}
  42. /////////////////////////////////////////////////////////////////////////////////
  43. //
  44. // (二)房间事件回调
  45. //
  46. /////////////////////////////////////////////////////////////////////////////////
  47. /// @name 房间事件回调
  48. /// @{
  49. /**
  50. * 2.1 加入房间的事件回调
  51. *
  52. * @param elapsed 加入房间耗时
  53. */
  54. - (void)onEnterRoom:(NSInteger)elapsed;
  55. /**
  56. * 2.2 离开房间的事件回调
  57. *
  58. * @param reason 离开房间原因
  59. */
  60. - (void)onExitRoom:(NSInteger)reason;
  61. /**
  62. * 2.3 请求跨房通话的结果回调
  63. */
  64. - (void)onConnectOtherRoom:(NSString*)userId errCode:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg;
  65. /**
  66. * 2.4 断开跨房通话的结果回调
  67. */
  68. - (void)onDisconnectOtherRoom:(TXLiteAVError)errCode errMsg:(nullable NSString *)errMsg;
  69. /// @}
  70. /////////////////////////////////////////////////////////////////////////////////
  71. //
  72. // (三)成员事件回调
  73. //
  74. /////////////////////////////////////////////////////////////////////////////////
  75. /// @name 成员事件回调
  76. /// @{
  77. /**
  78. * 3.1 有新的音视频用户加入房间
  79. *
  80. * 当有新的音视频用户(有开启音频或者视频上行的用户)加入房间后,房间里的其他用户会收到该通知。
  81. *
  82. * 由于单个 TRTC 的房间可以容纳很多人的加入,所以并不是任何用户加入房间后都会出发 onUserEnter 事件,这可能会造成性能上的灾难。
  83. * 只有一个用户开启了音频或者视频上行的时候,房间里的其他用户才能收到该通知。
  84. *
  85. * 您可以在收到该通知后,在 UI 界面上增加一个用户的头像,但并不推荐立刻 startRemoteView,
  86. * 因为该用户可能只有声音没有视频,onUserVideoAvailable 则是真正的宣告某个用户的画面可以显示了。
  87. *
  88. * @param userId 用户标识
  89. * @warning - 并不是所有用户加入房间都会触发此通知,只有开启音频或者视频上行的用户才会触发此通知。
  90. * - 收到该通知后,并不推荐立刻 startRemoteView,因为可能该用户只开启了音频而没有开启视频。
  91. */
  92. - (void)onUserEnter:(NSString *)userId;
  93. /**
  94. * 3.2 有用户从当前房间中离开
  95. *
  96. * @param userId 用户标识
  97. * @param reason 离开原因代码,区分用户是正常离开,还是由于网络断线等原因离开。
  98. */
  99. - (void)onUserExit:(NSString *)userId reason:(NSInteger)reason;
  100. /**
  101. * 3.3 userId 对应的远端主路(即摄像头)画面的状态通知
  102. *
  103. * 当 available 为 YES 时,您可以在这个回调中调用 startRemoteView 显示该 userId 的视频画面。
  104. *
  105. * @param userId 用户标识
  106. * @param available 画面是否开启
  107. */
  108. - (void)onUserVideoAvailable:(NSString *)userId available:(BOOL)available;
  109. /**
  110. * 3.4 userId 对应的远端辅路(屏幕分享等)画面的状态通知
  111. *
  112. * @note 显示辅路画面使用的函数不是 startRemoteView 而是 startRemoteSubStreamView。
  113. * @param userId 用户标识
  114. * @param available 屏幕分享是否开启
  115. */
  116. - (void)onUserSubStreamAvailable:(NSString *)userId available:(BOOL)available;
  117. /**
  118. * 3.5 userId 对应的远端声音的状态通知
  119. *
  120. * @param userId 用户标识
  121. * @param available 声音是否开启
  122. */
  123. - (void)onUserAudioAvailable:(NSString *)userId available:(BOOL)available;
  124. /**
  125. * 3.6 用于提示音量大小的回调,包括每个 userId 的音量和远端总音量
  126. *
  127. * 您可以通过调用 TRTCCloud 中的 enableAudioVolumeEvaluation 接口来开关这个回调或者设置它的触发间隔。
  128. * 需要注意的是,调用 enableAudioVolumeEvaluation 开启音量回调后,无论频道内是否有人说话,都会按设置的时间间隔调用这个回调;如果没有人说话,则 userVolumes 为空,totalVolume 为0。
  129. *
  130. * @param userVolumes 所有正在说话的房间成员的音量(取值范围0 - 100)。即 userVolumes 内仅包含音量不为0(正在说话)的用户音量信息。其中 userId 为 null 表示 local 的音量,也就是自己的音量。
  131. * @param totalVolume 所有远端成员的总音量, 取值范围0 - 100
  132. */
  133. - (void)onUserVoiceVolume:(NSArray<TRTCVolumeInfo *> *)userVolumes totalVolume:(NSInteger)totalVolume;
  134. /// @}
  135. /////////////////////////////////////////////////////////////////////////////////
  136. //
  137. // (四)统计和质量回调
  138. //
  139. /////////////////////////////////////////////////////////////////////////////////
  140. /// @name 统计和质量回调
  141. /// @{
  142. /**
  143. * 4.1 网络质量:该回调每2秒触发一次,统计当前网络的上行和下行质量
  144. *
  145. * @note userId == nil 代表自己当前的视频质量
  146. *
  147. * @param localQuality 上行网络质量
  148. * @param remoteQuality 下行网络质量
  149. */
  150. - (void)onNetworkQuality: (TRTCQualityInfo*)localQuality remoteQuality:(NSArray<TRTCQualityInfo*>*)remoteQuality;
  151. /**
  152. * 4.2 技术指标统计回调
  153. *
  154. * 如果您是熟悉音视频领域相关术语,可以通过这个回调获取 SDK 的所有技术指标。
  155. * 如果您是首次开发音视频相关项目,可以只关注 onNetworkQuality 回调。
  156. *
  157. * @param statistics 统计数据,包括本地和远程的
  158. * @note 每2秒回调一次
  159. */
  160. - (void)onStatistics: (TRTCStatistics *)statistics;
  161. /// @}
  162. /////////////////////////////////////////////////////////////////////////////////
  163. //
  164. // (五)音视频事件回调
  165. //
  166. /////////////////////////////////////////////////////////////////////////////////
  167. /// @name 音视频事件回调
  168. /// @{
  169. /**
  170. * 5.1 首帧视频画面已到达,界面此时可以结束 Loading,并开始显示视频画面
  171. *
  172. * @param userId 用户 ID
  173. * @param width 画面宽度
  174. * @param height 画面高度
  175. */
  176. - (void)onFirstVideoFrame:(NSString*)userId width:(int)width height:(int)height;
  177. /**
  178. * 5.2 首帧音频数据已到达
  179. * @param userId 用户 ID
  180. */
  181. - (void)onFirstAudioFrame:(NSString*)userId;
  182. /// @}
  183. /////////////////////////////////////////////////////////////////////////////////
  184. //
  185. // (六)服务器事件回调
  186. //
  187. /////////////////////////////////////////////////////////////////////////////////
  188. /// @name 服务器事件回调
  189. /// @{
  190. /**
  191. * 6.1 SDK 跟服务器的连接断开
  192. */
  193. - (void)onConnectionLost;
  194. /**
  195. * 6.2 SDK 尝试重新连接到服务器
  196. */
  197. - (void)onTryToReconnect;
  198. /**
  199. * 6.3 SDK 跟服务器的连接恢复
  200. */
  201. - (void)onConnectionRecovery;
  202. /// @}
  203. /////////////////////////////////////////////////////////////////////////////////
  204. //
  205. // (七)硬件设备事件回调
  206. //
  207. /////////////////////////////////////////////////////////////////////////////////
  208. /// @name 硬件设备事件回调
  209. /// @{
  210. /**
  211. * 7.1 摄像头准备就绪
  212. */
  213. - (void)onCameraDidReady;
  214. /**
  215. * 7.2 麦克风准备就绪
  216. */
  217. - (void)onMicDidReady;
  218. #if TARGET_OS_IPHONE
  219. /**
  220. * 7.3 音频路由发生变化(仅 iOS),音频路由即声音由哪里输出(扬声器、听筒)
  221. *
  222. * @param route 当前音频路由
  223. * @param fromRoute 变更前的音频路由
  224. */
  225. - (void)onAudioRouteChanged:(TRTCAudioRoute)route fromRoute:(TRTCAudioRoute)fromRoute;
  226. #endif
  227. #if !TARGET_OS_IPHONE && TARGET_OS_MAC
  228. /**
  229. * 7.4 本地设备通断回调
  230. *
  231. * @param deviceId 设备 ID
  232. * @param deviceType 设备类型
  233. * @param state 0:设备断开;1:设备连接
  234. */
  235. - (void)onDevice:(NSString *)deviceId type:(TRTCMediaDeviceType)deviceType stateChanged:(NSInteger)state;
  236. #endif
  237. /// @}
  238. /////////////////////////////////////////////////////////////////////////////////
  239. //
  240. // (八)自定义消息的接收回调
  241. //
  242. //
  243. /////////////////////////////////////////////////////////////////////////////////
  244. /// @name 自定义消息的接收回调
  245. /// @{
  246. /**
  247. * 8.1 收到自定义消息回调
  248. *
  249. * 当房间中的某个用户使用 sendCustomCmdMsg 发送自定义消息时,房间中的其它用户可以通过 onRecvCustomCmdMsg 接口接收消息
  250. *
  251. * @param userId 用户标识
  252. * @param cmdID 命令 ID
  253. * @param seq 消息序号
  254. * @param message 消息数据
  255. */
  256. - (void)onRecvCustomCmdMsgUserId:(NSString *)userId cmdID:(NSInteger)cmdID seq:(UInt32)seq message:(NSData *)message;
  257. /**
  258. * 8.2 自定义消息丢失回调
  259. *
  260. * TRTC 所使用的传输通道为 UDP 通道,所以即使设置了 reliable,也做不到100%不丢失,只是丢消息概率极低,能满足常规可靠性要求。
  261. * 在过去的一段时间内(通常为5s),自定义消息在传输途中丢失的消息数量的统计,SDK 都会通过此回调通知出来。
  262. *
  263. * @note 只有在发送端设置了可靠传输(reliable),接收方才能收到消息的丢失回调
  264. * @param userId 用户标识
  265. * @param cmdID 命令 ID
  266. * @param errCode 错误码
  267. * @param missed 丢失的消息数量
  268. */
  269. - (void)onMissCustomCmdMsgUserId:(NSString *)userId cmdID:(NSInteger)cmdID errCode:(NSInteger)errCode missed:(NSInteger)missed;
  270. /**
  271. * 8.3 收到 SEI 消息的回调
  272. *
  273. * 当房间中的某个用户使用 sendSEIMsg 发送数据时,房间中的其它用户可以通过 onRecvSEIMsg 接口接收数据。
  274. *
  275. * @param userId 用户标识
  276. * @param message 数据
  277. */
  278. - (void)onRecvSEIMsg:(NSString *)userId message:(NSData*)message;
  279. /// @}
  280. /////////////////////////////////////////////////////////////////////////////////
  281. //
  282. // (九)CDN 旁路转推回调
  283. //
  284. /////////////////////////////////////////////////////////////////////////////////
  285. /// @name CDN 旁路转推回调
  286. /// @{
  287. /**
  288. * 9.1 启动旁路推流到 CDN 完成的回调
  289. *
  290. * 对应于 TRTCCloud 中的 startPublishCDNStream() 接口
  291. *
  292. * @note Start 回调如果成功,只能说明转推请求已经成功告知给腾讯云,如果目标 CDN 有异常,还是有可能会转推失败。
  293. */
  294. - (void)onStartPublishCDNStream:(int)err errMsg:(NSString *)errMsg;
  295. /**
  296. * 9.2 停止旁路推流到 CDN 完成的回调
  297. *
  298. * 对应于 TRTCCloud 中的 stopPublishCDNStream() 接口
  299. *
  300. */
  301. - (void)onStopPublishCDNStream:(int)err errMsg:(NSString *)errMsg;
  302. /**
  303. * 9.3 设置云端的混流转码参数的回调,对应于 TRTCCloud 中的 setMixTranscodingConfig() 接口
  304. *
  305. * @param err 0表示成功,其余值表示失败
  306. * @param errMsg 具体错误原因
  307. */
  308. - (void)onSetMixTranscodingConfig:(int)err errMsg:(NSString*)errMsg;
  309. /// @}
  310. /////////////////////////////////////////////////////////////////////////////////
  311. //
  312. // (十)屏幕分享回调
  313. //
  314. /////////////////////////////////////////////////////////////////////////////////
  315. /// @name 自定义消息的接收回调
  316. /// @{
  317. /**
  318. * 10.1 当屏幕分享开始时,SDK 会通过此回调通知
  319. */
  320. - (void)onScreenCaptureStarted;
  321. /**
  322. * 10.2 当屏幕分享暂停时,SDK 会通过此回调通知
  323. *
  324. * @param reason 原因,0:用户主动暂停;1:屏幕窗口不可见暂停
  325. */
  326. - (void)onScreenCapturePaused:(int)reason;
  327. /**
  328. * 10.3 当屏幕分享开始时,SDK 会通过此回调通知
  329. *
  330. * @param reason 恢复原因,0:用户主动恢复;1:屏幕窗口恢复可见导致恢复分享
  331. */
  332. - (void)onScreenCaptureResumed:(int)reason;
  333. /**
  334. * 10.4 当屏幕分享开始时,SDK 会通过此回调通知
  335. *
  336. * @param reason 停止原因,0:用户主动停止;1:屏幕窗口关闭导致停止
  337. */
  338. - (void)onScreenCaptureStoped:(int)reason;
  339. @end
  340. /// @}
  341. /////////////////////////////////////////////////////////////////////////////////
  342. //
  343. // (十一)自定义视频渲染回调
  344. //
  345. /////////////////////////////////////////////////////////////////////////////////
  346. #pragma mark - TRTCVideoRenderDelegate
  347. /**
  348. * 视频数据帧的自定义处理回调
  349. */
  350. @protocol TRTCVideoRenderDelegate <NSObject>
  351. /**
  352. * 自定义视频渲染回调
  353. *
  354. * @param frame 待渲染的视频帧信息
  355. * @param userId 视频源的 userId,如果是本地视频回调(setLocalVideoRenderDelegate),该参数可以不用理会
  356. * @param streamType 视频源类型,比如是摄像头画面还是屏幕分享画面等等
  357. */
  358. @optional
  359. - (void) onRenderVideoFrame:(TRTCVideoFrame * _Nonnull)frame userId:(NSString* __nullable)userId streamType:(TRTCVideoStreamType)streamType;
  360. @end
  361. /////////////////////////////////////////////////////////////////////////////////
  362. //
  363. // (十二)音频数据回调
  364. //
  365. /////////////////////////////////////////////////////////////////////////////////
  366. /**
  367. * 声音数据帧的自定义处理回调(只读)
  368. */
  369. @protocol TRTCAudioFrameDelegate <NSObject>
  370. @optional
  371. /**
  372. * 本地麦克风采集到的音频数据回调
  373. *
  374. * @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。
  375. * @note - 此接口回调出的音频数据是只读的,不支持修改。
  376. */
  377. - (void) onCapturedAudioFrame:(TRTCAudioFrame *)frame;
  378. /**
  379. * 混音前的每一路远程用户的音频数据(比如您要对某一路的语音进行文字转换,必须要使用这里的原始数据,而不是混音之后的数据)
  380. *
  381. * @param frame 音频数据
  382. * @param userId 用户标识
  383. * @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。
  384. * @note - 此接口回调出的音频数据是只读的,不支持修改。
  385. */
  386. - (void) onPlayAudioFrame:(TRTCAudioFrame *)frame userId:(NSString *)userId;
  387. /**
  388. * 各路音频数据混合后送入喇叭播放的音频数据
  389. *
  390. * @note - 请不要在此回调函数中做任何耗时操作,建议直接拷贝到另一线程进行处理,否则会导致各种声音问题。
  391. * @note - 此接口回调出的音频数据是只读的,不支持修改。
  392. */
  393. - (void) onMixedPlayAudioFrame:(TRTCAudioFrame *)frame;
  394. @end
  395. /////////////////////////////////////////////////////////////////////////////////
  396. //
  397. // (十三)Log 信息回调
  398. //
  399. /////////////////////////////////////////////////////////////////////////////////
  400. /**
  401. * 日志相关回调
  402. *
  403. * 建议在一个比较早初始化的类中设置回调委托对象,如 AppDelegate
  404. */
  405. @protocol TRTCLogDelegate <NSObject>
  406. /**
  407. * 有日志打印时的回调
  408. *
  409. * @param log 日志内容
  410. * @param level 日志等级 参见 TRTCLogLevel
  411. * @param module 值暂无具体意义,目前为固定值 TXLiteAVSDK
  412. */
  413. @optional
  414. -(void) onLog:(nullable NSString*)log LogLevel:(TRTCLogLevel)level WhichModule:(nullable NSString*)module;
  415. @end
  416. NS_ASSUME_NONNULL_END