index.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333
  1. /*
  2. * RCCallUni - v5.1.14-release.1
  3. * CommitId - a184e82065a309fc565be987321c44e9da02abbb
  4. * Thu Jan 06 2022 16:03:36 GMT+0800 (中国标准时间)
  5. * ©2020 RongCloud, Inc. All rights reserved.
  6. */
  7. 'use strict';
  8. Object.defineProperty(exports, '__esModule', { value: true });
  9. class Logger {
  10. tag;
  11. constructor(tag) {
  12. this.tag = tag;
  13. }
  14. log(str) {
  15. console.log(`[${this.tag}] ${new Date().toISOString()} ${str}`);
  16. }
  17. }
  18. const logger = new Logger('RCUNICallLib');
  19. exports.RCCallIWCamera = void 0;
  20. (function (RCCallIWCamera) {
  21. RCCallIWCamera[RCCallIWCamera["NONE"] = -1] = "NONE";
  22. RCCallIWCamera[RCCallIWCamera["FRONT"] = 0] = "FRONT";
  23. RCCallIWCamera[RCCallIWCamera["BACK"] = 1] = "BACK";
  24. })(exports.RCCallIWCamera || (exports.RCCallIWCamera = {}));
  25. exports.RCCallIWMediaType = void 0;
  26. (function (RCCallIWMediaType) {
  27. RCCallIWMediaType[RCCallIWMediaType["AUDIO"] = 0] = "AUDIO";
  28. RCCallIWMediaType[RCCallIWMediaType["AUDIO_VIDEO"] = 1] = "AUDIO_VIDEO";
  29. })(exports.RCCallIWMediaType || (exports.RCCallIWMediaType = {}));
  30. exports.RCUNICallErrorCode = void 0;
  31. (function (RCUNICallErrorCode) {
  32. RCUNICallErrorCode[RCUNICallErrorCode["SUCCESS"] = 0] = "SUCCESS";
  33. RCUNICallErrorCode[RCUNICallErrorCode["ENGINE_NOT_FOUND"] = 1] = "ENGINE_NOT_FOUND";
  34. RCUNICallErrorCode[RCUNICallErrorCode["NETWORK_UNAVAILABLE"] = 2] = "NETWORK_UNAVAILABLE";
  35. RCUNICallErrorCode[RCUNICallErrorCode["ONE_CALL_EXISTED"] = 3] = "ONE_CALL_EXISTED";
  36. RCUNICallErrorCode[RCUNICallErrorCode["OPERATION_UNAVAILABLE"] = 4] = "OPERATION_UNAVAILABLE";
  37. RCUNICallErrorCode[RCUNICallErrorCode["INVALID_PARAM"] = 5] = "INVALID_PARAM";
  38. RCUNICallErrorCode[RCUNICallErrorCode["NETWORK_UNSTABLE"] = 6] = "NETWORK_UNSTABLE";
  39. RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_REQUEST_FAILED"] = 7] = "MEDIA_REQUEST_FAILED";
  40. RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_NOT_READY"] = 8] = "MEDIA_SERVER_NOT_READY";
  41. RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_NOT_INITIALIZED"] = 9] = "MEDIA_SERVER_NOT_INITIALIZED";
  42. RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_REQUEST_TIMEOUT"] = 10] = "MEDIA_REQUEST_TIMEOUT";
  43. RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_UNKOWN_ERROR"] = 11] = "MEDIA_UNKOWN_ERROR";
  44. RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_KICKED_BY_SERVER_ERROR"] = 12] = "MEDIA_KICKED_BY_SERVER_ERROR";
  45. RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_CLOSED_ERROR"] = 13] = "MEDIA_SERVER_CLOSED_ERROR";
  46. RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_PUBLISH_ERROR"] = 14] = "MEDIA_SERVER_PUBLISH_ERROR";
  47. RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_SERVER_SUBSCRIBE_ERROR"] = 15] = "MEDIA_SERVER_SUBSCRIBE_ERROR";
  48. RCUNICallErrorCode[RCUNICallErrorCode["MEDIA_JOIN_ROOM_REFUSE_ERROR"] = 16] = "MEDIA_JOIN_ROOM_REFUSE_ERROR";
  49. })(exports.RCUNICallErrorCode || (exports.RCUNICallErrorCode = {}));
  50. exports.RCCallIWCallDisconnectedReason = void 0;
  51. (function (RCCallIWCallDisconnectedReason) {
  52. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["CANCEL"] = 0] = "CANCEL";
  53. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REJECT"] = 1] = "REJECT";
  54. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["HANGUP"] = 2] = "HANGUP";
  55. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["BUSY_LINE"] = 3] = "BUSY_LINE";
  56. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["NO_RESPONSE"] = 4] = "NO_RESPONSE";
  57. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["ENGINE_UNSUPPORTED"] = 5] = "ENGINE_UNSUPPORTED";
  58. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["NETWORK_ERROR"] = 6] = "NETWORK_ERROR";
  59. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["RESOURCE_GET_ERROR"] = 7] = "RESOURCE_GET_ERROR";
  60. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["RESOURCE_PUBLISH_ERROR"] = 8] = "RESOURCE_PUBLISH_ERROR";
  61. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["RESOURCE_SUBSCRIBE_ERROR"] = 9] = "RESOURCE_SUBSCRIBE_ERROR";
  62. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_CANCEL"] = 10] = "REMOTE_CANCEL";
  63. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_REJECT"] = 11] = "REMOTE_REJECT";
  64. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_HANGUP"] = 12] = "REMOTE_HANGUP";
  65. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_BUSY_LINE"] = 13] = "REMOTE_BUSY_LINE";
  66. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_NO_RESPONSE"] = 14] = "REMOTE_NO_RESPONSE";
  67. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_ENGINE_UNSUPPORTED"] = 15] = "REMOTE_ENGINE_UNSUPPORTED";
  68. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_NETWORK_ERROR"] = 16] = "REMOTE_NETWORK_ERROR";
  69. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_RESOURCE_GET_ERROR"] = 17] = "REMOTE_RESOURCE_GET_ERROR";
  70. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_RESOURCE_PUBLISH_ERROR"] = 18] = "REMOTE_RESOURCE_PUBLISH_ERROR";
  71. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_RESOURCE_SUBSCRIBE_ERROR"] = 19] = "REMOTE_RESOURCE_SUBSCRIBE_ERROR";
  72. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["KICKED_BY_OTHER_CALL"] = 20] = "KICKED_BY_OTHER_CALL";
  73. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["IN_OTHER_CALL"] = 21] = "IN_OTHER_CALL";
  74. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["KICKED_BY_SERVER"] = 22] = "KICKED_BY_SERVER";
  75. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_KICKED_BY_OTHER_CALL"] = 23] = "REMOTE_KICKED_BY_OTHER_CALL";
  76. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_IN_OTHER_CALL"] = 24] = "REMOTE_IN_OTHER_CALL";
  77. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REMOTE_KICKED_BY_SERVER"] = 25] = "REMOTE_KICKED_BY_SERVER";
  78. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["ACCEPT_BY_OTHER_CLIENT"] = 26] = "ACCEPT_BY_OTHER_CLIENT";
  79. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["HANGUP_BY_OTHER_CLIENT"] = 27] = "HANGUP_BY_OTHER_CLIENT";
  80. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["REJECTED_BY_BLACKLIST"] = 28] = "REJECTED_BY_BLACKLIST";
  81. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["SERVICE_NOT_OPENED"] = 29] = "SERVICE_NOT_OPENED";
  82. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["DROP_TO_OBSERVER"] = 30] = "DROP_TO_OBSERVER";
  83. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["INIT_VIDEO_ERROR"] = 31] = "INIT_VIDEO_ERROR";
  84. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["OTHER_DEVICE_HAD_ACCEPTED"] = 32] = "OTHER_DEVICE_HAD_ACCEPTED";
  85. RCCallIWCallDisconnectedReason[RCCallIWCallDisconnectedReason["SERVICE_DISCONNECTED"] = 33] = "SERVICE_DISCONNECTED";
  86. })(exports.RCCallIWCallDisconnectedReason || (exports.RCCallIWCallDisconnectedReason = {}));
  87. exports.RCCallIWBeautyFilterType = void 0;
  88. (function (RCCallIWBeautyFilterType) {
  89. RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["NONE"] = 0] = "NONE";
  90. RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["ESTHETIC"] = 1] = "ESTHETIC";
  91. RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["FRESH"] = 2] = "FRESH";
  92. RCCallIWBeautyFilterType[RCCallIWBeautyFilterType["ROMANTIC"] = 3] = "ROMANTIC";
  93. })(exports.RCCallIWBeautyFilterType || (exports.RCCallIWBeautyFilterType = {}));
  94. const call = uni.requireNativePlugin('RongCloud-Call-RCUniCall');
  95. const Platform = uni.getSystemInfoSync().platform;
  96. logger.log('已进入index.js');
  97. function init() {
  98. logger.log(`init Platform->${Platform}`);
  99. call.init({});
  100. }
  101. function unInit() {
  102. logger.log(`unInit Platform->${Platform}`);
  103. call.unInit();
  104. }
  105. function onCallReceived(listener) {
  106. logger.log(`Engine:OnCallReceived 监听通话呼入 Platform->${Platform}`);
  107. call.addEventListener("Engine:OnCallReceived", listener);
  108. }
  109. function onCallDisconnected(listener) {
  110. logger.log(`Engine:OnCallDisconnected 监听通话结束 Platform->${Platform}`);
  111. call.addEventListener("Engine:OnCallDisconnected", listener);
  112. }
  113. function onCallConnected(listener) {
  114. logger.log(`Engine:OnCallConnected 已建立通话通话接通 Platform->${Platform}`);
  115. call.addEventListener("Engine:OnCallConnected", listener);
  116. }
  117. function onRemoteUserInvited(listener) {
  118. logger.log(`Engine:OnRemoteUserInvited 通话中的某一个参与者,邀请好友加入通话 Platform->${Platform}`);
  119. call.addEventListener("Engine:OnRemoteUserInvited", listener);
  120. }
  121. function onRemoteUserJoined(listener) {
  122. logger.log(`Engine:OnRemoteUserJoined 对端用户加入通话 Platform->${Platform}`);
  123. call.addEventListener("Engine:OnRemoteUserJoined", listener);
  124. }
  125. function onRemoteUserLeft(listener) {
  126. logger.log(`Engine:OnRemoteUserLeft 对端用户挂断(群聊触发) Platform->${Platform}`);
  127. call.addEventListener("Engine:OnRemoteUserLeft", listener);
  128. }
  129. function onCallOutgoing(listener) {
  130. logger.log(`Engine:OnCallOutgoing 电话已拨出,通知当前 call 的详细信息 Platform->${Platform}`);
  131. call.addEventListener("Engine:OnCallOutgoing", listener);
  132. }
  133. function onRemoteUserRinging(listener) {
  134. logger.log(`Engine:OnRemoteUserRinging 被叫端收到请求,发出振铃响应时监听 Platform->${Platform}`);
  135. call.addEventListener("Engine:OnRemoteUserRinging", listener);
  136. }
  137. function onError(listener) {
  138. logger.log(`Engine:OnError 通话出现错误 Platform->${Platform}`);
  139. call.addEventListener("Engine:OnError", listener);
  140. }
  141. function onRemoteUserMediaTypeChanged(listener) {
  142. logger.log(`Engine:OnRemoteUserMediaTypeChanged 对端用户切换了媒体类型 Platform->${Platform}`);
  143. call.addEventListener("Engine:OnRemoteUserMediaTypeChanged", listener);
  144. }
  145. function onRemoteUserCameraStateChanged(listener) {
  146. logger.log(`Engine:OnRemoteUserCameraStateChanged 对端用户关闭了摄像头 Platform->${Platform}`);
  147. call.addEventListener("Engine:OnRemoteUserCameraStateChanged", listener);
  148. }
  149. function onRemoteUserMicrophoneStateChanged(listener) {
  150. logger.log(`Engine:OnRemoteUserMicrophoneStateChanged 对端用户关闭了麦克风 Platform->${Platform}`);
  151. call.addEventListener("Engine:OnRemoteUserMicrophoneStateChanged", listener);
  152. }
  153. function inviteUsers(userIds, observerUserIds) {
  154. logger.log(`inviteUsers 邀请用户->${userIds} Platform->${Platform}`);
  155. call.inviteUsers(userIds, observerUserIds);
  156. }
  157. function removeCallReceivedListener() {
  158. logger.log(`removeCallReceivedListener`);
  159. call.removeAllEventListeners('Engine:OnCallReceived');
  160. }
  161. function removeCallConnectedListener() {
  162. logger.log(`removeCallConnectedListener`);
  163. call.removeAllEventListeners('Engine:OnCallConnected');
  164. }
  165. function removeCallDisconnectedListener() {
  166. logger.log(`removeCallDisconnectedListener`);
  167. call.removeAllEventListeners('Engine:OnCallDisconnected');
  168. }
  169. function removeRemoteUserJoinedListener() {
  170. logger.log(`removeRemoteUserJoinedListener`);
  171. call.removeAllEventListeners('Engine:OnRemoteUserJoined');
  172. }
  173. function removeRemoteUserLeftListener() {
  174. logger.log(`removeRemoteUserLeftListener`);
  175. call.removeAllEventListeners('Engine:OnRemoteUserLeft');
  176. }
  177. function removeRemoteUserInvited() {
  178. logger.log(`removeRemoteUserInvited`);
  179. call.removeAllEventListeners('Engine:OnRemoteUserInvited');
  180. }
  181. function removeEnableCameraListener() {
  182. logger.log(`removeEnableCameraListener`);
  183. call.removeAllEventListeners('Engine:OnEnableCamera');
  184. }
  185. function removeSwitchCameraListener() {
  186. logger.log(`removeSwitchCameraListener`);
  187. call.removeAllEventListeners('Engine:OnSwitchCamera');
  188. }
  189. function removeErrorListener() {
  190. logger.log(`removeErrorListener`);
  191. call.removeAllEventListeners('Engine:OnError');
  192. }
  193. function removeCallOutgoingListener() {
  194. logger.log(`removeCallOutgoingListener`);
  195. call.removeAllEventListeners('Engine:OnCallOutgoing');
  196. }
  197. function removeRemoteUserRingingListener() {
  198. logger.log(`removeRemoteUserRingingListener`);
  199. call.removeAllEventListeners('Engine:OnRemoteUserRinging');
  200. }
  201. function removeRemoteUserMediaTypeChangedListener() {
  202. logger.log(`removeRemoteUserMediaTypeChangedListener`);
  203. call.removeAllEventListeners('Engine:OnRemoteUserMediaTypeChanged');
  204. }
  205. function getCurrentCallSession() {
  206. logger.log(`getCurrentCallSession Platform->${Platform}`);
  207. return call.getCurrentCallSession();
  208. }
  209. function hangup() {
  210. logger.log(`hangup Platform->${Platform}`);
  211. call.hangup();
  212. }
  213. function accept() {
  214. logger.log(`accept Platform->${Platform}`);
  215. call.accept();
  216. }
  217. function startSingleCall(targetId, type, extra) {
  218. logger.log(`startSingleCall targetId->${targetId} type=>${type} extra=>${extra} Platform->${Platform}`);
  219. call.startSingleCall(targetId, type, extra);
  220. }
  221. function startGroupCall(groupId, userIds, observerUserIds, type, extra) {
  222. logger.log(`startGroupCall groupId->${groupId} userIds=>${userIds} observerUserIds=>${observerUserIds} type=>${type} extra=>${extra} Platform->${Platform}`);
  223. call.startGroupCall(groupId, userIds, observerUserIds, type, extra);
  224. }
  225. function setVideoView(userId, ref, type, isZOrderOnTop = false) {
  226. logger.log(`setVideoView userId->${userId} ref=>${ref} type=>${type} isZOrderOnTop=>${isZOrderOnTop} Platform->${Platform}`);
  227. Platform === 'android' ? call.setVideoView(userId, ref, type, isZOrderOnTop) : call.setVideoView(userId, ref, type);
  228. }
  229. function enableSpeaker(isOpen) {
  230. logger.log(`enableSpeaker isOPen->${isOpen} Platform->${Platform}`);
  231. call.enableSpeaker(isOpen);
  232. }
  233. function enableMicrophone(isOpen) {
  234. logger.log(`enableMicrophone isOPen->${isOpen} Platform->${Platform}`);
  235. call.enableMicrophone(isOpen);
  236. }
  237. function switchCamera() {
  238. logger.log(`switchCamera Platform->${Platform}`);
  239. call.switchCamera();
  240. }
  241. function currentCamera() {
  242. logger.log(`currentCamera Platform->${Platform}`);
  243. return call.currentCamera();
  244. }
  245. function enableCamera(isOpen, camera) {
  246. logger.log(`enableCamera isOpen=>${isOpen} camera=>${camera} Platform->${Platform}`);
  247. call.enableCamera(isOpen, camera);
  248. }
  249. function changeMediaType(type) {
  250. logger.log(`changeMediaType type=>${type} Platform->${Platform}`);
  251. call.changeMediaType(type);
  252. }
  253. function setBeautyFilter(filter) {
  254. logger.log(`setBeautyFilter filter=>${filter} Platform->${Platform}`);
  255. call.setBeautyFilter(filter);
  256. }
  257. function getCurrentBeautyFilter() {
  258. logger.log(`getCurrentBeautyFilter Platform->${Platform}`);
  259. return call.getCurrentBeautyFilter();
  260. }
  261. function setBeautyOption(enable = false, option) {
  262. logger.log(`setBeautyOption enable=>${enable} option=>${option} Platform->${Platform}`);
  263. call.setBeautyOption(enable, option);
  264. }
  265. function getCurrentBeautyOption() {
  266. logger.log(`getCurrentBeautyOption Platform->${Platform}`);
  267. return call.getCurrentBeautyOption();
  268. }
  269. function resetBeauty() {
  270. logger.log(`resetBeauty Platform->${Platform}`);
  271. call.resetBeauty();
  272. }
  273. exports.accept = accept;
  274. exports.changeMediaType = changeMediaType;
  275. exports.currentCamera = currentCamera;
  276. exports.enableCamera = enableCamera;
  277. exports.enableMicrophone = enableMicrophone;
  278. exports.enableSpeaker = enableSpeaker;
  279. exports.getCurrentBeautyFilter = getCurrentBeautyFilter;
  280. exports.getCurrentBeautyOption = getCurrentBeautyOption;
  281. exports.getCurrentCallSession = getCurrentCallSession;
  282. exports.hangup = hangup;
  283. exports.init = init;
  284. exports.inviteUsers = inviteUsers;
  285. exports.onCallConnected = onCallConnected;
  286. exports.onCallDisconnected = onCallDisconnected;
  287. exports.onCallOutgoing = onCallOutgoing;
  288. exports.onCallReceived = onCallReceived;
  289. exports.onError = onError;
  290. exports.onRemoteUserCameraStateChanged = onRemoteUserCameraStateChanged;
  291. exports.onRemoteUserInvited = onRemoteUserInvited;
  292. exports.onRemoteUserJoined = onRemoteUserJoined;
  293. exports.onRemoteUserLeft = onRemoteUserLeft;
  294. exports.onRemoteUserMediaTypeChanged = onRemoteUserMediaTypeChanged;
  295. exports.onRemoteUserMicrophoneStateChanged = onRemoteUserMicrophoneStateChanged;
  296. exports.onRemoteUserRinging = onRemoteUserRinging;
  297. exports.removeCallConnectedListener = removeCallConnectedListener;
  298. exports.removeCallDisconnectedListener = removeCallDisconnectedListener;
  299. exports.removeCallOutgoingListener = removeCallOutgoingListener;
  300. exports.removeCallReceivedListener = removeCallReceivedListener;
  301. exports.removeEnableCameraListener = removeEnableCameraListener;
  302. exports.removeErrorListener = removeErrorListener;
  303. exports.removeRemoteUserInvited = removeRemoteUserInvited;
  304. exports.removeRemoteUserJoinedListener = removeRemoteUserJoinedListener;
  305. exports.removeRemoteUserLeftListener = removeRemoteUserLeftListener;
  306. exports.removeRemoteUserMediaTypeChangedListener = removeRemoteUserMediaTypeChangedListener;
  307. exports.removeRemoteUserRingingListener = removeRemoteUserRingingListener;
  308. exports.removeSwitchCameraListener = removeSwitchCameraListener;
  309. exports.resetBeauty = resetBeauty;
  310. exports.setBeautyFilter = setBeautyFilter;
  311. exports.setBeautyOption = setBeautyOption;
  312. exports.setVideoView = setVideoView;
  313. exports.startGroupCall = startGroupCall;
  314. exports.startSingleCall = startSingleCall;
  315. exports.switchCamera = switchCamera;
  316. exports.unInit = unInit;