TRTCCloud.h 47 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294
  1. /*
  2. * Module: TRTCCloud @ TXLiteAVSDK
  3. *
  4. * Function: 腾讯云视频通话功能的主要接口类
  5. *
  6. * Version: 6.4.7111
  7. */
  8. #import <Foundation/Foundation.h>
  9. #import <VideoToolbox/VideoToolbox.h>
  10. #import "TRTCCloudDelegate.h"
  11. #import "TRTCCloudDef.h"
  12. /// 腾讯云视频通话功能的主要接口类
  13. @interface TRTCCloud : NSObject
  14. // 请使用 +sharedIntance 方法
  15. + (instancetype)new __attribute__((unavailable("Use +sharedInstance instead")));
  16. - (instancetype)init __attribute__((unavailable("Use +sharedInstance instead")));
  17. /////////////////////////////////////////////////////////////////////////////////
  18. //
  19. // SDK 基础函数
  20. //
  21. /////////////////////////////////////////////////////////////////////////////////
  22. /// @name 创建与销毁
  23. /// @{
  24. /**
  25. * 创建 TRTCCloud 单例
  26. */
  27. + (instancetype)sharedInstance;
  28. /**
  29. * 销毁 TRTCCloud 单例
  30. */
  31. + (void)destroySharedIntance;
  32. /**
  33. * 设置回调接口 TRTCCloudDelegate
  34. *
  35. * 您可以通过 TRTCCloudDelegate 获得来自 SDK 的各种状态通知,详见 TRTCCloudDelegate.h 中的定义
  36. */
  37. @property (nonatomic, weak) id<TRTCCloudDelegate> delegate;
  38. /**
  39. * 设置驱动 TRTCCloudDelegate 回调的队列
  40. *
  41. * SDK 默认会采用 Main Queue 作为驱动 TRTCCloudDelegate,也就是说,如果您不指定自己的 delegateQueue,
  42. * SDK 的 TRTCCloudDelegate 回调都将由 Main Queue 来调用。此时您在 TRTCCloudDelegate 的回调函数里操作 UI 是线程安全的。
  43. */
  44. @property (nonatomic, strong) dispatch_queue_t delegateQueue;
  45. /// @}
  46. /////////////////////////////////////////////////////////////////////////////////
  47. //
  48. // (一)房间相关接口函数
  49. //
  50. /////////////////////////////////////////////////////////////////////////////////
  51. #pragma mark - 房间相关接口函数
  52. /// @name 房间相关接口函数
  53. /// @{
  54. /**
  55. * 1.1 进入房间
  56. *
  57. * @param param 进房参数,请参考 TRTCParams
  58. * @param scene 应用场景,目前支持视频通话(VideoCall)和在线直播(Live)两种场景
  59. * @note 不管进房是否成功,都必须与 exitRoom 配对使用,在调用 exitRoom 前再次调用 enterRoom 函数会导致不可预期的错误问题
  60. */
  61. - (void)enterRoom:(TRTCParams *)param appScene:(TRTCAppScene)scene;
  62. /**
  63. * 1.2 离开房间
  64. */
  65. - (void)exitRoom;
  66. /**
  67. * 1.3 请求跨房通话
  68. *
  69. * TRTC SDK 支持两个不同的房间之间进行互联。在通话场景下,该功能意义不大。
  70. * 在直播场景下,该功能可用于实现“主播 PK”的功能,即两个主播在已经有各自音视频房间存在的情况下,
  71. * 通过跨房通话功能,可以在保留两个音视频房间的情况下把麦上的主播拉通在一起。
  72. *
  73. * 跨房通话的参数采用了 JSON 格式,要求至少包含两个字段:
  74. * - roomId:连麦房间号,比如 A 主播当前的房间号是123,另一个主播 B 的房间号是678,对于主播 A 而言,roomId 填写123即可。
  75. * - userId:另一个房间的 userId,在“主播 PK”场景下,userId 指定为另一个房间的主播 ID 即可。
  76. *
  77. * 跨房通话的请求结果会通过 TRTCCloudDelegate 中的 onConnectOtherRoom 回调通知给您。
  78. *
  79. * <pre>
  80. * NSMutableDictionary * jsonDict = [[NSMutableDictionary alloc] init];
  81. * [jsonDict setObject:@(678) forKey:@"roomId"];
  82. * [jsonDict setObject:@"userB" forKey:@"userId"];
  83. * NSData* jsonData = [NSJSONSerialization dataWithJSONObject:jsonDict options:NSJSONWritingPrettyPrinted error:nil];
  84. * NSString* jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
  85. * [trtc connectOtherRoom:jsonString];
  86. * </pre>
  87. *
  88. * @param param JSON 字符串连麦参数,roomId 代表目标房间号,userId 代表目标用户 ID。
  89. *
  90. **/
  91. - (void)connectOtherRoom:(NSString *)param;
  92. /**
  93. * 1.4 退出跨房通话
  94. *
  95. * 跨房通话的退出结果会通过 TRTCCloudDelegate 中的 onDisconnectOtherRoom 回调通知给您。
  96. **/
  97. - (void)disconnectOtherRoom;
  98. /// @}
  99. /////////////////////////////////////////////////////////////////////////////////
  100. //
  101. // (二)视频相关接口函数
  102. //
  103. /////////////////////////////////////////////////////////////////////////////////
  104. #pragma mark - 视频相关接口函数
  105. /// @name 视频相关接口函数
  106. /// @{
  107. #if TARGET_OS_IPHONE
  108. /**
  109. * 2.1 开启本地视频的预览画面 (iOS 版本)
  110. *
  111. * @param frontCamera YES:前置摄像头;NO:后置摄像头。
  112. * @param view 承载视频画面的控件
  113. */
  114. - (void)startLocalPreview:(BOOL)frontCamera view:(TXView *)view;
  115. #elif TARGET_OS_MAC
  116. /**
  117. * 2.1 开启本地视频的预览画面 (Mac 版本)
  118. *
  119. * 在调用该方法前,可以先调用 setCurrentCameraDevice 选择使用 Mac 自带的摄像头还是外接摄像头。
  120. *
  121. * @param view 承载视频画面的控件
  122. */
  123. - (void)startLocalPreview:(TXView *)view;
  124. #endif
  125. /**
  126. * 2.2 停止本地视频采集及预览
  127. */
  128. - (void)stopLocalPreview;
  129. /**
  130. * 2.3 开始显示远端视频画面
  131. *
  132. * 在收到 SDK 的 onUserVideoAvailable 回调时,调用这个接口,就可以显示远端视频的画面了。
  133. *
  134. * @param userId 对方的用户标识
  135. * @param view 承载视频画面的控件
  136. */
  137. - (void)startRemoteView:(NSString *)userId view:(TXView *)view;
  138. /**
  139. * 2.4 停止显示远端视频画面
  140. *
  141. * @param userId 对方的用户标识
  142. */
  143. - (void)stopRemoteView:(NSString *)userId;
  144. /**
  145. * 2.5 停止显示所有远端视频画面
  146. *
  147. * @note 如果有屏幕分享的画面在显示,则屏幕分享的画面也会一并被关闭。
  148. */
  149. - (void)stopAllRemoteView;
  150. /**
  151. * 2.6 是否屏蔽自己的视频画面
  152. *
  153. * 当屏蔽本地视频后,房间里的其它成员将会收到 onUserVideoAvailable 回调通知
  154. *
  155. * @param mute YES:屏蔽;NO:开启
  156. */
  157. - (void)muteLocalVideo:(BOOL)mute;
  158. /**
  159. * 2.7 设置视频编码器相关参数
  160. *
  161. * 该设置决定了远端用户看到的画面质量(同时也是云端录制出的视频文件的画面质量)
  162. *
  163. * @param param 视频编码参数,详情请参考 TRTCCloudDef.h 中的 TRTCVideoEncParam 定义
  164. */
  165. - (void)setVideoEncoderParam:(TRTCVideoEncParam*)param;
  166. /**
  167. * 2.8 设置网络流控相关参数
  168. *
  169. * 该设置决定了 SDK 在各种网络环境下的调控策略(比如弱网下是“保清晰”还是“保流畅”)
  170. *
  171. * @param param 网络流控参数,详情请参考 TRTCCloudDef.h 中的 TRTCNetworkQosParam 定义
  172. */
  173. - (void)setNetworkQosParam:(TRTCNetworkQosParam*)param;
  174. /**
  175. * 2.9 设置本地图像的渲染模式
  176. *
  177. * @param mode 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边)
  178. */
  179. - (void)setLocalViewFillMode:(TRTCVideoFillMode)mode;
  180. /**
  181. * 2.10 设置远端图像的渲染模式
  182. *
  183. * @param userId 用户 ID
  184. * @param mode 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边)
  185. */
  186. - (void)setRemoteViewFillMode:(NSString*)userId mode:(TRTCVideoFillMode)mode;
  187. /**
  188. * 2.11 设置本地图像的顺时针旋转角度
  189. *
  190. * @param rotation 支持90、180、270旋转角度
  191. */
  192. - (void)setLocalViewRotation:(TRTCVideoRotation)rotation;
  193. /**
  194. * 2.12 设置远端图像的顺时针旋转角度
  195. *
  196. * @param userId 用户 ID
  197. * @param rotation 支持90、180、270旋转角度
  198. */
  199. - (void)setRemoteViewRotation:(NSString*)userId rotation:(TRTCVideoRotation)rotation;
  200. /**
  201. * 2.13 设置视频编码输出的(也就是远端用户观看到的,以及服务器录制下来的)画面方向
  202. *
  203. * 在 iPad、iPhone 等设备180度旋转时,由于摄像头的采集方向没有变,所以另一边的用户看到的画面是上下颠倒的,
  204. * 在这种情况下,您可以通过该接口将 SDK 输出到对方的画面旋转180度,这样可以可以确保对方看到的画面依然正常。
  205. *
  206. * @param rotation 目前支持0和180两个旋转角度
  207. */
  208. - (void)setVideoEncoderRotation:(TRTCVideoRotation)rotation;
  209. #if TARGET_OS_IPHONE
  210. /**
  211. * 2.14 设置本地摄像头预览画面的镜像模式(iOS)
  212. *
  213. * @param mirror 镜像模式
  214. */
  215. - (void)setLocalViewMirror:(TRTCLocalVideoMirrorType)mirror;
  216. #elif TARGET_OS_MAC
  217. /**
  218. * 2.14 设置本地摄像头预览画面的镜像模式(Mac)
  219. *
  220. * @param mirror 镜像模式
  221. */
  222. - (void)setLocalViewMirror:(BOOL)mirror;
  223. #endif
  224. /**
  225. * 2.15 设置编码器输出的画面镜像模式
  226. *
  227. * 该接口不改变本地摄像头的预览画面,但会改变另一端用户看到的(以及服务器录制下来的)画面效果。
  228. *
  229. * @param mirror 是否开启远端镜像,YES:开启远端画面镜像;NO:关闭远端画面镜像;默认值:NO。
  230. */
  231. - (void)setVideoEncoderMirror:(BOOL)mirror;
  232. /**
  233. * 2.16 设置重力感应的适应模式
  234. *
  235. * @param mode 重力感应模式,详情请参考 TRTCGSensorMode 的定义
  236. */
  237. - (void)setGSensorMode:(TRTCGSensorMode) mode;
  238. /**
  239. * 2.17 开启大小画面双路编码模式
  240. *
  241. * 如果当前用户是房间中的主要角色(比如主播、老师、主持人等),并且使用 PC 或者 Mac 环境,可以开启该模式。
  242. * 开启该模式后,当前用户会同时输出【高清】和【低清】两路视频流(但只有一路音频流)。
  243. * 对于开启该模式的当前用户,会占用更多的网络带宽,并且会更加消耗 CPU 计算资源。
  244. *
  245. * 对于同一房间的远程观众而言:
  246. * - 如果有些人的下行网络很好,可以选择观看【高清】画面
  247. * - 如果有些人的下行网络不好,可以选择观看【低清】画面
  248. *
  249. * @note 双路编码开启后,会消耗更多的 CPU 和 网络带宽,所以对于 iMac、Windows 或者高性能 Pad 可以考虑开启,但请不要在手机端开启。
  250. *
  251. * @param enable 是否开启小画面编码
  252. * @param smallVideoEncParam 小流的视频参数
  253. * @return 0:成功;-1:大画面已经是最低画质
  254. */
  255. - (int)enableEncSmallVideoStream:(BOOL)enable withQuality:(TRTCVideoEncParam*)smallVideoEncParam;
  256. /**
  257. * 2.18 选定观看指定 uid 的大画面还是小画面
  258. *
  259. * 此功能需要该 uid 通过 enableEncSmallVideoStream 提前开启双路编码模式。
  260. * 如果该 uid 没有开启双路编码模式,则此操作将无任何反应。
  261. *
  262. * @param userId 用户 ID
  263. * @param type 视频流类型,即选择看大画面还是小画面
  264. */
  265. - (void)setRemoteVideoStreamType:(NSString*)userId type:(TRTCVideoStreamType)type;
  266. /**
  267. * 2.19 设定观看方优先选择的视频质量
  268. *
  269. * 低端设备推荐优先选择低清晰度的小画面。
  270. * 如果对方没有开启双路视频模式,则此操作无效。
  271. *
  272. * @param type 默认观看大画面还是小画面
  273. */
  274. - (void)setPriorRemoteVideoStreamType:(TRTCVideoStreamType)type;
  275. /// @}
  276. /////////////////////////////////////////////////////////////////////////////////
  277. //
  278. // (三)音频相关接口函数
  279. //
  280. /////////////////////////////////////////////////////////////////////////////////
  281. #pragma mark - 音频相关接口函数
  282. /// @name 音频相关接口函数
  283. /// @{
  284. /**
  285. * 3.1 开启本地音频的采集和上行
  286. *
  287. * 该函数会启动麦克风采集,并将音频数据传输给房间里的其他用户。
  288. * SDK 并不会默认开启本地的音频上行,也就说,如果您不调用这个函数,房间里的其他用户就听不到您的声音。
  289. *
  290. * @note 该函数会检查麦克风的使用权限,如果当前 App 没有麦克风权限,SDK 会向用户申请开启。
  291. */
  292. - (void)startLocalAudio;
  293. /**
  294. * 3.2 关闭本地音频的采集和上行
  295. *
  296. * 当关闭本地音频的采集和上行,房间里的其它成员会收到 onUserAudioAvailable(NO) 回调通知。
  297. */
  298. - (void)stopLocalAudio;
  299. /**
  300. * 3.3 静音本地的音频
  301. *
  302. * 当静音本地音频后,房间里的其它成员会收到 onUserAudioAvailable(NO) 回调通知。
  303. *
  304. * 与 stopLocalAudio 不同之处在于,muteLocalAudio 并不会停止发送音视频数据,而是会继续发送码率极低的静音包。
  305. * 在对录制质量要求很高的场景中,选择 muteLocalAudio 是更好的选择,能录指出兼容性更好的 MP4 文件。
  306. * 这是由于 MP4 等视频文件格式,对于音频的连续性是要求很高的,简单粗暴地 stopLocalAudio 会导致录制出的 MP4 不易播放。
  307. *
  308. * @param mute YES:屏蔽;NO:开启
  309. */
  310. - (void)muteLocalAudio:(BOOL)mute;
  311. /**
  312. * 3.4 设置音频路由
  313. *
  314. * 微信和手机 QQ 里的视频通话功能,都有一个免提模式,开启后就不用把手机贴在耳朵上,这个功能就是基于音频路由实现的。
  315. * 一般手机都有两个扬声器,一个是位于顶部的听筒扬声器,声音偏小;一个是位于底部的立体声扬声器,声音偏大。
  316. * 设置音频路由的作用就是要决定声音从哪个扬声器播放出来。
  317. *
  318. * @param route 音频路由,即声音由哪里输出(扬声器、听筒)
  319. */
  320. - (void)setAudioRoute:(TRTCAudioRoute)route;
  321. /**
  322. * 3.5 静音掉某一个用户的声音
  323. *
  324. * @param userId 对方的用户 ID
  325. * @param mute YES:静音;NO:非静音
  326. */
  327. - (void)muteRemoteAudio:(NSString *)userId mute:(BOOL)mute;
  328. /**
  329. * 3.6 静音掉所有用户的声音
  330. *
  331. * @param mute YES:静音;NO:非静音
  332. */
  333. - (void)muteAllRemoteAudio:(BOOL)mute;
  334. /**
  335. * 3.7 启用音量大小提示
  336. *
  337. * 开启后会在 onUserVoiceVolume 中获取到 SDK 对音量大小值的评估。
  338. * 我们在 Demo 中有一个音量大小的提示条,就是基于这个接口实现的。
  339. *
  340. *
  341. * @param interval 决定了 onUserVoiceVolume 回调的触发间隔,单位为ms,最小间隔为100ms,如果小于等于0则会关闭回调,建议设置为300ms;详细的回调规则请参考 onUserVoiceVolume 的注释说明
  342. */
  343. - (void)enableAudioVolumeEvaluation:(NSUInteger)interval;
  344. /// @}
  345. /////////////////////////////////////////////////////////////////////////////////
  346. //
  347. // (四)摄像头相关接口函数
  348. //
  349. /////////////////////////////////////////////////////////////////////////////////
  350. #pragma mark - 摄像头相关接口函数
  351. /// @name 摄像头相关接口函数
  352. /// @{
  353. #if TARGET_OS_IPHONE
  354. /**
  355. * 4.1 切换摄像头
  356. */
  357. - (void)switchCamera;
  358. /**
  359. * 4.2 查询当前摄像头是否支持缩放
  360. */
  361. - (BOOL)isCameraZoomSupported;
  362. /**
  363. * 4.3 设置摄像头缩放因子(焦距)
  364. *
  365. * 取值范围1 - 5,当为1的时候为最远视角(正常镜头),当为5的时候为最近视角(放大镜头)。
  366. * 这里最大值推荐为5,超过5后视频数据会变得模糊不清。
  367. *
  368. * @param distance 取值范围为1 - 5,数值越大,焦距越远
  369. * @note
  370. */
  371. - (void)setZoom:(CGFloat)distance;
  372. /**
  373. * 4.4 查询是否支持开关闪光灯(手电筒模式)
  374. */
  375. - (BOOL)isCameraTorchSupported;
  376. /**
  377. * 4.5 开关闪光灯
  378. *
  379. * @param enable YES:开启;NO:关闭
  380. */
  381. - (BOOL)enbaleTorch:(BOOL)enable;
  382. /**
  383. * 4.6 查询是否支持设置焦点
  384. */
  385. - (BOOL)isCameraFocusPositionInPreviewSupported;
  386. /**
  387. * 4.7 设置摄像头焦点
  388. *
  389. * @param touchPoint 对焦位置
  390. */
  391. - (void)setFocusPosition:(CGPoint)touchPoint;
  392. /**
  393. * 4.8 查询是否支持自动识别人脸位置
  394. */
  395. - (BOOL)isCameraAutoFocusFaceModeSupported;
  396. /**
  397. * 4.9 自动识别人脸位置
  398. *
  399. * @param enable YES:开启;NO:关闭
  400. */
  401. - (void)enableAutoFaceFoucs:(BOOL)enable;
  402. #elif TARGET_OS_MAC
  403. /**
  404. * 4.10 获取摄像头设备列表
  405. *
  406. * Mac 主机本身自带一个质量很好的摄像头,但它也允许插入 USB 摄像头。
  407. * 如果您希望用户选择自己外接的摄像头,可以提供一个多摄像头选择的功能。
  408. *
  409. * @return 摄像头设备列表,第一项为当前系统默认设备
  410. */
  411. - (NSArray<TRTCMediaDeviceInfo*>*)getCameraDevicesList;
  412. /**
  413. * 4.11 获取当前要使用的摄像头
  414. */
  415. - (TRTCMediaDeviceInfo*)getCurrentCameraDevice;
  416. /**
  417. * 4.12 设置要使用的摄像头
  418. *
  419. * @param deviceId 从 getCameraDevicesList 中得到的设备 ID
  420. * @return 0:成功;-1:失败
  421. */
  422. - (int)setCurrentCameraDevice:(NSString*)deviceId;
  423. #endif
  424. /// @}
  425. /////////////////////////////////////////////////////////////////////////////////
  426. //
  427. // (五)音频设备相关接口函数
  428. //
  429. /////////////////////////////////////////////////////////////////////////////////
  430. #pragma mark - 音频设备相关接口函数
  431. /// @name 音频设备相关接口函数
  432. /// @{
  433. #if !TARGET_OS_IPHONE && TARGET_OS_MAC
  434. /**
  435. * 5.1 获取麦克风设备列表
  436. *
  437. * Mac 主机本身自带一个质量很好的麦克风,但它也允许用户外接其他的麦克风,而且很多 USB 摄像头上也自带麦克风。
  438. * 如果您希望用户选择自己外接的麦克风,可以提供一个多麦克风选择的功能。
  439. *
  440. * @return 麦克风设备列表,第一项为当前系统默认设备
  441. */
  442. - (NSArray<TRTCMediaDeviceInfo*>*)getMicDevicesList;
  443. /**
  444. * 5.2 获取当前的麦克风设备
  445. *
  446. * @return 当前麦克风设备信息
  447. */
  448. - (TRTCMediaDeviceInfo*)getCurrentMicDevice;
  449. /**
  450. * 5.3 设置要使用的麦克风
  451. *
  452. * @param deviceId 从 getMicDevicesList 中得到的设备 ID
  453. * @return 0:成功;<0:失败
  454. */
  455. - (int)setCurrentMicDevice:(NSString*)deviceId;
  456. /**
  457. * 5.4 获取当前麦克风设备音量
  458. *
  459. * @return 麦克风音量
  460. */
  461. - (float)getCurrentMicDeviceVolume;
  462. /**
  463. * 5.5 设置麦克风设备的音量
  464. *
  465. * @param volume 麦克风音量值,范围0 - 100
  466. */
  467. - (void)setCurrentMicDeviceVolume:(NSInteger)volume;
  468. /**
  469. * 5.6 获取扬声器设备列表
  470. *
  471. * @return 扬声器设备列表,第一项为当前系统默认设备
  472. */
  473. - (NSArray<TRTCMediaDeviceInfo*>*)getSpeakerDevicesList;
  474. /**
  475. * 5.7 获取当前的扬声器设备
  476. *
  477. * @return 当前扬声器设备信息
  478. */
  479. - (TRTCMediaDeviceInfo*)getCurrentSpeakerDevice;
  480. /**
  481. * 5.8 设置要使用的扬声器
  482. *
  483. * @param deviceId 从 getSpeakerDevicesList 中得到的设备 ID
  484. * @return 0:成功;<0:失败
  485. */
  486. - (int)setCurrentSpeakerDevice:(NSString*)deviceId;
  487. /**
  488. * 5.9 当前扬声器设备音量
  489. *
  490. * @return 扬声器音量
  491. */
  492. - (float)getCurrentSpeakerDeviceVolume;
  493. /**
  494. * 5.10 设置当前扬声器音量
  495. *
  496. * @param volume 设置的扬声器音量,范围0 - 100
  497. * @return 0:成功;<0:失败
  498. */
  499. - (int)setCurrentSpeakerDeviceVolume:(NSInteger)volume;
  500. #endif
  501. /// @}
  502. /////////////////////////////////////////////////////////////////////////////////
  503. //
  504. // (六)美颜滤镜相关接口函数
  505. //
  506. /////////////////////////////////////////////////////////////////////////////////
  507. #pragma mark - 美颜滤镜相关接口函数
  508. /// @name 美颜滤镜相关接口函数
  509. /// @{
  510. /**
  511. * 6.1 设置美颜、美白、红润效果级别
  512. *
  513. * SDK 内部集成了两套风格不同的磨皮算法,一套我们取名叫“光滑”,适用于美女秀场,效果比较明显。
  514. * 另一套我们取名“自然”,磨皮算法更多地保留了面部细节,主观感受上会更加自然。
  515. *
  516. * @param beautyStyle 美颜风格,光滑或者自然,光滑风格磨皮更加明显,适合娱乐场景。
  517. * @param beautyLevel 美颜级别,取值范围0 - 9; 0表示关闭,1 - 9值越大,效果越明显。
  518. * @param whitenessLevel 美白级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  519. * @param ruddinessLevel 红润级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  520. */
  521. - (void)setBeautyStyle:(TRTCBeautyStyle)beautyStyle beautyLevel:(NSInteger)beautyLevel
  522. whitenessLevel:(NSInteger)whitenessLevel ruddinessLevel:(NSInteger)ruddinessLevel;
  523. /**
  524. * 6.2 设置指定素材滤镜特效
  525. *
  526. * @param image 指定素材,即颜色查找表图片。**必须使用 png 格式**
  527. */
  528. - (void)setFilter:(TXImage *)image;
  529. /**
  530. * 6.3 设置滤镜浓度
  531. *
  532. * 在美女秀场等应用场景里,滤镜浓度的要求会比较高,以便更加突显主播的差异。
  533. * 我们默认的滤镜浓度是0.5,如果您觉得滤镜效果不明显,可以使用下面的接口进行调节。
  534. *
  535. * @param concentration 从0到1,越大滤镜效果越明显,默认值为0.5。
  536. */
  537. - (void)setFilterConcentration:(float)concentration;
  538. /**
  539. * 6.4 添加水印
  540. *
  541. * 水印的位置是通过 rect 来指定的,rect 的格式为 (x,y,width,height)
  542. * - x:水印的坐标,取值范围为0 - 1的浮点数。
  543. * - y:水印的坐标,取值范围为0 - 1的浮点数。
  544. * - width:水印的宽度,取值范围为0 - 1的浮点数。
  545. * - height:是不用设置的,SDK 内部会根据水印图片的宽高比自动计算一个合适的高度。
  546. *
  547. * 举例:如果当前编码分辨率是540 × 960,rect 设置为(0.1,0.1,0.2,0.0)
  548. * 那么:水印的左上坐标点就是 (540 × 0.1,960 × 0.1),也就是 (54,96),水印的宽度是 540 × 0.2 = 108px,高度自动计算。
  549. *
  550. * @param image 水印图片,**必须使用透明底的 png 格式**
  551. * @param streamType 如果要给屏幕分享的一路也设置水印,需要调用两次的 setWatermark。
  552. * @param rect 水印相对于编码分辨率的归一化坐标,x,y,width,height 取值范围0 - 1。
  553. */
  554. - (void)setWatermark:(TXImage*)image streamType:(TRTCVideoStreamType)streamType rect:(CGRect)rect;
  555. #if TARGET_OS_IPHONE
  556. /**
  557. * 6.5 设置大眼级别(商用企业版有效,其它版本设置此参数无效)
  558. *
  559. * @param eyeScaleLevel 大眼级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  560. */
  561. - (void)setEyeScaleLevel:(float)eyeScaleLevel;
  562. /**
  563. * 6.6 设置瘦脸级别(商用企业版有效,其它版本设置此参数无效)
  564. *
  565. * @param faceScaleLevel 瘦脸级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  566. */
  567. - (void)setFaceScaleLevel:(float)faceScaleLevel;
  568. /**
  569. * 6.7 设置V脸级别(商用企业版有效,其它版本设置此参数无效)
  570. *
  571. * @param faceVLevel V脸级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  572. */
  573. - (void)setFaceVLevel:(float)faceVLevel;
  574. /**
  575. * 6.8 设置下巴拉伸或收缩(商用企业版有效,其它版本设置此参数无效)
  576. *
  577. * @param chinLevel 下巴拉伸或收缩级别,取值范围 -9 - 9;0 表示关闭,小于0表示收缩,大于0表示拉伸。
  578. */
  579. - (void)setChinLevel:(float)chinLevel;
  580. /**
  581. * 6.9 设置短脸级别(商用企业版有效,其它版本设置此参数无效)
  582. *
  583. * @param faceShortlevel 短脸级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  584. */
  585. - (void)setFaceShortLevel:(float)faceShortlevel;
  586. /**
  587. * 6.10 设置瘦鼻级别(商用企业版有效,其它版本设置此参数无效)
  588. *
  589. * @param noseSlimLevel 瘦鼻级别,取值范围0 - 9;0表示关闭,1 - 9值越大,效果越明显。
  590. */
  591. - (void)setNoseSlimLevel:(float)noseSlimLevel;
  592. /**
  593. * 6.11 设置绿幕背景视频(商用企业版有效,其它版本设置此参数无效)
  594. *
  595. * 此处的绿幕功能并非智能抠背,它需要被拍摄者的背后有一块绿色的幕布来辅助产生特效
  596. *
  597. * @param file 视频文件路径。支持 MP4; nil 表示关闭特效。
  598. */
  599. - (void)setGreenScreenFile:(NSURL *)file;
  600. /**
  601. * 6.12 选择使用哪一款 AI 动效挂件(商用企业版有效,其它版本设置此参数无效)
  602. *
  603. * @param tmplPath 动效文件路径
  604. */
  605. - (void)selectMotionTmpl:(NSString *)tmplPath;
  606. /**
  607. * 6.12 设置动效静音(商用企业版有效,其它版本设置此参数无效)
  608. *
  609. * 有些挂件本身会有声音特效,通过此 API 可以关闭这些特效播放时所带的声音效果。
  610. *
  611. * @param motionMute YES:静音;NO:不静音。
  612. */
  613. - (void)setMotionMute:(BOOL)motionMute;
  614. #endif
  615. /// @}
  616. /////////////////////////////////////////////////////////////////////////////////
  617. //
  618. // (七)屏幕共享(辅流)相关函数(MAC)
  619. //
  620. /////////////////////////////////////////////////////////////////////////////////
  621. #pragma mark - 屏幕共享接口函数(MAC)
  622. /// @name 辅流相关接口函数(MAC)
  623. /// @{
  624. /**
  625. * 7.1 开始显示远端用户的屏幕分享画面
  626. *
  627. * 对应于 startRemoteView() 用于显示主画面,该接口只能用于显示辅路(屏幕分享、远程播片)画面。
  628. *
  629. * @param userId 对方的用户标识
  630. * @param view 渲染控件
  631. * @note 请在 onUserSubStreamAvailable 回调后再调用这个接口。
  632. */
  633. - (void)startRemoteSubStreamView:(NSString *)userId view:(TXView *)view;
  634. /**
  635. * 7.2 停止显示远端用户的屏幕分享画面。
  636. *
  637. * @param userId 对方的用户标识
  638. */
  639. - (void)stopRemoteSubStreamView:(NSString *)userId;
  640. /**
  641. * 7.3 设置屏幕分享画面的显示模式
  642. *
  643. * 对应于 setRemoteViewFillMode() 于设置主画面的显示模式,该接口用于设置远端的辅路(屏幕分享、远程播片)画面。
  644. *
  645. * @param userId 用户的 ID
  646. * @param mode 填充(画面可能会被拉伸裁剪)或适应(画面可能会有黑边)
  647. */
  648. - (void)setRemoteSubStreamViewFillMode:(NSString *)userId mode:(TRTCVideoFillMode)mode;
  649. #if !TARGET_OS_IPHONE && TARGET_OS_MAC
  650. /**
  651. * 7.4 枚举可分享的屏幕窗口
  652. *
  653. * 如果您要给您的 App 增加屏幕分享功能,一般需要先显示一个窗口选择界面,这样用户可以选择希望分享的窗口。
  654. * 通过如下函数,您可以获得可分享窗口的 ID、类型、窗口名称以及缩略图。
  655. * 拿到这些信息后,您就可以实现一个窗口选择界面,当然,您也可以使用我们在 Demo 源码中已经实现好的一个界面。
  656. *
  657. * @note 返回的列表中包括屏幕和应用窗口,屏幕会在列表的前面几个元素中。
  658. *
  659. * @param thumbnailSize 指定要获取的窗口缩略图大小,缩略图可用于绘制在窗口选择界面上
  660. * @param iconSize 指定要获取的窗口图标大小
  661. * @return 窗口列表包括屏幕
  662. */
  663. - (NSArray<TRTCScreenCaptureSourceInfo*>*)getScreenCaptureSourcesWithThumbnailSize:(CGSize)thumbnailSize iconSize:(CGSize)iconSize;
  664. /**
  665. * 7.5 设置屏幕共享参数,该方法在屏幕共享过程中也可以调用
  666. *
  667. * 如果您期望在屏幕分享的过程中,切换想要分享的窗口,可以再次调用这个函数而不需要重新开启屏幕分享。
  668. *
  669. * @param screenSource 指定分享源
  670. * @param rect 指定捕获的区域(传 CGRectZero 则默认分享全屏)
  671. * @param capturesCursor 是否捕获鼠标光标
  672. * @param highlight 是否高亮正在分享的窗口
  673. *
  674. */
  675. - (void)selectScreenCaptureTarget:(TRTCScreenCaptureSourceInfo *)screenSource
  676. rect:(CGRect)rect
  677. capturesCursor:(BOOL)capturesCursor
  678. highlight:(BOOL)highlight;
  679. /**
  680. * 7.6 启动屏幕分享
  681. *
  682. * @param view 渲染控件所在的父控件
  683. */
  684. - (void)startScreenCapture:(NSView *)view;
  685. /**
  686. * 7.7 停止屏幕采集
  687. *
  688. * @return 0:成功;<0:失败
  689. */
  690. - (int)stopScreenCapture;
  691. /**
  692. * 7.8 暂停屏幕分享
  693. *
  694. * @return 0:成功;<0:失败
  695. */
  696. - (int)pauseScreenCapture;
  697. /**
  698. * 7.9 恢复屏幕分享
  699. *
  700. * @return 0:成功;<0:失败
  701. */
  702. - (int)resumeScreenCapture;
  703. /**
  704. * 7.10 设置屏幕分享的编码器参数
  705. *
  706. * 对应于 setVideoEncoderParam() 设置主画面的编码参数,该函数仅用于设置辅路(屏幕分享、远程播片)的编码参数。
  707. * 该设置决定了远端用户看到的画面质量,同时也是云端录制出的视频文件的画面质量。
  708. *
  709. * @param param 辅流编码参数,详情请参考 TRTCCloudDef.h 中的 TRTCVideoEncParam 定义
  710. */
  711. - (void)setSubStreamEncoderParam:(TRTCVideoEncParam *)param;
  712. /**
  713. * 7.11 设置屏幕分享的混音音量大小
  714. *
  715. * 这个数值越高,辅路音量的占比就约高,麦克风音量占比就越小,所以不推荐设置得太大,否则麦克风的声音就被压制了。
  716. *
  717. * @param volume 设置的音量大小,范围0 - 100
  718. */
  719. - (void)setSubStreamMixVolume:(NSInteger)volume;
  720. #endif
  721. /// @}
  722. /////////////////////////////////////////////////////////////////////////////////
  723. //
  724. // (八)自定义采集和渲染
  725. //
  726. /////////////////////////////////////////////////////////////////////////////////
  727. #pragma mark - 自定义采集和渲染
  728. /// @name 自定义采集和渲染
  729. /// @{
  730. /**
  731. * 8.1 启用视频自定义采集模式
  732. *
  733. * 开启该模式后,SDK 不在运行原有的视频采集流程,只保留编码和发送能力。
  734. * 您需要用 sendCustomVideoData() 不断地向 SDK 塞入自己采集的视频画面。
  735. *
  736. * @param enable 是否启用
  737. */
  738. - (void)enableCustomVideoCapture:(BOOL)enable;
  739. /**
  740. * 8.2 向 SDK 投送自己采集的视频数据
  741. *
  742. * TRTCVideoFrame 推荐如下填写方式(其他字段不需要填写):
  743. * - pixelFormat:推荐选择 TRTCVideoPixelFormat_NV12。
  744. * - bufferType:推荐选择 TRTCVideoBufferType_PixelBuffer。
  745. * - pixelBuffer:iOS 平台上常用的视频数据格式。
  746. * - data:视频裸数据格式,bufferType 为 NSData 时使用。
  747. * - timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。
  748. * - width:视频图像长度,bufferType 为 NSData 时填写。
  749. * - height:视频图像宽度,bufferType 为 NSData 时填写。
  750. *
  751. * 参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。
  752. *
  753. * @param frame 视频数据,支持 PixelBuffer NV12,BGRA,I420 格式数据。
  754. * @note - SDK 内部有帧率控制逻辑,目标帧率以您在 setVideoEncoderParam 中设置的为准,太快会自动丢帧,太慢则会自动补帧。
  755. * @note - 可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomVideoData 的调用间隔,否则会导致视频帧率不稳定。
  756. *
  757. */
  758. - (void)sendCustomVideoData:(TRTCVideoFrame *)frame;
  759. /**
  760. * 8.3 设置本地视频的自定义渲染回调
  761. *
  762. * 设置此方法后,SDK 内部会跳过自己原来的渲染流程,并把采集到的数据回调出来,您需要自己完成画面的渲染。
  763. * - pixelFormat 指定回调的数据格式,比如 NV12、i420 以及 32BGRA。
  764. * - bufferType 指定 buffer 的类型,直接使用 PixelBuffer 效率最高;使用 NSData 相当于让 SDK 在内部做了一次内存转换,因此会有额外的性能损耗。
  765. *
  766. * @param delegate 自定义渲染回调
  767. * @param pixelFormat 指定回调的像素格式
  768. * @param bufferType PixelBuffer:可以直接使用 imageWithCVImageBuffer 转成 UIImage;NSData:经过内存整理的视频数据。
  769. * @return 0:成功;<0:错误
  770. */
  771. - (int)setLocalVideoRenderDelegate:(id<TRTCVideoRenderDelegate>)delegate pixelFormat:(TRTCVideoPixelFormat)pixelFormat bufferType:(TRTCVideoBufferType)bufferType;
  772. /**
  773. * 8.4 设置远端视频的自定义渲染回调
  774. *
  775. * 此方法同 setLocalVideoRenderDelegate,区别在于一个是本地画面的渲染回调, 一个是远程画面的渲染回调。
  776. *
  777. * @note 调用此函数之前,需要先调用 startRemoteView 来获取远端用户的视频流(view 设置为 nil 即可),否则不会有数据回调出来。
  778. *
  779. * @param userId 指定目标 userId。
  780. * @param delegate 自定义渲染的回调。
  781. * @param pixelFormat 指定回调的像素格式。
  782. * @param bufferType PixelBuffer:可以直接使用 imageWithCVImageBuffer 转成 UIImage;NSData:经过内存整理的视频数据。
  783. * @return 0:成功;<0:错误
  784. */
  785. - (int)setRemoteVideoRenderDelegate:(NSString*)userId delegate:(id<TRTCVideoRenderDelegate>)delegate pixelFormat:(TRTCVideoPixelFormat)pixelFormat bufferType:(TRTCVideoBufferType)bufferType;
  786. #if TARGET_OS_IPHONE
  787. /**
  788. * 8.5 启用音频自定义采集模式
  789. *
  790. * 开启该模式后,SDK 不在运行原有的音频采集流程,只保留编码和发送能力。
  791. * 您需要用 sendCustomAudioData() 不断地向 SDK 塞入自己采集的视频画面。
  792. *
  793. * @note 由于回声抵消(AEC)需要严格的控制声音采集和播放的时间,所以开启自定义音频采集后,AEC 能力可能会失效。
  794. *
  795. * @param enable 是否启用, true:启用;false:关闭
  796. */
  797. - (void)enableCustomAudioCapture:(BOOL)enable;
  798. /**
  799. * 8.6 向 SDK 投送自己采集的音频数据
  800. *
  801. * TRTCAudioFrame 推荐如下填写方式:
  802. *
  803. * - data:音频帧 buffer。音频帧数据必须是 PCM 格式,推荐每帧20ms采样数。【48000采样率、单声道的帧长度:48000 × 0.02s × 1 × 16bit = 15360bit = 1920字节】。
  804. * - sampleRate:采样率,仅支持48000。
  805. * - channel:频道数量(如果是立体声,数据是交叉的),单声道:1; 双声道:2。
  806. * - timestamp:如果 timestamp 间隔不均匀,会严重影响音画同步和录制出的 MP4 质量。
  807. *
  808. * 参考文档:[自定义采集和渲染](https://cloud.tencent.com/document/product/647/34066)。
  809. *
  810. * @param frame 音频数据
  811. * @note 可以设置 frame 中的 timestamp 为 0,相当于让 SDK 自己设置时间戳,但请“均匀”地控制 sendCustomAudioData 的调用间隔,否则会导致声音断断续续。
  812. */
  813. - (void)sendCustomAudioData:(TRTCAudioFrame *)frame;
  814. /**
  815. * 8.7 设置音频数据回调
  816. *
  817. * 设置此方法,SDK 内部会把音频数据(PCM 格式)回调出来,包括:
  818. * - onCapturedAudioFrame:本机麦克风采集到的音频数据
  819. * - onPlayAudioFrame:混音前的每一路远程用户的音频数据
  820. * - onMixedPlayAudioFrame:各路音频数据混合后送入扬声器播放的音频数据
  821. *
  822. * @param delegate 音频数据回调,delegate = nil 则停止回调数据
  823. */
  824. - (void)setAudioFrameDelegate:(id<TRTCAudioFrameDelegate>)delegate;
  825. #endif
  826. /// @}
  827. /////////////////////////////////////////////////////////////////////////////////
  828. //
  829. // (九)自定义消息发送
  830. //
  831. /////////////////////////////////////////////////////////////////////////////////
  832. #pragma mark - 自定义消息发送
  833. /// @name 自定义消息发送
  834. /// @{
  835. /**
  836. * 9.1 发送自定义消息给房间内所有用户
  837. *
  838. * 该接口可以借助音视频数据通道向当前房间里的其他用户广播您自定义的数据,但因为复用了音视频数据通道,
  839. * 请务必严格控制自定义消息的发送频率和消息体的大小,否则会影响音视频数据的质量控制逻辑,造成不确定性的问题。
  840. *
  841. * @param cmdID 消息 ID,取值范围为1 - 10
  842. * @param data 待发送的消息,最大支持1KB(1000字节)的数据大小
  843. * @param reliable 是否可靠发送,可靠发送的代价是会引入一定的延时,因为接收端要暂存一段时间的数据来等待重传
  844. * @param ordered 是否要求有序,即是否要求接收端接收的数据顺序和发送端发送的顺序一致,这会带来一定的接收延时,因为在接收端需要暂存并排序这些消息。
  845. * @return YES:消息已经发出;NO:消息发送失败。
  846. *
  847. * @note 本接口有以下限制:
  848. * - 发送消息到房间内所有用户,每秒最多能发送30条消息。
  849. * - 每个包最大为1KB,超过则很有可能会被中间路由器或者服务器丢弃。
  850. * - 每个客户端每秒最多能发送总计8KB数据。
  851. * - 将 reliable 和 ordered 同时设置为 YES 或 NO,暂不支持交叉设置。
  852. * - 强烈建议不同类型的消息使用不同的 cmdID,这样可以在要求有序的情况下减小消息时延。
  853. */
  854. - (BOOL)sendCustomCmdMsg:(NSInteger)cmdID data:(NSData *)data reliable:(BOOL)reliable ordered:(BOOL)ordered;
  855. /**
  856. * 9.2 将小数据量的自定义数据嵌入视频帧中
  857. *
  858. * 跟 sendCustomCmdMsg 的原理不同,sendSEIMsg 是将数据直接塞入视频数据头中。因此,即使视频帧被旁路到了直播 CDN 上,
  859. * 这些数据也会一直存在。但是由于要把数据嵌入视频帧中,所以数据本身不能太大,推荐几个字节就好。
  860. *
  861. * 最常见的用法是把自定义的时间戳(timstamp)用 sendSEIMsg 嵌入视频帧中,这种方案的最大好处就是可以实现消息和画面的完美对齐。
  862. *
  863. * @param data 待发送的数据,最大支持1kb(1000字节)的数据大小
  864. * @param repeatCount 发送数据次数
  865. * @return YES:消息已通过限制,等待后续视频帧发送;NO:消息被限制发送
  866. *
  867. * @note 本接口有以下限制:
  868. * - 数据在接口调用完后不会被即时发送出去,而是从下一帧视频帧开始带在视频帧中发送。
  869. * - 发送消息到房间内所有用户,每秒最多能发送30条消息(与 sendCustomCmdMsg 共享限制)。
  870. * - 每个包最大为1KB,若发送大量数据,会导致视频码率增大,可能导致视频画质下降甚至卡顿(与 sendCustomCmdMsg 共享限制)。
  871. * - 每个客户端每秒最多能发送总计8KB数据(与 sendCustomCmdMsg 共享限制)。
  872. * - 若指定多次发送(repeatCount>1),则数据会被带在后续的连续 repeatCount 个视频帧中发送出去,同样会导致视频码率增大。
  873. * - 如果 repeatCount>1,多次发送,接收消息 onRecvSEIMsg 回调也可能会收到多次相同的消息,需要去重。
  874. */
  875. - (BOOL)sendSEIMsg:(NSData *)data repeatCount:(int)repeatCount;
  876. /// @}
  877. /////////////////////////////////////////////////////////////////////////////////
  878. //
  879. // (十)背景混音相关接口函数
  880. //
  881. /////////////////////////////////////////////////////////////////////////////////
  882. #pragma mark - 背景混音相关接口函数
  883. /// @name 背景混音相关接口函数
  884. /// @{
  885. /**
  886. * 10.1 启动播放背景音乐
  887. *
  888. * @param path 音乐文件路径
  889. * @param beginNotify 音乐播放开始的回调通知
  890. * @param progressNotify 音乐播放的进度通知,单位毫秒
  891. * @param completeNotify 音乐播放结束的回调通知
  892. */
  893. - (void) playBGM:(NSString *)path
  894. withBeginNotify:(void (^)(NSInteger errCode))beginNotify
  895. withProgressNotify:(void (^)(NSInteger progressMS, NSInteger durationMS))progressNotify
  896. andCompleteNotify:(void (^)(NSInteger errCode))completeNotify;
  897. /**
  898. * 10.2 停止播放背景音乐
  899. */
  900. - (void)stopBGM;
  901. /**
  902. * 10.3 暂停播放背景音乐
  903. */
  904. - (void)pauseBGM;
  905. /**
  906. * 10.4 继续播放背景音乐
  907. */
  908. - (void)resumeBGM;
  909. /**
  910. * 10.5 获取音乐文件总时长,单位毫秒
  911. *
  912. * @param path 音乐文件路径,如果 path 为空,那么返回当前正在播放的 music 时长。
  913. * @return 成功返回时长,失败返回-1
  914. */
  915. - (NSInteger)getBGMDuration:(NSString *)path;
  916. /**
  917. * 10.6 设置 BGM 播放进度
  918. *
  919. * @param pos 单位毫秒
  920. * @return 0:成功;-1:失败
  921. */
  922. - (int)setBGMPosition:(NSInteger)pos;
  923. /**
  924. * 10.7 设置麦克风的音量大小,播放背景音乐混音时使用,用来控制麦克风音量大小。
  925. *
  926. * @param volume 音量大小,100为正常音量,取值范围为0 - 200。
  927. */
  928. - (void)setMicVolumeOnMixing:(NSInteger)volume;
  929. /**
  930. * 10.8 设置背景音乐的音量大小,播放背景音乐混音时使用,用来控制背景音音量大小。
  931. *
  932. * @param volume 音量大小,100为正常音量,取值范围为0 - 200,如果需要调大背景音量可以设置更大的值。
  933. */
  934. - (void)setBGMVolume:(NSInteger)volume;
  935. /**
  936. * 10.9 设置混响效果 (目前仅支持 iOS)
  937. *
  938. * @param reverbType 混响类型,详见 TXReverbType
  939. */
  940. - (void)setReverbType:(TRTCReverbType)reverbType;
  941. /**
  942. * 10.10 设置变声类型 (目前仅支持 iOS)
  943. *
  944. * @param voiceChangerType 变声类型,详见 TXVoiceChangerType
  945. */
  946. - (void)setVoiceChangerType:(TRTCVoiceChangerType)voiceChangerType;
  947. /// @}
  948. /////////////////////////////////////////////////////////////////////////////////
  949. //
  950. // (十一)设备和网络测试
  951. //
  952. /////////////////////////////////////////////////////////////////////////////////
  953. #pragma mark - 设备和网络测试
  954. /// @name 设备和网络测试
  955. /// @{
  956. /**
  957. * 11.1 开始进行网络测速(视频通话期间请勿测试,以免影响通话质量)
  958. *
  959. * 测速结果将会用于优化 SDK 接下来的服务器选择策略,因此推荐您在用户首次通话前先进行一次测速,这将有助于我们选择最佳的服务器。
  960. * 同时,如果测试结果非常不理想,您可以通过醒目的 UI 提示用户选择更好的网络。
  961. *
  962. * @note 测速本身会消耗一定的流量,所以也会产生少量额外的流量费用。
  963. *
  964. * @param sdkAppId 应用标识
  965. * @param userId 用户标识
  966. * @param userSig 用户签名
  967. * @param completion 测试回调,会分多次回调
  968. */
  969. - (void)startSpeedTest:(uint32_t)sdkAppId userId:(NSString *)userId userSig:(NSString *)userSig completion:(void(^)(TRTCSpeedTestResult* result, NSInteger completedCount, NSInteger totalCount))completion;
  970. /**
  971. * 11.2 停止服务器测速
  972. */
  973. - (void)stopSpeedTest;
  974. #if TARGET_OS_OSX
  975. /**
  976. * 11.3 开始进行摄像头测试
  977. *
  978. * @note 在测试过程中可以使用 setCurrentCameraDevice 接口切换摄像头。
  979. * @param view 预览控件所在的父控件
  980. */
  981. - (void)startCameraDeviceTestInView:(NSView *)view;
  982. /**
  983. * 11.4 结束视频测试预览
  984. */
  985. - (void)stopCameraDeviceTest;
  986. /**
  987. * 11.5 开始进行麦克风测试
  988. *
  989. * 该方法测试麦克风是否能正常工作,volume 的取值范围为0 - 100。
  990. */
  991. - (void)startMicDeviceTest:(NSInteger)interval testEcho:(void (^)(NSInteger volume))testEcho;
  992. /**
  993. * 11.6 停止麦克风测试
  994. */
  995. - (void)stopMicDeviceTest;
  996. /**
  997. * 11.7 开始扬声器测试
  998. *
  999. * 该方法播放指定的音频文件测试播放设备是否能正常工作。如果能听到声音,说明播放设备能正常工作。
  1000. */
  1001. - (void)startSpeakerDeviceTest:(NSString*)audioFilePath onVolumeChanged:(void (^)(NSInteger volume, BOOL isLastFrame))volumeBlock;
  1002. /**
  1003. * 11.8 停止扬声器测试
  1004. */
  1005. - (void)stopSpeakerDeviceTest;
  1006. #endif
  1007. /// @}
  1008. /////////////////////////////////////////////////////////////////////////////////
  1009. //
  1010. // (十二)混流转码以及 CDN 旁路推流
  1011. //
  1012. /////////////////////////////////////////////////////////////////////////////////
  1013. #pragma mark - 混流转码以及 CDN 旁路推流
  1014. /// @name 混流转码以及 CDN 旁路推流
  1015. /// @{
  1016. /**
  1017. * 12.1 设置云端的混流转码参数
  1018. *
  1019. * 该接口会向腾讯云的转码服务器发送一条指令,目的是将房间里的多路画面叠加到一路画面上。
  1020. *
  1021. * 如果您在实时音视频 [控制台](https://console.cloud.tencent.com/rav/) 中的功能配置页开启了“启动自动旁路直播”功能,
  1022. * 房间里的每一路画面都会有一个对应的直播 [CDN 地址](https://cloud.tencent.com/document/product/647/16826),
  1023. * 此时您可以通过云端混流,将多路直播地址的画面混合成一路,这样直播 CDN 上就可以看到混合后的画面。
  1024. *
  1025. * 您可以通过转码参数来调整每一路画面的位置以及最终输出的画面质量。
  1026. *
  1027. * 参考文档:[云端混流转码](https://cloud.tencent.com/document/product/647/16827)。
  1028. * 示例代码:我们在 Demo 中增加了该功能的体验入口,您可以在“更多功能”面板中看到“云端画面混合”和“分享播放地址”体验到该功能。
  1029. *
  1030. * <pre>
  1031. * 【画面1】=> 解码 => =>
  1032. * \
  1033. * 【画面2】=> 解码 => 画面混合 => 编码 => 【混合后的画面】
  1034. * /
  1035. * 【画面3】=> 解码 => =>
  1036. * </pre>
  1037. *
  1038. * @param config 请参考 TRTCCloudDef.h 中关于 TRTCTranscodingConfig 的介绍。如果传入 nil 则取消云端混流转码。
  1039. * @note 关于云端混流的注意事项:
  1040. * - 云端转码会引入一定的 CDN 观看延时,大概会增加1 - 2秒。
  1041. * - 调用该函数的用户,会将多路画面混合到自己这一路的 [CDN 地址](https://cloud.tencent.com/document/product/647/16826) 上。
  1042. */
  1043. - (void)setMixTranscodingConfig:(TRTCTranscodingConfig*)config;
  1044. /**
  1045. * 12.2 旁路转推到指定的推流地址
  1046. *
  1047. * 该接口会向腾讯云的转推服务器发送一条指令,腾讯云会将当前一路的音视频画面转推到您指定的 rtmp 推流地址上。
  1048. *
  1049. * 在实时音视频 [控制台](https://console.cloud.tencent.com/rav/) 中的功能配置页开启了“启动自动旁路直播”功能后,
  1050. * 房间里的每一路画面都有一路默认的腾讯云 CDN 地址,所以该功能并不常用,仅在您需要适配多家 CDN 服务商时才需要关注该功能。
  1051. *
  1052. * 由于仅转推单独的一路画面到直播 CDN 并没有什么太大的意义,所以该方案通常是跟云端转码混合使用的。
  1053. * 也就是先通过 setMixTranscodingConfig 将房间里的多路画面混合到一路上,再转推出去。
  1054. *
  1055. * @param param 请参考 TRTCCloudDef.h 中关于 TRTCPublishCDNParam 的介绍。
  1056. * @note 关于旁路转推的注意事项:
  1057. * - 默认只支持转推到腾讯云的 rtmp [推流地址](https://cloud.tencent.com/document/product/267/32720) 上,转推其他云的需求请通过工单联系我们。
  1058. * - 调用该函数的用户,只会转推自己这一路画面到指定的 rtmp 推流地址上,因此一般需要配合 setMixTranscodingConfig 一起使用。
  1059. * - TRTC 房间里的每一路画面都有一路默认的腾讯云 CDN 地址(需要开启),所以该功能并不常用,仅在您需要适配多家 CDN 服务商时才需要关注该功能。
  1060. */
  1061. - (void) startPublishCDNStream:(TRTCPublishCDNParam*)param;
  1062. /**
  1063. * 12.3 停止旁路推流
  1064. */
  1065. - (void) stopPublishCDNStream;
  1066. /// @}
  1067. /////////////////////////////////////////////////////////////////////////////////
  1068. //
  1069. // (十三)Log 相关接口函数
  1070. //
  1071. /////////////////////////////////////////////////////////////////////////////////
  1072. /// @name Log 相关接口函数
  1073. /// @{
  1074. #pragma mark - LOG 相关接口函数
  1075. /**
  1076. * 13.1 获取 SDK 版本信息
  1077. */
  1078. + (NSString *)getSDKVersion;
  1079. /**
  1080. * 13.2 设置 Log 输出级别
  1081. *
  1082. * @param level 参见 TRTCLogLevel
  1083. */
  1084. + (void)setLogLevel:(TRTCLogLevel)level;
  1085. /**
  1086. * 13.3 启用或禁用控制台日志打印
  1087. *
  1088. * @param enabled 指定是否启用
  1089. */
  1090. + (void)setConsoleEnabled:(BOOL)enabled;
  1091. /**
  1092. * 13.4 启用或禁用 Log 的本地压缩。
  1093. *
  1094. * 开启压缩后,Log 存储体积明显减小,但需要腾讯云提供的 Python 脚本解压后才能阅读。
  1095. * 禁用压缩后,Log 采用明文存储,可以直接用记事本打开阅读,但占用空间较大。
  1096. *
  1097. * @param enabled 指定是否启用
  1098. */
  1099. + (void)setLogCompressEnabled:(BOOL)enabled;
  1100. /**
  1101. * 13.5 修改日志保存路径
  1102. *
  1103. * @note 日志文件默认保存在 sandbox Documents/log 下,如需修改,必须在所有方法前调用。
  1104. * @param path 存储日志路径
  1105. */
  1106. + (void)setLogDirPath:(NSString *)path;
  1107. /**
  1108. * 13.6 设置日志回调
  1109. */
  1110. + (void)setLogDelegate:(id<TRTCLogDelegate>)logDelegate;
  1111. /**
  1112. * 13.7 显示仪表盘
  1113. *
  1114. * 仪表盘是状态统计和事件消息浮层 view,方便调试。
  1115. * @param showType 0:不显示;1:显示精简版;2:显示全量版
  1116. */
  1117. - (void)showDebugView:(NSInteger)showType;
  1118. /**
  1119. * 13.8 设置仪表盘的边距
  1120. *
  1121. * 必须在 showDebugView 调用前设置才会生效
  1122. * @param userId 用户 ID
  1123. * @param margin 仪表盘内边距,注意这里是基于 parentView 的百分比,margin 的取值范围是0 - 1
  1124. */
  1125. - (void)setDebugViewMargin:(NSString *)userId margin:(TXEdgeInsets)margin;
  1126. /**
  1127. * 13.9 调用实验性 API 接口
  1128. *
  1129. * @note 该接口用于调用一些实验性功能
  1130. * @param jsonStr 接口及参数描述的 JSON 字符串
  1131. */
  1132. - (void)callExperimentalAPI:(NSString*)jsonStr;
  1133. /// @}
  1134. @end