NIMRTSManagerProtocol.h 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272
  1. //
  2. // NIMRTSManagerProtocol.h
  3. // NIMLib
  4. //
  5. // Created by Netease.
  6. // Copyright (c) 2015 Netease. All rights reserved.
  7. //
  8. #import <Foundation/Foundation.h>
  9. #import "NIMAVChatDefs.h"
  10. NS_ASSUME_NONNULL_BEGIN
  11. @class NIMRTSOption;
  12. @class NIMRTSRecordingInfo;
  13. /**
  14. * 发起实时会话请求Block
  15. *
  16. * @param error 发起结果, 如果成功 error 为 nil
  17. * @param sessionID 发起的实时会话的 ID
  18. * @param channelID 实时会话内部使用的通道号, 对应服务器白板时长消息抄送里的 channelId. 仅在 error 为 nil 时有效
  19. */
  20. typedef void(^NIMRTSRequestHandler)(NSError * __nullable error,NSString * __nullable sessionID,UInt64 channelID);
  21. /**
  22. * 响应实时会话请求Block
  23. *
  24. * @param error 响应实时会话请求, 如果成功 error 为 nil
  25. * @param sessionID 响应的实时会话的 ID
  26. * @param channelID 实时会话内部使用的通道号, 对应服务器白板时长消息抄送里的 channelId. 仅在 error 为 nil 时有效
  27. */
  28. typedef void(^NIMRTSResponseHandler)(NSError * __nullable error,NSString * __nullable sessionID,UInt64 channelID);
  29. /**
  30. * 实时会话服务
  31. */
  32. typedef NS_ENUM(NSInteger, NIMRTSService){
  33. /**
  34. * 包含可靠数据传输服务
  35. */
  36. NIMRTSServiceReliableTransfer = 1,
  37. /**
  38. * 包含实时语音沟通服务
  39. */
  40. NIMRTSServiceAudio = 4,
  41. };
  42. /**
  43. * 实时会话状态
  44. */
  45. typedef NS_ENUM(NSInteger, NIMRTSStatus){
  46. /**
  47. * 已连接
  48. */
  49. NIMRTSStatusConnect,
  50. /**
  51. * 已断开
  52. */
  53. NIMRTSStatusDisconnect,
  54. };
  55. /**
  56. * 实时会话相关回调
  57. */
  58. @protocol NIMRTSManagerDelegate <NSObject>
  59. @optional
  60. /**
  61. * 被叫收到实时会话请求
  62. *
  63. * @param sessionID 实时会话ID
  64. * @param caller 主叫帐号
  65. * @param types 服务类型, NIMRTSService的组合
  66. * @param extendMessage 附加信息
  67. */
  68. - (void)onRTSRequest:(NSString *)sessionID
  69. from:(NSString *)caller
  70. services:(NSUInteger)types
  71. message:(nullable NSString *)extendMessage;
  72. /**
  73. * 主叫收到被叫实时会话响应
  74. *
  75. * @param sessionID 实时会话ID
  76. * @param callee 被叫帐号
  77. * @param accepted 是否接听
  78. *
  79. * @discussion 被叫拒绝接听时, 主叫不需要再调用termimateRTS:接口
  80. */
  81. - (void)onRTSResponse:(NSString *)sessionID
  82. from:(NSString *)callee
  83. accepted:(BOOL)accepted;
  84. /**
  85. * 对方结束实时会话
  86. *
  87. * @param sessionID 实时会话ID
  88. * @param user 对方帐号
  89. */
  90. - (void)onRTSTerminate:(NSString *)sessionID
  91. by:(NSString *)user;
  92. /**
  93. * 这通呼入的实时会话请求已经被该帐号其他端处理
  94. *
  95. * @param sessionID 实时会话ID
  96. * @param accepted 是否被接听
  97. */
  98. - (void)onRTSResponsedByOther:(NSString *)sessionID
  99. accepted:(BOOL)accepted;
  100. /**
  101. * 实时会话状态反馈
  102. *
  103. * @param sessionID 实时会话ID
  104. * @param type 实时会话服务类型
  105. * @param status 通话状态, 收到NIMRTSStatusDisconnect时无需调用terminate:结束该会话
  106. * @param error 出错信息, 正常连接和断开时为nil
  107. */
  108. - (void)onRTS:(NSString *)sessionID
  109. service:(NIMRTSService)type
  110. status:(NIMRTSStatus)status
  111. error:(nullable NSError *)error;
  112. /**
  113. * 收到实时会话数据
  114. *
  115. * @param sessionID 实时会话ID
  116. * @param data 收到的实时会话数据
  117. * @param user 发送实时会话数据的用户
  118. * @param channel 收发实时数据的服务通道
  119. */
  120. - (void)onRTSReceive:(NSString *)sessionID
  121. data:(NSData *)data
  122. from:(NSString *)user
  123. withIn:(NIMRTSService)channel;
  124. /**
  125. * 收到实时会话控制信息
  126. *
  127. * @param controlInfo 控制信息
  128. * @param user 发送指令的用户
  129. * @param sessionID 实时会话ID
  130. */
  131. - (void)onRTSControl:(NSString *)controlInfo
  132. from:(NSString *)user
  133. forSession:(NSString *)sessionID;
  134. /**
  135. * 实时会话录制信息
  136. *
  137. * @param info 录制信息
  138. * @param sessionID 实时会话ID
  139. */
  140. - (void)onRTSRecordingInfo:(NIMRTSRecordingInfo *)info
  141. forSession:(NSString *)sessionID;
  142. /**
  143. * 语音网络状态
  144. *
  145. * @param status 网络状态
  146. * @param user 网络状态对应的用户;如果是自己,表示自己的发送网络状态
  147. */
  148. - (void)onRTSAudioNetStatus:(NIMNetCallNetStatus)status
  149. user:(NSString *)user;
  150. @end
  151. /**
  152. * 实时会话协议
  153. */
  154. @protocol NIMRTSManager <NSObject>
  155. /**
  156. * 主叫发起实时会话请求
  157. *
  158. * @param callees 被叫帐号列表, 当前版本只支持一个被叫
  159. * @param types 实时会话服务类型, NIMRTSService的组合, 如果要同时发起可靠传输通道和音频通话, 使用 NIMRTSServiceReliableTransfer | NIMRTSServiceAudio
  160. * @param option 发起会话附带的选项, 可以是nil
  161. * @param completion 发起实时会话结果回调
  162. *
  163. * @return 发起的实时会话ID
  164. */
  165. - (NSString *)requestRTS:(NSArray<NSString *> *)callees
  166. services:(NSUInteger)types
  167. option:(nullable NIMRTSOption *)option
  168. completion:(nullable NIMRTSRequestHandler)completion API_UNAVAILABLE(macos);
  169. /**
  170. * 被叫响应实时会话请求
  171. *
  172. * @param sessionID 实时会话ID
  173. * @param accept 是否接听
  174. * @param option 接收会话附带的选项, 可以是nil
  175. * @param completion 响应呼叫结果回调
  176. *
  177. */
  178. - (void)responseRTS:(NSString *)sessionID
  179. accept:(BOOL)accept
  180. option:(nullable NIMRTSOption *)option
  181. completion:(nullable NIMRTSResponseHandler)completion API_UNAVAILABLE(macos);
  182. /**
  183. * 挂断实时会话
  184. *
  185. * @param sessionID 需要挂断的实时会话ID
  186. *
  187. * @discussion 被叫在响应请求之前不要调用挂断接口
  188. */
  189. - (void)terminateRTS:(NSString *)sessionID API_UNAVAILABLE(macos);
  190. /**
  191. * 从指定通道发送数据
  192. *
  193. * @param data 需要发送的实时会话数据, 数据长度不允许超过50KB, 推荐不超过4KB; 发送数据的周期建议控制在50ms以上
  194. * @param sessionID 实时会话ID
  195. * @param userID 发送数据目标用户名, nil表示广播给所有用户
  196. * @param service 实时会话服务类型
  197. *
  198. * @return 是否允许发送
  199. *
  200. * @discussion 被叫在响应请求之前不要调用挂断接口
  201. */
  202. - (BOOL)sendRTSData:(NSData *)data
  203. from:(NSString *)sessionID
  204. to:(NSString *)userID
  205. with:(NIMRTSService)service API_UNAVAILABLE(macos);
  206. /**
  207. * 发送实时会话控制指令
  208. *
  209. * @param controlInfo 控制信息, 自定义实现
  210. * @param sessionID 实时会话ID
  211. */
  212. - (void)sendRTSControl:(NSString *)controlInfo
  213. forSession:(NSString *)sessionID API_UNAVAILABLE(macos);
  214. /**
  215. * 设置当前实时会话静音模式
  216. *
  217. * @param mute 是否开启静音
  218. *
  219. */
  220. - (void)setMute:(BOOL)mute API_UNAVAILABLE(macos);
  221. /**
  222. * 设置当前实时会话扬声器模式
  223. *
  224. * @param useSpeaker 是否开启扬声器
  225. *
  226. */
  227. - (void)setSpeaker:(BOOL)useSpeaker API_UNAVAILABLE(macos);
  228. /**
  229. * 添加实时会话委托
  230. *
  231. * @param delegate 实时会话委托
  232. */
  233. - (void)addDelegate:(id<NIMRTSManagerDelegate>)delegate API_UNAVAILABLE(macos);
  234. /**
  235. * 移除实时会话委托
  236. *
  237. * @param delegate 实时会话委托
  238. */
  239. - (void)removeDelegate:(id<NIMRTSManagerDelegate>)delegate API_UNAVAILABLE(macos);
  240. @end
  241. NS_ASSUME_NONNULL_END