NIMNetCallManagerProtocol.h 24 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998
  1. //
  2. // NIMNetCallManagerProtocol.h
  3. // NIMLib
  4. //
  5. // Created by Netease.
  6. // Copyright (c) 2015 Netease. All rights reserved.
  7. //
  8. #import <CoreMedia/CMSampleBuffer.h>
  9. #import <NIMSDK/NIMPlatform.h>
  10. #import "NIMAVChatDefs.h"
  11. NS_ASSUME_NONNULL_BEGIN
  12. @class NIMNetCallOption;
  13. @class NIMNetCallMeeting;
  14. @class NIMNetCallRecordingInfo;
  15. @class NIMNetCallUserInfo;
  16. @class NIMNetCallAudioFileMixTask;
  17. @class NIMNetCallVideoCaptureParam;
  18. /**
  19. * 发起通话Block
  20. *
  21. * @param error 发起通话结果, 如果成功error为nil
  22. * @param callID 发起通话的call id, 如果发起失败则为0
  23. */
  24. typedef void(^NIMNetCallStartHandler)(NSError * __nullable error, UInt64 callID);
  25. /**
  26. * 响应通话请求Block
  27. *
  28. * @param error 响应通话请求结果, 如果成功error为nil
  29. * @param callID 响应通话的call id
  30. */
  31. typedef void(^NIMNetCallResponseHandler)(NSError * __nullable error, UInt64 callID);
  32. /**
  33. * 预订或者加入多人会议请求Handler
  34. *
  35. * @param meeting 预订或者加入的多人会议
  36. * @param error 预订或者加入多人会议请求结果, 如果成功 error 为 nil
  37. */
  38. typedef void(^NIMNetCallMeetingHandler)(NIMNetCallMeeting *meeting, NSError * __nullable error);
  39. /**
  40. * 网络通话状态
  41. */
  42. typedef NS_ENUM(NSInteger, NIMNetCallStatus){
  43. /**
  44. * 已连接
  45. */
  46. NIMNetCallStatusConnect,
  47. /**
  48. * 已断开
  49. */
  50. NIMNetCallStatusDisconnect,
  51. };
  52. /**
  53. * 网络通话控制类型
  54. */
  55. typedef NS_ENUM(NSInteger, NIMNetCallControlType){
  56. /**
  57. * 开启了音频
  58. */
  59. NIMNetCallControlTypeOpenAudio = 1,
  60. /**
  61. * 关闭了音频
  62. */
  63. NIMNetCallControlTypeCloseAudio = 2,
  64. /**
  65. * 开启了视频
  66. */
  67. NIMNetCallControlTypeOpenVideo = 3,
  68. /**
  69. * 关闭了视频
  70. */
  71. NIMNetCallControlTypeCloseVideo = 4,
  72. /**
  73. * 切换到视频模式
  74. */
  75. NIMNetCallControlTypeToVideo = 5,
  76. /**
  77. * 同意切换到视频模式,用于切到视频模式需要对方同意的场景
  78. */
  79. NIMNetCallControlTypeAgreeToVideo = 6,
  80. /**
  81. * 拒绝切换到视频模式,用于切到视频模式需要对方同意的场景
  82. */
  83. NIMNetCallControlTypeRejectToVideo = 7,
  84. /**
  85. * 切换到音频模式
  86. */
  87. NIMNetCallControlTypeToAudio = 8,
  88. /**
  89. * 占线
  90. */
  91. NIMNetCallControlTypeBusyLine = 9,
  92. /**
  93. * 没有可用摄像头
  94. */
  95. NIMNetCallControlTypeNoCamera = 10,
  96. /**
  97. * 应用切换到了后台
  98. */
  99. NIMNetCallControlTypeBackground = 11,
  100. /**
  101. * 收到呼叫请求的反馈,通常用于被叫告诉主叫可以播放回铃音了
  102. */
  103. NIMNetCallControlTypeFeedabck = 12,
  104. /**
  105. * 开始录制
  106. */
  107. NIMNetCallControlTypeStartRecord = 13,
  108. /**
  109. * 结束录制
  110. */
  111. NIMNetCallControlTypeStopRecord = 14,
  112. };
  113. /**
  114. * 视频通话使用的摄像头
  115. */
  116. typedef NS_ENUM(NSInteger, NIMNetCallCamera){
  117. /**
  118. * 前置摄像头
  119. */
  120. NIMNetCallCameraFront,
  121. /**
  122. * 后置摄像头
  123. */
  124. NIMNetCallCameraBack,
  125. };
  126. /**
  127. * 音视频聊天相关回调
  128. */
  129. @protocol NIMNetCallManagerDelegate <NSObject>
  130. @optional
  131. /**
  132. * 被叫收到呼叫(振铃)
  133. *
  134. * @param callID call id
  135. * @param caller 主叫帐号
  136. * @param type 呼叫类型
  137. * @param extendMessage 扩展消息, 透传主叫发起通话时携带的该信息
  138. */
  139. - (void)onReceive:(UInt64)callID
  140. from:(NSString *)caller
  141. type:(NIMNetCallMediaType)type
  142. message:(nullable NSString *)extendMessage;
  143. /**
  144. * 主叫收到被叫响应
  145. *
  146. * @param callID call id
  147. * @param callee 被叫帐号
  148. * @param accepted 是否接听
  149. */
  150. - (void)onResponse:(UInt64)callID
  151. from:(NSString *)callee
  152. accepted:(BOOL)accepted;
  153. /**
  154. * 对方挂断电话
  155. *
  156. * @param callID call id
  157. * @param user 对方帐号
  158. */
  159. - (void)onHangup:(UInt64)callID
  160. by:(NSString *)user;
  161. /**
  162. * 这通呼入通话已经被该帐号其他端处理
  163. *
  164. * @param callID 呼入通话的call id
  165. * @param accepted 是否被接听
  166. */
  167. - (void)onResponsedByOther:(UInt64)callID
  168. accepted:(BOOL)accepted;
  169. /**
  170. 点对点通话建立成功
  171. @param callID call id
  172. */
  173. - (void)onCallEstablished:(UInt64)callID;
  174. /**
  175. 通话异常断开
  176. @param callID call id
  177. @param error 断开的原因,如果是 nil 表示正常退出
  178. */
  179. - (void)onCallDisconnected:(UInt64)callID
  180. withError:(nullable NSError *)error;
  181. /**
  182. * 收到对方网络通话控制信息,用于方便通话双方沟通信息
  183. *
  184. * @param callID 相关网络通话的call id
  185. * @param user 对方帐号
  186. * @param control 控制类型
  187. */
  188. - (void)onControl:(UInt64)callID
  189. from:(NSString *)user
  190. type:(NIMNetCallControlType)control;
  191. /**
  192. * 当前通话网络状态
  193. *
  194. * @param status 网络状态
  195. * @param user 网络状态对应的用户;如果是自己,表示自己的发送网络状态
  196. */
  197. - (void)onNetStatus:(NIMNetCallNetStatus)status
  198. user:(NSString *)user;
  199. /**
  200. * 本地摄像头预览就绪
  201. *
  202. * @param displayView 本地摄像头预览层
  203. */
  204. - (void)onLocalDisplayviewReady:(UIView *)displayView;
  205. /**
  206. * 本地视频采集方向切换完成回调
  207. *
  208. * @param orientation 采集方向
  209. */
  210. -(void)onCameraOrientationSwitchCompleted:(NIMVideoOrientation)orientation;
  211. /**
  212. * 摄像头方向切换完成回调
  213. *
  214. * @param cameraType 摄像头方向
  215. */
  216. -(void)onCameraTypeSwitchCompleted:(NIMNetCallCamera)cameraType;
  217. /**
  218. * 视频清晰度切换完成回调
  219. *
  220. * @param videoQuality 清晰度
  221. */
  222. -(void)onCameraQualitySwitchCompleted:(NIMNetCallVideoQuality)videoQuality;
  223. /**
  224. * 远程视频YUV数据就绪
  225. *
  226. * @param yuvData 远程视频YUV数据, 紧凑型 (stride 等于 width)
  227. * @param width 远程视频画面宽度
  228. * @param height 远程视频画面长度
  229. * @param user 远程视频画面属于的用户
  230. *
  231. * @discussion 将YUV数据直接渲染在OpenGL上比UIImageView贴图占用更少的cpu
  232. */
  233. - (void)onRemoteYUVReady:(NSData *)yuvData
  234. width:(NSUInteger)width
  235. height:(NSUInteger)height
  236. from:(NSString *)user API_UNAVAILABLE(macos);;
  237. /**
  238. * 远程视频 SampleBuffer 数据就绪
  239. *
  240. * @param sampleBuffer 远程视频 SampleBuffer 数据
  241. * @param user 远程视频画面属于的用户
  242. *
  243. */
  244. - (void)onRemoteVideo:(CMSampleBufferRef)sampleBuffer
  245. from:(NSString *)user API_UNAVAILABLE(ios);;
  246. /**
  247. * 远程视频画面就绪
  248. *
  249. * @param image 远程视频画面
  250. *
  251. * @discussion 如果你已经使用onRemoteYUVReady:width:height:得到的YUV数据渲染画面, 不要实现该委托以优化性能
  252. */
  253. - (void)onRemoteImageReady:(CGImageRef)image;
  254. /**
  255. * 录制成功开始
  256. *
  257. * @param callID 录制的相关网络通话的call id
  258. * @param fileURL 录制的文件路径
  259. * @param userId 录制用户对象的id
  260. */
  261. - (void)onRecordStarted:(UInt64)callID
  262. fileURL:(NSURL *)fileURL
  263. uid:(NSString *)userId;
  264. /**
  265. * 录制发生了错误
  266. *
  267. * @param error 错误
  268. * @param callID 录制错误相关网络通话的call id
  269. * @param userId 录制用户对象的id
  270. */
  271. - (void)onRecordError:(NSError *)error
  272. callID:(UInt64)callID
  273. uid:(NSString *)userId;
  274. /**
  275. * 录制成功结束
  276. *
  277. * @param callID 录制的相关网络通话的call id
  278. * @param fileURL 录制的文件路径
  279. * @param userId 录制用户对象的id
  280. */
  281. - (void)onRecordStopped:(UInt64)callID
  282. fileURL:(NSURL *)fileURL
  283. uid:(NSString *)userId;
  284. /**
  285. * 网络通话服务器录制信息
  286. *
  287. * @param info 录制信息
  288. */
  289. - (void)onNetCallRecordingInfo:(NIMNetCallRecordingInfo *)info;
  290. /**
  291. * 用户加入了多人会议
  292. *
  293. * @param uid 用户 id
  294. * @param meeting 用户加入的会议
  295. */
  296. - (void)onUserJoined:(NSString *)uid
  297. meeting:(NIMNetCallMeeting *)meeting;
  298. /**
  299. * 用户离开了多人会议
  300. *
  301. * @param uid 用户 id
  302. * @param meeting 用户离开的会议
  303. */
  304. - (void)onUserLeft:(NSString *)uid
  305. meeting:(NIMNetCallMeeting *)meeting;
  306. /**
  307. * 会议发生了错误
  308. *
  309. * @param error 错误信息
  310. * @param meeting 发生错误的会议
  311. */
  312. - (void)onMeetingError:(NSError *)error
  313. meeting:(NIMNetCallMeeting *)meeting;
  314. /**
  315. * 自己当前音量
  316. *
  317. * @param volume 音量
  318. */
  319. -(void)onMyVolumeUpdate:(UInt16)volume;
  320. /**
  321. * 正在说话的用户信息汇报
  322. *
  323. * @param report 用户信息,包含音量,如果为空,表示没有说话的人
  324. */
  325. - (void)onSpeakingUsersReport:(nullable NSArray<NIMNetCallUserInfo *> *)report;
  326. /**
  327. 当前语音文件混音任务完成回调
  328. */
  329. - (void)onAudioMixTaskCompleted;
  330. /**
  331. 当前音效播放完成回调
  332. */
  333. - (void)onSoundEffectPlayCompleted;
  334. /**
  335. 互动直播状态回调
  336. @param code 互动直播状态码
  337. */
  338. - (void)onBypassStreamingStatus:(NIMBypassStreamingStatus)code;
  339. /**
  340. * 摄像头开关状态回调
  341. *
  342. * @param running 开启状态
  343. */
  344. - (void)onCameraRunning:(BOOL)running;
  345. @end
  346. /**
  347. * 网络通话协议
  348. */
  349. @protocol NIMNetCallManager <NSObject>
  350. /**
  351. * 主叫发起通话 - 新接口
  352. *
  353. * @param callees 被叫帐号列表, 现在只支持传入一个被叫
  354. * @param type 呼叫类型
  355. * @param option 开始通话附带的选项, 可以为空。如果需要 SDK 自动开启摄像头,需要指定 option 的视频采集参数 videoCaptureParam
  356. * @param completion 发起通话结果回调
  357. */
  358. - (void)start:(NSArray<NSString *> *)callees
  359. type:(NIMNetCallMediaType)type
  360. option:(nullable NIMNetCallOption *)option
  361. completion:(nullable NIMNetCallStartHandler)completion;
  362. /**
  363. * 被叫响应呼叫
  364. *
  365. * @param callID call id
  366. * @param accept 是否接听
  367. * @param option 开始通话附带的选项, 可以为空。如果需要 SDK 自动开启摄像头,需要指定 option 的视频采集参数 videoCaptureParam
  368. * @param completion 响应呼叫结果回调
  369. *
  370. * @discussion 被叫拒绝接听时, 主叫不需要再调用hangup:接口
  371. */
  372. - (void)response:(UInt64)callID
  373. accept:(BOOL)accept
  374. option:(nullable NIMNetCallOption *)option
  375. completion:(nullable NIMNetCallResponseHandler)completion;
  376. /**
  377. * 挂断通话
  378. *
  379. * @param callID 需要挂断电话的call id, 如果尚未获取到call id就填0
  380. *
  381. * @discussion 被叫在响应呼叫之前不要调用挂断接口
  382. */
  383. - (void)hangup:(UInt64)callID;
  384. /**
  385. * 预订多人会议
  386. *
  387. * @param meeting 预订的多人会议
  388. * @param completion 预订会议结果
  389. */
  390. - (void)reserveMeeting:(NIMNetCallMeeting *)meeting
  391. completion:(nullable NIMNetCallMeetingHandler)completion;
  392. /**
  393. * 加入多人会议
  394. *
  395. * @param meeting 需要加入的多人会议
  396. * @param completion 加入会议结果
  397. *
  398. * @discussion 如果需要 SDK 自动开启摄像头,需要在 meeting 中指定 option 的视频采集参数 videoCaptureParam
  399. */
  400. - (void)joinMeeting:(NIMNetCallMeeting *)meeting
  401. completion:(nullable NIMNetCallMeetingHandler)completion;
  402. /**
  403. * 离开多人会议
  404. *
  405. * @param meeting 需要离开的多人会议
  406. *
  407. * @discussion 当所有加入的人都离开了某会议, 该会议对应的名称才可以被重复预订
  408. *
  409. */
  410. - (void)leaveMeeting:(NIMNetCallMeeting *)meeting;
  411. /**
  412. * 开始视频采集。用于需要在开始音视频通话之前开启视频采集的场景
  413. *
  414. * @param param 视频采集参数
  415. *
  416. * @return 开始是否成功
  417. *
  418. * @discussion 视频采集开始以后无法再调用该接口进行更新设置。需要先停止采集以后才能再次开始
  419. */
  420. - (BOOL)startVideoCapture:(NIMNetCallVideoCaptureParam *)param;
  421. /**
  422. * 设置视频采集方向
  423. *
  424. * @param orientation 需要设置的方向
  425. *
  426. * @return 设置是否成功
  427. *
  428. * @discussion 用于互动直播场景。只能在开始视频采集以后调用
  429. */
  430. - (BOOL)setVideoCaptureOrientation:(NIMVideoOrientation)orientation;
  431. /**
  432. * 停止视频采集。用于在网络通话的自动停止视频采集选项 stopVideoCaptureOnLeave 未开启时主动管理采集的关闭操作
  433. */
  434. - (void)stopVideoCapture;
  435. /**
  436. * 切换网络通话摄像头
  437. *
  438. * @param camera 选择的摄像头
  439. *
  440. * @discussion 切换网络通话类型将丢失该设置
  441. */
  442. - (void)switchCamera:(NIMNetCallCamera)camera API_UNAVAILABLE(macos);
  443. /**
  444. * 设置摄像头关闭
  445. *
  446. * @param disable 是否关闭
  447. *
  448. * @return 设置是否成功
  449. *
  450. * @discussion 仅支持当前为视频模式时进行此设置, 切换网络通话类型将丢失该设置
  451. */
  452. - (BOOL)setCameraDisable:(BOOL)disable;
  453. /**
  454. * 通话中切换视频质量
  455. *
  456. * @param quality 期望的视频质量
  457. *
  458. * @return 是否设置成功. 如果用户尚未加入, 则无法设置
  459. */
  460. - (BOOL)switchVideoQuality:(NIMNetCallVideoQuality)quality;
  461. /**
  462. * 改变自己在会议中的角色
  463. *
  464. * @param actor 是否为发言者角色, 发言者发送音视频数据, 非发言者不发送音视频数据
  465. *
  466. * @return 设置是否成功
  467. */
  468. - (BOOL)setMeetingRole:(BOOL)actor;
  469. /**
  470. * 指定某用户设置是否对其静音
  471. *
  472. * @param mute 是否静音, 静音后将听不到该用户的声音
  473. * @param uid 用户 uid
  474. *
  475. * @return 是否设置成功. 如果用户尚未加入, 则无法设置
  476. */
  477. - (BOOL)setAudioMute:(BOOL)mute forUser:(NSString *)uid;
  478. /**
  479. * 指定某用户设置是否接收其视频
  480. *
  481. * @param mute 是否拒绝视频, 拒绝后将没有该用户视频数据回调
  482. * @param uid 用户uid
  483. *
  484. * @return 是否设置成功. 如果用户尚未加入, 则无法设置
  485. */
  486. - (BOOL)setVideoMute:(BOOL)mute forUser:(NSString *)uid;
  487. /**
  488. 设置禁止发送视频
  489. @param mute 是否禁止发送视频
  490. @return 是否设置成功. 如果用户尚未加入, 则无法设置
  491. */
  492. - (BOOL)setVideoSendMute:(BOOL)mute;
  493. /**
  494. * 发送网络通话的控制信息,用于方便通话双方沟通信息
  495. *
  496. * @param callID 控制信息相关通话的call id
  497. * @param type 控制类型
  498. */
  499. - (void)control:(UInt64)callID
  500. type:(NIMNetCallControlType)type;
  501. /**
  502. * 设置网络通话麦克风静音
  503. *
  504. * @param mute 是否开启麦克风静音
  505. *
  506. * @return 开启麦克风静音是否成功
  507. *
  508. * @discussion 该设置不影响伴音发送, 切换网络通话类型将丢失该设置
  509. */
  510. - (BOOL)setMute:(BOOL)mute;
  511. /**
  512. * 设置是否关闭语音发送,包含伴音
  513. *
  514. * @param mute 是否关闭语音发送
  515. *
  516. * @return 设置是否成功
  517. *
  518. */
  519. - (BOOL)setAudioSendMute:(BOOL)mute;
  520. /**
  521. * 设置网络通话扬声器模式
  522. *
  523. * @param useSpeaker 是否开启扬声器
  524. *
  525. * @return 开启扬声器是否成功
  526. *
  527. * @discussion 切换网络通话类型将丢失该设置
  528. */
  529. - (BOOL)setSpeaker:(BOOL)useSpeaker API_UNAVAILABLE(macos);
  530. /**
  531. * 切换网络通话类型
  532. *
  533. * @param type 通话类型
  534. *
  535. * @discussion 切换通话类型会丢失这些设置: 静音模式, 扬声器模式, 摄像头关闭, 切换摄像头
  536. */
  537. - (void)switchType:(NIMNetCallMediaType)type;
  538. /**
  539. * 设置视频最大编码码率
  540. *
  541. * @param bitrate 最大编码码率 (bps)
  542. *
  543. * @return 是否设置成功
  544. */
  545. - (BOOL)setVideoMaxEncodeBitrate:(NSUInteger)bitrate;
  546. /**
  547. * 切换视频编码器
  548. *
  549. * @param codec 视频编码器
  550. *
  551. * @return 是否设置成功. 如果用户尚未加入, 则无法设置
  552. *
  553. * @discussion 硬编码设置仅在iOS8及以上系统有效
  554. *
  555. */
  556. - (BOOL)switchVideoEncoder:(NIMNetCallVideoCodec)codec;
  557. /**
  558. * 切换视频解码器
  559. *
  560. * @param codec 视频解码器
  561. *
  562. * @return 是否设置成功. 如果用户尚未加入, 则无法设置
  563. *
  564. * @discussion 硬解码设置仅在iOS8及以上系统有效
  565. *
  566. */
  567. - (BOOL)switchVideoDecoder:(NIMNetCallVideoCodec)codec;
  568. /**
  569. * 选择视频调控策略
  570. *
  571. * @param videoAdaptiveStrategy 视频调控策略
  572. *
  573. * @return 是否设置成功.
  574. */
  575. - (BOOL)selectVideoAdaptiveStrategy:(NIMAVChatVideoAdaptiveStrategy)videoAdaptiveStrategy;
  576. /**
  577. * 发送视频 SampleBuffer
  578. *
  579. * @param buffer 只支持包含以下三种 CVPixelBuffer 数据格式的 sampleBuffer: kCVPixelFormatType_32BGRA、kCVPixelFormatType_420YpCbCr8BiPlanarVideoRange、kCVPixelFormatType_420YpCbCr8BiPlanarFullRange
  580. *
  581. * @discussion 可以发送SDK回调上来的视频数据,也可以发送自定义视频数据 自定义数据输入不能超过720P
  582. *
  583. * @return 发送结果
  584. */
  585. - (nullable NSError *)sendVideoSampleBuffer:(CMSampleBufferRef)buffer;
  586. /**
  587. * 互动直播设置主画面
  588. *
  589. * @param uid 被设置的用户id
  590. *
  591. * @param completion 完成回调 如果设置成功 error 为 nil
  592. *
  593. * @discussion 在互动直播下,动态切换布局,设置用户为主画面,只有互动直播主播可以设置
  594. */
  595. - (void)setAsMainArea:(NSString *)uid completion:(void(^)(NSError * __nullable error))completion;
  596. /**
  597. * 切换互动直播推流地址
  598. *
  599. * @param url 推流地址
  600. *
  601. * @return 是否设置成功
  602. */
  603. - (BOOL)switchBypassStreamingUrl:(NSString *)url;
  604. /**
  605. 开始混音任务
  606. @param task 文件混音任务
  607. @return 结果, 如果成功开始了, 返回 nil
  608. @discussion 开始新的任务会结束正在进行中的任务
  609. */
  610. - (nullable NSError *)startAudioMix:(NIMNetCallAudioFileMixTask *)task;
  611. /**
  612. 更新混音任务
  613. @param task 文件混音任务
  614. @return 结果, 如果成功开始了, 返回 nil
  615. @discussion 可以更新循环播放次数和音量等
  616. */
  617. - (nullable NSError *)updateAudioMix:(NIMNetCallAudioFileMixTask *)task;
  618. /**
  619. 暂停混音
  620. @return 是否成功
  621. */
  622. - (BOOL)pauseAudioMix;
  623. /**
  624. 恢复混音
  625. @return 是否成功
  626. */
  627. - (BOOL)resumeAudioMix;
  628. /**
  629. 结束混音
  630. @return 是否成功
  631. */
  632. - (BOOL)stopAudioMix;
  633. /**
  634. 获取当前进行中的混音任务
  635. @return 混音任务. 如果没有当前任务则返回 nil
  636. */
  637. - (nullable NIMNetCallAudioFileMixTask *)currentAudioMixTask;
  638. /**
  639. 播放音效,用于在混音时播放短暂的音效
  640. @param task 音效任务。其中的 sendVolume 参数在播放音效中无效
  641. @return 结果, 如果成功开始了, 返回 nil
  642. */
  643. - (nullable NSError *)playSoundEffect:(NIMNetCallAudioFileMixTask *)task;
  644. /**
  645. 打开耳返
  646. */
  647. - (void)startEarBack;
  648. /**
  649. 关闭耳返
  650. */
  651. - (void)stopEarBack;
  652. /**
  653. 调节耳返音量
  654. @param volume 耳返音量 接受输入值为 0 到 10
  655. @return 是否调节成功
  656. */
  657. - (BOOL)changeEarBackVolume:(NSUInteger)volume;
  658. /**
  659. * 获得当前视频通话的本地预览层
  660. *
  661. * @return 预览层
  662. */
  663. - (nullable UIView *)localPreview;
  664. /**
  665. * 本地截图. 截取自己下一帧待发送的画面
  666. *
  667. * @param result 截图结果
  668. *
  669. * @discussion 如果截图失败, result 中 image 为 nil
  670. */
  671. - (void)snapshotFromLocalVideoCompletion:(void(^)(UIImage * __nullable image))result;
  672. /**
  673. * 获取正在进行中的网络通话call id
  674. *
  675. * @return call id, 如果没有正在进行中的通话则返回0
  676. */
  677. - (UInt64)currentCallID;
  678. /**
  679. * 获取当前网络通话中某用户的网络状态
  680. *
  681. * @param user 用户. 可以传入自己的 id 以获取自己的发送网络状况
  682. *
  683. * @return 网络状态
  684. */
  685. - (NIMNetCallNetStatus)netStatus:(NSString *)user;
  686. /**
  687. * 开始MP4文件录制, 录制通话过程中自己的音视频内容到MP4文件
  688. *
  689. * @param filePath 录制文件路径, SDK不负责创建目录, 请确保文件路径的合法性,
  690. * 也可以传入nil, 由SDK自己选择文件路径
  691. * @param videoBitrate 录制文件视频码率设置, 可以不指定, 由SDK自己选择合适的码率
  692. *
  693. * @param userId 录制用户对象的id
  694. *
  695. * @return 是否允许开始录制
  696. *
  697. * @discussion 只有通话连接建立以后才允许开始录制
  698. */
  699. - (BOOL)startRecording:(nullable NSURL *)filePath
  700. videoBitrate:(UInt32)videoBitrate
  701. uid:(NSString *)userId;
  702. /**
  703. * 停止MP4文件录制
  704. *
  705. * @param userId 录制用户对象的id
  706. *
  707. * @return 是否接受停止录制请求
  708. */
  709. - (BOOL)stopRecordingWithUid:(NSString *)userId;
  710. /**
  711. 开始通话录音. 录制通话中所有参与者的声音, 包含混音任务播放的声音, 录制成 aac 或者 wav 文件
  712. @param filePath 录制文件路径, 不包含文件类型后缀. 包含文件类型后缀的完整文件路径可以在开始录制以后通过 currentAudioRecordingFilePath 查询.
  713. @discussion SDK不负责创建目录, 请确保文件路径的合法性, 也可以传入 nil, 由 SDK 自己选择文件路径
  714. @param error 错误. 如果开始通话录音失败, 此处回填错误码
  715. @return 开始通话录音的结果.
  716. */
  717. - (BOOL)startAudioRecording:(nullable NSURL *)filePath
  718. error:(NSError * __nullable *)error;
  719. /**
  720. 结束通话录音
  721. */
  722. - (void)stopAudioRecording;
  723. /**
  724. 获取当前通话录音文件路径
  725. @return 当前通话录音文件路径. 如果没有进行中的通话录音则返回 nil
  726. */
  727. - (nullable NSURL *)currentAudioRecordingFilePath;
  728. /**
  729. * 获得 SDK 网络通话网络层log 文件路径
  730. *
  731. * @return SDK 网络通话 log
  732. */
  733. - (NSString *)netCallLogFilepath;
  734. /**
  735. * 添加网络通话委托
  736. *
  737. * @param delegate 网络通话委托
  738. */
  739. - (void)addDelegate:(id<NIMNetCallManagerDelegate>)delegate;
  740. /**
  741. * 移除网络通话委托
  742. *
  743. * @param delegate 网络通话委托
  744. */
  745. - (void)removeDelegate:(id<NIMNetCallManagerDelegate>)delegate;
  746. /**
  747. 选择滤镜类型
  748. @param type 滤镜类型
  749. @return 是否设置成功
  750. */
  751. - (BOOL)selectBeautifyType:(NIMNetCallFilterType)type;
  752. /**
  753. 改变焦距 实际放大倍数
  754. @param scale 放大倍数
  755. @return 是否设置成功
  756. */
  757. - (BOOL)changeLensPosition:(float)scale API_UNAVAILABLE(macos);
  758. /**
  759. 设置闪光灯开关
  760. @param isFlashOn 是否开启闪光灯
  761. */
  762. - (void)setCameraFlash:(BOOL)isFlashOn API_UNAVAILABLE(macos);
  763. /**
  764. 设置预览镜像
  765. @param isMirrorOn 是否开启预览镜像
  766. */
  767. - (void)setPreViewMirror:(BOOL)isMirrorOn ;
  768. /**
  769. 设置编码镜像
  770. @param isMirrorOn 是否开启编码镜像
  771. */
  772. - (void)setCodeMirror:(BOOL)isMirrorOn API_UNAVAILABLE(macos);
  773. /**
  774. 设置对焦模式
  775. @param mode 对焦模式
  776. @return 是否设置成功
  777. */
  778. - (BOOL)setFocusMode:(NIMNetCallFocusMode)mode API_UNAVAILABLE(macos);
  779. /**
  780. 获取摄像头支持的最大放大倍数
  781. * @return 放大倍数
  782. */
  783. - (CGFloat)getMaxZoomScale API_UNAVAILABLE(macos);
  784. /**
  785. 添加静态水印
  786. @param image 水印图片
  787. @param rect 水印具体位置和大小(x,y根据location位置,计算具体的位置信息)
  788. @param location 水印位置
  789. @return 是否设置成功
  790. */
  791. - (BOOL)addWaterMark:(UIImage*)image
  792. rect:(CGRect)rect
  793. location:(NIMNetCallWaterMarkLocation)location API_UNAVAILABLE(macos);
  794. /**
  795. 添加动态水印
  796. @param imageArray 动态图像数组
  797. @param count 播放速度的快慢:count代表count帧显示同一张图
  798. @param looped 是否循环,不循环就显示一次
  799. @param rect 具体位置和大小(x,y根据location位置,计算具体的位置信息)
  800. @param location 位置
  801. @return 是否设置成功
  802. */
  803. - (BOOL)addDynamicWaterMarks:(NSArray*)imageArray
  804. fpsCount:(unsigned int)count
  805. loop:(BOOL)looped
  806. rect:(CGRect)rect
  807. location:(NIMNetCallWaterMarkLocation)location API_UNAVAILABLE(macos);
  808. /**
  809. * 清除水印
  810. */
  811. - (void)cleanWaterMark API_UNAVAILABLE(macos);
  812. /**
  813. 手动对焦
  814. @param devicePoint 点
  815. */
  816. - (void)changeNMCVideoPreViewManualFocusPoint:(CGPoint)devicePoint API_UNAVAILABLE(macos);
  817. /**
  818. 设置对比度滤镜强度,支持自然 粉嫩 怀旧 黑白模式
  819. @param value 值 [0-4] 默认为 1
  820. @return 是否设置成功
  821. */
  822. - (BOOL)setContrastFilterIntensity:(float)value API_UNAVAILABLE(macos);
  823. /**
  824. 设置磨皮滤镜强度,支持自然 粉嫩 怀旧 黑白模式
  825. @param value 值 [0-1] 默认为 0
  826. @return 是否设置成功
  827. */
  828. - (BOOL)setSmoothFilterIntensity:(float)value API_UNAVAILABLE(macos);
  829. @end
  830. NS_ASSUME_NONNULL_END