@sbhjt-gr/react-native-webrtc 124.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (417) hide show
  1. package/.clang-format +11 -0
  2. package/.claude/settings.local.json +9 -0
  3. package/.eslintignore +6 -0
  4. package/.nvmrc +1 -0
  5. package/ISSUE_TEMPLATE.md +40 -0
  6. package/LICENSE +22 -0
  7. package/README.md +103 -0
  8. package/android/build.gradle +37 -0
  9. package/android/consumer-rules.pro +3 -0
  10. package/android/src/main/AndroidManifest.xml +11 -0
  11. package/android/src/main/java/com/oney/WebRTCModule/AbstractVideoCaptureController.java +113 -0
  12. package/android/src/main/java/com/oney/WebRTCModule/CameraCaptureController.java +338 -0
  13. package/android/src/main/java/com/oney/WebRTCModule/CameraEventsHandler.java +49 -0
  14. package/android/src/main/java/com/oney/WebRTCModule/DataChannelWrapper.java +99 -0
  15. package/android/src/main/java/com/oney/WebRTCModule/DataPacketCryptorManager.java +63 -0
  16. package/android/src/main/java/com/oney/WebRTCModule/DisplayUtils.java +16 -0
  17. package/android/src/main/java/com/oney/WebRTCModule/EglUtils.java +66 -0
  18. package/android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java +539 -0
  19. package/android/src/main/java/com/oney/WebRTCModule/LibraryLoader.java +21 -0
  20. package/android/src/main/java/com/oney/WebRTCModule/MediaProjectionNotification.java +70 -0
  21. package/android/src/main/java/com/oney/WebRTCModule/MediaProjectionService.java +82 -0
  22. package/android/src/main/java/com/oney/WebRTCModule/PeerConnectionObserver.java +588 -0
  23. package/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java +493 -0
  24. package/android/src/main/java/com/oney/WebRTCModule/RTCVideoViewManager.java +98 -0
  25. package/android/src/main/java/com/oney/WebRTCModule/ReactBridgeUtil.java +36 -0
  26. package/android/src/main/java/com/oney/WebRTCModule/ScreenCaptureController.java +94 -0
  27. package/android/src/main/java/com/oney/WebRTCModule/SerializeUtils.java +342 -0
  28. package/android/src/main/java/com/oney/WebRTCModule/StringUtils.java +101 -0
  29. package/android/src/main/java/com/oney/WebRTCModule/ThreadUtils.java +41 -0
  30. package/android/src/main/java/com/oney/WebRTCModule/TrackCapturerEventsEmitter.java +34 -0
  31. package/android/src/main/java/com/oney/WebRTCModule/VideoTrackAdapter.java +137 -0
  32. package/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java +1643 -0
  33. package/android/src/main/java/com/oney/WebRTCModule/WebRTCModuleOptions.java +33 -0
  34. package/android/src/main/java/com/oney/WebRTCModule/WebRTCModulePackage.java +21 -0
  35. package/android/src/main/java/com/oney/WebRTCModule/WebRTCView.java +583 -0
  36. package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraClient.java +464 -0
  37. package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraConfig.java +17 -0
  38. package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraListener.java +7 -0
  39. package/android/src/main/java/com/oney/WebRTCModule/videoEffects/ProcessorProvider.java +38 -0
  40. package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoEffectProcessor.java +59 -0
  41. package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoFrameProcessor.java +19 -0
  42. package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoFrameProcessorFactoryInterface.java +12 -0
  43. package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/H264AndSoftwareVideoDecoderFactory.java +73 -0
  44. package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/H264AndSoftwareVideoEncoderFactory.java +73 -0
  45. package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/SoftwareVideoDecoderFactoryProxy.java +36 -0
  46. package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/SoftwareVideoEncoderFactoryProxy.java +36 -0
  47. package/android/src/main/java/org/webrtc/Camera1Helper.java +54 -0
  48. package/android/src/main/java/org/webrtc/Camera2Helper.java +52 -0
  49. package/android/src/main/res/values/strings.xml +5 -0
  50. package/android/src/main/res/values/styles.xml +8 -0
  51. package/apple/.placeholder +0 -0
  52. package/ios/RCTWebRTC/CaptureController.h +18 -0
  53. package/ios/RCTWebRTC/CaptureController.m +29 -0
  54. package/ios/RCTWebRTC/CapturerEventsDelegate.h +12 -0
  55. package/ios/RCTWebRTC/DataChannelWrapper.h +27 -0
  56. package/ios/RCTWebRTC/DataChannelWrapper.m +42 -0
  57. package/ios/RCTWebRTC/I420Converter.h +22 -0
  58. package/ios/RCTWebRTC/I420Converter.m +164 -0
  59. package/ios/RCTWebRTC/PIPController.h +24 -0
  60. package/ios/RCTWebRTC/PIPController.m +234 -0
  61. package/ios/RCTWebRTC/PalabraAudioSink.h +13 -0
  62. package/ios/RCTWebRTC/PalabraAudioSink.m +18 -0
  63. package/ios/RCTWebRTC/PalabraClient.h +36 -0
  64. package/ios/RCTWebRTC/PalabraClient.m +584 -0
  65. package/ios/RCTWebRTC/RCTConvert+WebRTC.h +16 -0
  66. package/ios/RCTWebRTC/RCTConvert+WebRTC.m +206 -0
  67. package/ios/RCTWebRTC/RTCMediaStreamTrack+React.h +10 -0
  68. package/ios/RCTWebRTC/RTCMediaStreamTrack+React.m +16 -0
  69. package/ios/RCTWebRTC/RTCVideoViewManager.h +29 -0
  70. package/ios/RCTWebRTC/RTCVideoViewManager.m +411 -0
  71. package/ios/RCTWebRTC/SampleBufferVideoCallView.h +12 -0
  72. package/ios/RCTWebRTC/SampleBufferVideoCallView.m +178 -0
  73. package/ios/RCTWebRTC/ScreenCaptureController.h +20 -0
  74. package/ios/RCTWebRTC/ScreenCaptureController.m +83 -0
  75. package/ios/RCTWebRTC/ScreenCapturePickerViewManager.h +7 -0
  76. package/ios/RCTWebRTC/ScreenCapturePickerViewManager.m +60 -0
  77. package/ios/RCTWebRTC/ScreenCapturer.h +19 -0
  78. package/ios/RCTWebRTC/ScreenCapturer.m +264 -0
  79. package/ios/RCTWebRTC/SerializeUtils.h +28 -0
  80. package/ios/RCTWebRTC/SerializeUtils.m +314 -0
  81. package/ios/RCTWebRTC/SocketConnection.h +13 -0
  82. package/ios/RCTWebRTC/SocketConnection.m +137 -0
  83. package/ios/RCTWebRTC/TrackCapturerEventsEmitter.h +14 -0
  84. package/ios/RCTWebRTC/TrackCapturerEventsEmitter.m +37 -0
  85. package/ios/RCTWebRTC/VideoCaptureController.h +21 -0
  86. package/ios/RCTWebRTC/VideoCaptureController.m +328 -0
  87. package/ios/RCTWebRTC/WebRTCModule+Palabra.h +4 -0
  88. package/ios/RCTWebRTC/WebRTCModule+Palabra.m +83 -0
  89. package/ios/RCTWebRTC/WebRTCModule+Permissions.m +75 -0
  90. package/ios/RCTWebRTC/WebRTCModule+RTCAudioSession.m +20 -0
  91. package/ios/RCTWebRTC/WebRTCModule+RTCDataChannel.h +14 -0
  92. package/ios/RCTWebRTC/WebRTCModule+RTCDataChannel.m +165 -0
  93. package/ios/RCTWebRTC/WebRTCModule+RTCFrameCryptor.m +611 -0
  94. package/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.h +14 -0
  95. package/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m +533 -0
  96. package/ios/RCTWebRTC/WebRTCModule+RTCPeerConnection.h +24 -0
  97. package/ios/RCTWebRTC/WebRTCModule+RTCPeerConnection.m +1004 -0
  98. package/ios/RCTWebRTC/WebRTCModule+Transceivers.m +267 -0
  99. package/ios/RCTWebRTC/WebRTCModule+VideoTrackAdapter.h +12 -0
  100. package/ios/RCTWebRTC/WebRTCModule+VideoTrackAdapter.m +166 -0
  101. package/ios/RCTWebRTC/WebRTCModule.h +51 -0
  102. package/ios/RCTWebRTC/WebRTCModule.m +151 -0
  103. package/ios/RCTWebRTC/WebRTCModuleOptions.h +24 -0
  104. package/ios/RCTWebRTC/WebRTCModuleOptions.m +31 -0
  105. package/ios/RCTWebRTC/videoEffects/ProcessorProvider.h +9 -0
  106. package/ios/RCTWebRTC/videoEffects/ProcessorProvider.m +23 -0
  107. package/ios/RCTWebRTC/videoEffects/VideoEffectProcessor.h +13 -0
  108. package/ios/RCTWebRTC/videoEffects/VideoEffectProcessor.m +23 -0
  109. package/ios/RCTWebRTC/videoEffects/VideoFrameProcessor.h +8 -0
  110. package/ios/RCTWebRTC.xcodeproj/project.pbxproj +404 -0
  111. package/ios/RCTWebRTC.xcworkspace/contents.xcworkspacedata +10 -0
  112. package/lib/commonjs/Constraints.js +2 -0
  113. package/lib/commonjs/Constraints.js.map +1 -0
  114. package/lib/commonjs/EventEmitter.js +51 -0
  115. package/lib/commonjs/EventEmitter.js.map +1 -0
  116. package/lib/commonjs/Logger.js +47 -0
  117. package/lib/commonjs/Logger.js.map +1 -0
  118. package/lib/commonjs/MediaDevices.js +54 -0
  119. package/lib/commonjs/MediaDevices.js.map +1 -0
  120. package/lib/commonjs/MediaStream.js +137 -0
  121. package/lib/commonjs/MediaStream.js.map +1 -0
  122. package/lib/commonjs/MediaStreamError.js +19 -0
  123. package/lib/commonjs/MediaStreamError.js.map +1 -0
  124. package/lib/commonjs/MediaStreamErrorEvent.js +17 -0
  125. package/lib/commonjs/MediaStreamErrorEvent.js.map +1 -0
  126. package/lib/commonjs/MediaStreamTrack.js +203 -0
  127. package/lib/commonjs/MediaStreamTrack.js.map +1 -0
  128. package/lib/commonjs/MediaStreamTrackEvent.js +26 -0
  129. package/lib/commonjs/MediaStreamTrackEvent.js.map +1 -0
  130. package/lib/commonjs/MessageEvent.js +27 -0
  131. package/lib/commonjs/MessageEvent.js.map +1 -0
  132. package/lib/commonjs/Permissions.js +116 -0
  133. package/lib/commonjs/Permissions.js.map +1 -0
  134. package/lib/commonjs/RTCAudioSession.js +33 -0
  135. package/lib/commonjs/RTCAudioSession.js.map +1 -0
  136. package/lib/commonjs/RTCDataChannel.js +165 -0
  137. package/lib/commonjs/RTCDataChannel.js.map +1 -0
  138. package/lib/commonjs/RTCDataChannelEvent.js +26 -0
  139. package/lib/commonjs/RTCDataChannelEvent.js.map +1 -0
  140. package/lib/commonjs/RTCDataPacketCryptor.js +76 -0
  141. package/lib/commonjs/RTCDataPacketCryptor.js.map +1 -0
  142. package/lib/commonjs/RTCDataPacketCryptorFactory.js +27 -0
  143. package/lib/commonjs/RTCDataPacketCryptorFactory.js.map +1 -0
  144. package/lib/commonjs/RTCErrorEvent.js +23 -0
  145. package/lib/commonjs/RTCErrorEvent.js.map +1 -0
  146. package/lib/commonjs/RTCFrameCryptor.js +138 -0
  147. package/lib/commonjs/RTCFrameCryptor.js.map +1 -0
  148. package/lib/commonjs/RTCFrameCryptorFactory.js +81 -0
  149. package/lib/commonjs/RTCFrameCryptorFactory.js.map +1 -0
  150. package/lib/commonjs/RTCIceCandidate.js +34 -0
  151. package/lib/commonjs/RTCIceCandidate.js.map +1 -0
  152. package/lib/commonjs/RTCIceCandidateEvent.js +28 -0
  153. package/lib/commonjs/RTCIceCandidateEvent.js.map +1 -0
  154. package/lib/commonjs/RTCKeyProvider.js +111 -0
  155. package/lib/commonjs/RTCKeyProvider.js.map +1 -0
  156. package/lib/commonjs/RTCPIPView.js +38 -0
  157. package/lib/commonjs/RTCPIPView.js.map +1 -0
  158. package/lib/commonjs/RTCPIPView.web.js +23 -0
  159. package/lib/commonjs/RTCPIPView.web.js.map +1 -0
  160. package/lib/commonjs/RTCPeerConnection.js +694 -0
  161. package/lib/commonjs/RTCPeerConnection.js.map +1 -0
  162. package/lib/commonjs/RTCRtcpParameters.js +24 -0
  163. package/lib/commonjs/RTCRtcpParameters.js.map +1 -0
  164. package/lib/commonjs/RTCRtpCapabilities.js +22 -0
  165. package/lib/commonjs/RTCRtpCapabilities.js.map +1 -0
  166. package/lib/commonjs/RTCRtpCodecCapability.js +19 -0
  167. package/lib/commonjs/RTCRtpCodecCapability.js.map +1 -0
  168. package/lib/commonjs/RTCRtpCodecParameters.js +38 -0
  169. package/lib/commonjs/RTCRtpCodecParameters.js.map +1 -0
  170. package/lib/commonjs/RTCRtpEncodingParameters.js +78 -0
  171. package/lib/commonjs/RTCRtpEncodingParameters.js.map +1 -0
  172. package/lib/commonjs/RTCRtpHeaderExtension.js +27 -0
  173. package/lib/commonjs/RTCRtpHeaderExtension.js.map +1 -0
  174. package/lib/commonjs/RTCRtpParameters.js +35 -0
  175. package/lib/commonjs/RTCRtpParameters.js.map +1 -0
  176. package/lib/commonjs/RTCRtpReceiveParameters.js +15 -0
  177. package/lib/commonjs/RTCRtpReceiveParameters.js.map +1 -0
  178. package/lib/commonjs/RTCRtpReceiver.js +53 -0
  179. package/lib/commonjs/RTCRtpReceiver.js.map +1 -0
  180. package/lib/commonjs/RTCRtpSendParameters.js +49 -0
  181. package/lib/commonjs/RTCRtpSendParameters.js.map +1 -0
  182. package/lib/commonjs/RTCRtpSender.js +67 -0
  183. package/lib/commonjs/RTCRtpSender.js.map +1 -0
  184. package/lib/commonjs/RTCRtpTransceiver.js +81 -0
  185. package/lib/commonjs/RTCRtpTransceiver.js.map +1 -0
  186. package/lib/commonjs/RTCSessionDescription.js +33 -0
  187. package/lib/commonjs/RTCSessionDescription.js.map +1 -0
  188. package/lib/commonjs/RTCTrackEvent.js +38 -0
  189. package/lib/commonjs/RTCTrackEvent.js.map +1 -0
  190. package/lib/commonjs/RTCUtil.js +186 -0
  191. package/lib/commonjs/RTCUtil.js.map +1 -0
  192. package/lib/commonjs/RTCView.js +16 -0
  193. package/lib/commonjs/RTCView.js.map +1 -0
  194. package/lib/commonjs/RTCView.web.js +62 -0
  195. package/lib/commonjs/RTCView.web.js.map +1 -0
  196. package/lib/commonjs/ScreenCapturePickerView.js +10 -0
  197. package/lib/commonjs/ScreenCapturePickerView.js.map +1 -0
  198. package/lib/commonjs/ScreenCapturePickerView.web.js +10 -0
  199. package/lib/commonjs/ScreenCapturePickerView.web.js.map +1 -0
  200. package/lib/commonjs/getDisplayMedia.js +33 -0
  201. package/lib/commonjs/getDisplayMedia.js.map +1 -0
  202. package/lib/commonjs/getUserMedia.js +101 -0
  203. package/lib/commonjs/getUserMedia.js.map +1 -0
  204. package/lib/commonjs/index.js +224 -0
  205. package/lib/commonjs/index.js.map +1 -0
  206. package/lib/commonjs/index.web.js +175 -0
  207. package/lib/commonjs/index.web.js.map +1 -0
  208. package/lib/commonjs/webStream.js +35 -0
  209. package/lib/commonjs/webStream.js.map +1 -0
  210. package/lib/module/Constraints.js +2 -0
  211. package/lib/module/Constraints.js.map +1 -0
  212. package/lib/module/EventEmitter.js +41 -0
  213. package/lib/module/EventEmitter.js.map +1 -0
  214. package/lib/module/Logger.js +39 -0
  215. package/lib/module/Logger.js.map +1 -0
  216. package/lib/module/MediaDevices.js +46 -0
  217. package/lib/module/MediaDevices.js.map +1 -0
  218. package/lib/module/MediaStream.js +129 -0
  219. package/lib/module/MediaStream.js.map +1 -0
  220. package/lib/module/MediaStreamError.js +12 -0
  221. package/lib/module/MediaStreamError.js.map +1 -0
  222. package/lib/module/MediaStreamErrorEvent.js +10 -0
  223. package/lib/module/MediaStreamErrorEvent.js.map +1 -0
  224. package/lib/module/MediaStreamTrack.js +195 -0
  225. package/lib/module/MediaStreamTrack.js.map +1 -0
  226. package/lib/module/MediaStreamTrackEvent.js +19 -0
  227. package/lib/module/MediaStreamTrackEvent.js.map +1 -0
  228. package/lib/module/MessageEvent.js +20 -0
  229. package/lib/module/MessageEvent.js.map +1 -0
  230. package/lib/module/Permissions.js +109 -0
  231. package/lib/module/Permissions.js.map +1 -0
  232. package/lib/module/RTCAudioSession.js +26 -0
  233. package/lib/module/RTCAudioSession.js.map +1 -0
  234. package/lib/module/RTCDataChannel.js +155 -0
  235. package/lib/module/RTCDataChannel.js.map +1 -0
  236. package/lib/module/RTCDataChannelEvent.js +19 -0
  237. package/lib/module/RTCDataChannelEvent.js.map +1 -0
  238. package/lib/module/RTCDataPacketCryptor.js +66 -0
  239. package/lib/module/RTCDataPacketCryptor.js.map +1 -0
  240. package/lib/module/RTCDataPacketCryptorFactory.js +19 -0
  241. package/lib/module/RTCDataPacketCryptorFactory.js.map +1 -0
  242. package/lib/module/RTCErrorEvent.js +16 -0
  243. package/lib/module/RTCErrorEvent.js.map +1 -0
  244. package/lib/module/RTCFrameCryptor.js +128 -0
  245. package/lib/module/RTCFrameCryptor.js.map +1 -0
  246. package/lib/module/RTCFrameCryptorFactory.js +70 -0
  247. package/lib/module/RTCFrameCryptorFactory.js.map +1 -0
  248. package/lib/module/RTCIceCandidate.js +27 -0
  249. package/lib/module/RTCIceCandidate.js.map +1 -0
  250. package/lib/module/RTCIceCandidateEvent.js +21 -0
  251. package/lib/module/RTCIceCandidateEvent.js.map +1 -0
  252. package/lib/module/RTCKeyProvider.js +101 -0
  253. package/lib/module/RTCKeyProvider.js.map +1 -0
  254. package/lib/module/RTCPIPView.js +26 -0
  255. package/lib/module/RTCPIPView.js.map +1 -0
  256. package/lib/module/RTCPIPView.web.js +11 -0
  257. package/lib/module/RTCPIPView.web.js.map +1 -0
  258. package/lib/module/RTCPeerConnection.js +684 -0
  259. package/lib/module/RTCPeerConnection.js.map +1 -0
  260. package/lib/module/RTCRtcpParameters.js +17 -0
  261. package/lib/module/RTCRtcpParameters.js.map +1 -0
  262. package/lib/module/RTCRtpCapabilities.js +15 -0
  263. package/lib/module/RTCRtpCapabilities.js.map +1 -0
  264. package/lib/module/RTCRtpCodecCapability.js +12 -0
  265. package/lib/module/RTCRtpCodecCapability.js.map +1 -0
  266. package/lib/module/RTCRtpCodecParameters.js +31 -0
  267. package/lib/module/RTCRtpCodecParameters.js.map +1 -0
  268. package/lib/module/RTCRtpEncodingParameters.js +71 -0
  269. package/lib/module/RTCRtpEncodingParameters.js.map +1 -0
  270. package/lib/module/RTCRtpHeaderExtension.js +20 -0
  271. package/lib/module/RTCRtpHeaderExtension.js.map +1 -0
  272. package/lib/module/RTCRtpParameters.js +27 -0
  273. package/lib/module/RTCRtpParameters.js.map +1 -0
  274. package/lib/module/RTCRtpReceiveParameters.js +7 -0
  275. package/lib/module/RTCRtpReceiveParameters.js.map +1 -0
  276. package/lib/module/RTCRtpReceiver.js +45 -0
  277. package/lib/module/RTCRtpReceiver.js.map +1 -0
  278. package/lib/module/RTCRtpSendParameters.js +41 -0
  279. package/lib/module/RTCRtpSendParameters.js.map +1 -0
  280. package/lib/module/RTCRtpSender.js +59 -0
  281. package/lib/module/RTCRtpSender.js.map +1 -0
  282. package/lib/module/RTCRtpTransceiver.js +74 -0
  283. package/lib/module/RTCRtpTransceiver.js.map +1 -0
  284. package/lib/module/RTCSessionDescription.js +26 -0
  285. package/lib/module/RTCSessionDescription.js.map +1 -0
  286. package/lib/module/RTCTrackEvent.js +31 -0
  287. package/lib/module/RTCTrackEvent.js.map +1 -0
  288. package/lib/module/RTCUtil.js +176 -0
  289. package/lib/module/RTCUtil.js.map +1 -0
  290. package/lib/module/RTCView.js +11 -0
  291. package/lib/module/RTCView.js.map +1 -0
  292. package/lib/module/RTCView.web.js +54 -0
  293. package/lib/module/RTCView.web.js.map +1 -0
  294. package/lib/module/ScreenCapturePickerView.js +3 -0
  295. package/lib/module/ScreenCapturePickerView.js.map +1 -0
  296. package/lib/module/ScreenCapturePickerView.web.js +4 -0
  297. package/lib/module/ScreenCapturePickerView.web.js.map +1 -0
  298. package/lib/module/getDisplayMedia.js +26 -0
  299. package/lib/module/getDisplayMedia.js.map +1 -0
  300. package/lib/module/getUserMedia.js +92 -0
  301. package/lib/module/getUserMedia.js.map +1 -0
  302. package/lib/module/index.js +60 -0
  303. package/lib/module/index.js.map +1 -0
  304. package/lib/module/index.web.js +114 -0
  305. package/lib/module/index.web.js.map +1 -0
  306. package/lib/module/webStream.js +27 -0
  307. package/lib/module/webStream.js.map +1 -0
  308. package/lib/typescript/Constraints.d.ts +19 -0
  309. package/lib/typescript/EventEmitter.d.ts +6 -0
  310. package/lib/typescript/Logger.d.ts +13 -0
  311. package/lib/typescript/MediaDevices.d.ts +30 -0
  312. package/lib/typescript/MediaStream.d.ts +48 -0
  313. package/lib/typescript/MediaStreamError.d.ts +6 -0
  314. package/lib/typescript/MediaStreamErrorEvent.d.ts +6 -0
  315. package/lib/typescript/MediaStreamTrack.d.ts +101 -0
  316. package/lib/typescript/MediaStreamTrackEvent.d.ts +19 -0
  317. package/lib/typescript/MessageEvent.d.ts +20 -0
  318. package/lib/typescript/Permissions.d.ts +55 -0
  319. package/lib/typescript/RTCAudioSession.d.ts +10 -0
  320. package/lib/typescript/RTCDataChannel.d.ts +43 -0
  321. package/lib/typescript/RTCDataChannelEvent.d.ts +19 -0
  322. package/lib/typescript/RTCDataPacketCryptor.d.ts +12 -0
  323. package/lib/typescript/RTCDataPacketCryptorFactory.d.ts +6 -0
  324. package/lib/typescript/RTCErrorEvent.d.ts +12 -0
  325. package/lib/typescript/RTCFrameCryptor.d.ts +47 -0
  326. package/lib/typescript/RTCFrameCryptorFactory.d.ts +21 -0
  327. package/lib/typescript/RTCIceCandidate.d.ts +17 -0
  328. package/lib/typescript/RTCIceCandidateEvent.d.ts +20 -0
  329. package/lib/typescript/RTCKeyProvider.d.ts +21 -0
  330. package/lib/typescript/RTCPIPView.d.ts +15 -0
  331. package/lib/typescript/RTCPIPView.web.d.ts +13 -0
  332. package/lib/typescript/RTCPeerConnection.d.ts +117 -0
  333. package/lib/typescript/RTCRtcpParameters.d.ts +10 -0
  334. package/lib/typescript/RTCRtpCapabilities.d.ts +9 -0
  335. package/lib/typescript/RTCRtpCodecCapability.d.ts +7 -0
  336. package/lib/typescript/RTCRtpCodecParameters.d.ts +16 -0
  337. package/lib/typescript/RTCRtpEncodingParameters.d.ts +23 -0
  338. package/lib/typescript/RTCRtpHeaderExtension.d.ts +12 -0
  339. package/lib/typescript/RTCRtpParameters.d.ts +19 -0
  340. package/lib/typescript/RTCRtpReceiveParameters.d.ts +4 -0
  341. package/lib/typescript/RTCRtpReceiver.d.ts +21 -0
  342. package/lib/typescript/RTCRtpSendParameters.d.ts +20 -0
  343. package/lib/typescript/RTCRtpSender.d.ts +22 -0
  344. package/lib/typescript/RTCRtpTransceiver.d.ts +31 -0
  345. package/lib/typescript/RTCSessionDescription.d.ts +12 -0
  346. package/lib/typescript/RTCTrackEvent.d.ts +29 -0
  347. package/lib/typescript/RTCUtil.d.ts +37 -0
  348. package/lib/typescript/RTCView.d.ts +117 -0
  349. package/lib/typescript/RTCView.web.d.ts +25 -0
  350. package/lib/typescript/ScreenCapturePickerView.d.ts +2 -0
  351. package/lib/typescript/ScreenCapturePickerView.web.d.ts +1 -0
  352. package/lib/typescript/getDisplayMedia.d.ts +2 -0
  353. package/lib/typescript/getUserMedia.d.ts +7 -0
  354. package/lib/typescript/index.d.ts +22 -0
  355. package/lib/typescript/index.web.d.ts +101 -0
  356. package/lib/typescript/webStream.d.ts +3 -0
  357. package/livekit-react-native-webrtc.podspec +29 -0
  358. package/macos/RCTWebRTC.xcodeproj/project.pbxproj +324 -0
  359. package/macos/RCTWebRTC.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -0
  360. package/macos/RCTWebRTC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -0
  361. package/metro.config.js +7 -0
  362. package/metro.config.macos.js +14 -0
  363. package/package.json +66 -0
  364. package/react-native.config.js +11 -0
  365. package/src/.eslintrc.cjs +67 -0
  366. package/src/Constraints.ts +21 -0
  367. package/src/EventEmitter.ts +65 -0
  368. package/src/Logger.ts +49 -0
  369. package/src/MediaDevices.ts +53 -0
  370. package/src/MediaStream.ts +161 -0
  371. package/src/MediaStreamError.ts +12 -0
  372. package/src/MediaStreamErrorEvent.ts +11 -0
  373. package/src/MediaStreamTrack.ts +284 -0
  374. package/src/MediaStreamTrackEvent.ts +25 -0
  375. package/src/MessageEvent.ts +26 -0
  376. package/src/Permissions.ts +133 -0
  377. package/src/RTCAudioSession.ts +25 -0
  378. package/src/RTCDataChannel.ts +190 -0
  379. package/src/RTCDataChannelEvent.ts +28 -0
  380. package/src/RTCDataPacketCryptor.ts +90 -0
  381. package/src/RTCDataPacketCryptorFactory.ts +25 -0
  382. package/src/RTCErrorEvent.ts +21 -0
  383. package/src/RTCFrameCryptor.ts +163 -0
  384. package/src/RTCFrameCryptorFactory.ts +102 -0
  385. package/src/RTCIceCandidate.ts +29 -0
  386. package/src/RTCIceCandidateEvent.ts +26 -0
  387. package/src/RTCKeyProvider.ts +117 -0
  388. package/src/RTCPIPView.tsx +47 -0
  389. package/src/RTCPIPView.web.tsx +18 -0
  390. package/src/RTCPeerConnection.ts +832 -0
  391. package/src/RTCRtcpParameters.ts +23 -0
  392. package/src/RTCRtpCapabilities.ts +16 -0
  393. package/src/RTCRtpCodecCapability.ts +13 -0
  394. package/src/RTCRtpCodecParameters.ts +44 -0
  395. package/src/RTCRtpEncodingParameters.ts +90 -0
  396. package/src/RTCRtpHeaderExtension.ts +27 -0
  397. package/src/RTCRtpParameters.ts +37 -0
  398. package/src/RTCRtpReceiveParameters.ts +7 -0
  399. package/src/RTCRtpReceiver.ts +60 -0
  400. package/src/RTCRtpSendParameters.ts +63 -0
  401. package/src/RTCRtpSender.ts +78 -0
  402. package/src/RTCRtpTransceiver.ts +107 -0
  403. package/src/RTCSessionDescription.ts +30 -0
  404. package/src/RTCTrackEvent.ts +42 -0
  405. package/src/RTCUtil.ts +211 -0
  406. package/src/RTCView.ts +122 -0
  407. package/src/RTCView.web.tsx +82 -0
  408. package/src/ScreenCapturePickerView.ts +4 -0
  409. package/src/ScreenCapturePickerView.web.tsx +3 -0
  410. package/src/getDisplayMedia.ts +30 -0
  411. package/src/getUserMedia.ts +111 -0
  412. package/src/index.ts +107 -0
  413. package/src/index.web.ts +191 -0
  414. package/src/webStream.ts +33 -0
  415. package/tools/format.sh +6 -0
  416. package/tools/release.sh +45 -0
  417. package/tsconfig.json +17 -0
@@ -0,0 +1,533 @@
1
+ #import <objc/runtime.h>
2
+
3
+ #import <WebRTC/RTCCameraVideoCapturer.h>
4
+ #import <WebRTC/RTCMediaConstraints.h>
5
+ #import <WebRTC/RTCMediaStreamTrack.h>
6
+ #import <WebRTC/RTCVideoTrack.h>
7
+
8
+ #import "RTCMediaStreamTrack+React.h"
9
+ #import "WebRTCModule+RTCMediaStream.h"
10
+ #import "WebRTCModule+RTCPeerConnection.h"
11
+ #import "WebRTCModuleOptions.h"
12
+
13
+ #import "ProcessorProvider.h"
14
+ #import "ScreenCaptureController.h"
15
+ #import "ScreenCapturer.h"
16
+ #import "TrackCapturerEventsEmitter.h"
17
+ #import "VideoCaptureController.h"
18
+
19
+ @implementation WebRTCModule (RTCMediaStream)
20
+
21
+ - (VideoEffectProcessor *)videoEffectProcessor {
22
+ return objc_getAssociatedObject(self, _cmd);
23
+ }
24
+
25
+ - (void)setVideoEffectProcessor:(VideoEffectProcessor *)videoEffectProcessor {
26
+ objc_setAssociatedObject(
27
+ self, @selector(videoEffectProcessor), videoEffectProcessor, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
28
+ }
29
+
30
+ #pragma mark - getUserMedia
31
+
32
+ - (NSString *)convertBoolToString:(id)value {
33
+ return value ? @"true" : @"false";
34
+ }
35
+
36
+ /**
37
+ * Initializes a new {@link RTCAudioTrack} which satisfies the given constraints.
38
+ *
39
+ * @param constraints The {@code MediaStreamConstraints} which the new
40
+ * {@code RTCAudioTrack} instance is to satisfy.
41
+ */
42
+ - (RTCAudioTrack *)createAudioTrack:(NSDictionary *)constraints {
43
+ NSString *trackId = [[NSUUID UUID] UUIDString];
44
+ NSDictionary *audioConstraints = constraints[@"audio"];
45
+ NSMutableDictionary *optionalConstraints = [NSMutableDictionary dictionary];
46
+ optionalConstraints[@"googAutoGainControl"] = audioConstraints[@"autoGainControl"] != nil
47
+ ? [self convertBoolToString:audioConstraints[@"autoGainControl"]]
48
+ : @"true";
49
+ optionalConstraints[@"googNoiseSuppression"] =
50
+ audioConstraints[@"noiseSuppression"] != nil ? [self convertBoolToString:audioConstraints[@"noiseSuppression"]]
51
+ : @"true";
52
+ optionalConstraints[@"googEchoCancellation"] =
53
+ audioConstraints[@"echoCancellation"] != nil ? [self convertBoolToString:audioConstraints[@"echoCancellation"]]
54
+ : @"true";
55
+ optionalConstraints[@"googHighpassFilter"] = audioConstraints[@"highpassFilter"] != nil
56
+ ? [self convertBoolToString:audioConstraints[@"highpassFilter"]]
57
+ : @"true";
58
+
59
+ RTCMediaConstraints *mediaConstraints =
60
+ [[RTCMediaConstraints alloc] initWithMandatoryConstraints:nil optionalConstraints:optionalConstraints];
61
+
62
+ RTCAudioSource *audioSource = [self.peerConnectionFactory audioSourceWithConstraints:mediaConstraints];
63
+ RTCAudioTrack *audioTrack = [self.peerConnectionFactory audioTrackWithSource:audioSource trackId:trackId];
64
+ return audioTrack;
65
+ }
66
+ /**
67
+ * Initializes a new {@link RTCVideoTrack} with the given capture controller
68
+ */
69
+ - (RTCVideoTrack *)createVideoTrackWithCaptureController:
70
+ (CaptureController * (^)(RTCVideoSource *))captureControllerCreator {
71
+ #if TARGET_OS_TV
72
+ return nil;
73
+ #else
74
+
75
+ RTCVideoSource *videoSource = [self.peerConnectionFactory videoSource];
76
+
77
+ NSString *trackUUID = [[NSUUID UUID] UUIDString];
78
+ RTCVideoTrack *videoTrack = [self.peerConnectionFactory videoTrackWithSource:videoSource trackId:trackUUID];
79
+
80
+ CaptureController *captureController = captureControllerCreator(videoSource);
81
+ videoTrack.captureController = captureController;
82
+ [captureController startCapture];
83
+
84
+ return videoTrack;
85
+ #endif
86
+ }
87
+ /**
88
+ * Initializes a new {@link RTCMediaTrack} with the given tracks.
89
+ *
90
+ * @return An array with the mediaStreamId in index 0, and track infos in index 1.
91
+ */
92
+ - (NSArray *)createMediaStream:(NSArray<RTCMediaStreamTrack *> *)tracks {
93
+ #if TARGET_OS_TV
94
+ return nil;
95
+ #else
96
+ NSString *mediaStreamId = [[NSUUID UUID] UUIDString];
97
+ RTCMediaStream *mediaStream = [self.peerConnectionFactory mediaStreamWithStreamId:mediaStreamId];
98
+ NSMutableArray<NSDictionary *> *trackInfos = [NSMutableArray array];
99
+
100
+ for (RTCMediaStreamTrack *track in tracks) {
101
+ if ([track.kind isEqualToString:@"audio"]) {
102
+ [mediaStream addAudioTrack:(RTCAudioTrack *)track];
103
+ } else if ([track.kind isEqualToString:@"video"]) {
104
+ [mediaStream addVideoTrack:(RTCVideoTrack *)track];
105
+ }
106
+
107
+ NSString *trackId = track.trackId;
108
+
109
+ self.localTracks[trackId] = track;
110
+
111
+ NSDictionary *settings = @{};
112
+ if ([track.kind isEqualToString:@"video"]) {
113
+ RTCVideoTrack *videoTrack = (RTCVideoTrack *)track;
114
+ if ([videoTrack.captureController isKindOfClass:[CaptureController class]]) {
115
+ settings = [videoTrack.captureController getSettings];
116
+ }
117
+ } else if ([track.kind isEqualToString:@"audio"]) {
118
+ settings = @{
119
+ @"deviceId" : @"audio",
120
+ @"groupId" : @"",
121
+ };
122
+ }
123
+
124
+ [trackInfos addObject:@{
125
+ @"enabled" : @(track.isEnabled),
126
+ @"id" : trackId,
127
+ @"kind" : track.kind,
128
+ @"readyState" : @"live",
129
+ @"remote" : @(NO),
130
+ @"settings" : settings
131
+ }];
132
+ }
133
+
134
+ self.localStreams[mediaStreamId] = mediaStream;
135
+ return @[ mediaStreamId, trackInfos ];
136
+ #endif
137
+ }
138
+
139
+ /**
140
+ * Initializes a new {@link RTCVideoTrack} which satisfies the given constraints.
141
+ */
142
+ - (RTCVideoTrack *)createVideoTrack:(NSDictionary *)constraints {
143
+ #if TARGET_OS_TV
144
+ return nil;
145
+ #else
146
+ RTCVideoSource *videoSource = [self.peerConnectionFactory videoSource];
147
+
148
+ NSString *trackUUID = [[NSUUID UUID] UUIDString];
149
+ RTCVideoTrack *videoTrack = [self.peerConnectionFactory videoTrackWithSource:videoSource trackId:trackUUID];
150
+
151
+ #if !TARGET_IPHONE_SIMULATOR
152
+ RTCCameraVideoCapturer *videoCapturer = [[RTCCameraVideoCapturer alloc] initWithDelegate:videoSource];
153
+ VideoCaptureController *videoCaptureController =
154
+ [[VideoCaptureController alloc] initWithCapturer:videoCapturer andConstraints:constraints[@"video"]];
155
+ videoCaptureController.enableMultitaskingCameraAccess =
156
+ [WebRTCModuleOptions sharedInstance].enableMultitaskingCameraAccess;
157
+ videoTrack.captureController = videoCaptureController;
158
+ [videoCaptureController startCapture];
159
+ #endif
160
+
161
+ return videoTrack;
162
+ #endif
163
+ }
164
+
165
+ - (RTCVideoTrack *)createScreenCaptureVideoTrack {
166
+ #if TARGET_IPHONE_SIMULATOR || TARGET_OS_OSX || TARGET_OS_TV
167
+ return nil;
168
+ #endif
169
+
170
+ RTCVideoSource *videoSource = [self.peerConnectionFactory videoSourceForScreenCast:YES];
171
+
172
+ NSString *trackUUID = [[NSUUID UUID] UUIDString];
173
+ RTCVideoTrack *videoTrack = [self.peerConnectionFactory videoTrackWithSource:videoSource trackId:trackUUID];
174
+
175
+ ScreenCapturer *screenCapturer = [[ScreenCapturer alloc] initWithDelegate:videoSource];
176
+ ScreenCaptureController *screenCaptureController =
177
+ [[ScreenCaptureController alloc] initWithCapturer:screenCapturer];
178
+
179
+ TrackCapturerEventsEmitter *emitter = [[TrackCapturerEventsEmitter alloc] initWith:trackUUID webRTCModule:self];
180
+ screenCaptureController.eventsDelegate = emitter;
181
+ videoTrack.captureController = screenCaptureController;
182
+ [screenCaptureController startCapture];
183
+
184
+ return videoTrack;
185
+ }
186
+
187
+ RCT_EXPORT_METHOD(getDisplayMedia : (RCTPromiseResolveBlock)resolve rejecter : (RCTPromiseRejectBlock)reject) {
188
+ #if TARGET_OS_TV
189
+ reject(@"unsupported_platform", @"tvOS is not supported", nil);
190
+ return;
191
+ #else
192
+
193
+ RTCVideoTrack *videoTrack = [self createScreenCaptureVideoTrack];
194
+
195
+ if (videoTrack == nil) {
196
+ reject(@"DOMException", @"AbortError", nil);
197
+ return;
198
+ }
199
+
200
+ NSString *mediaStreamId = [[NSUUID UUID] UUIDString];
201
+ RTCMediaStream *mediaStream = [self.peerConnectionFactory mediaStreamWithStreamId:mediaStreamId];
202
+ [mediaStream addVideoTrack:videoTrack];
203
+
204
+ NSString *trackId = videoTrack.trackId;
205
+ self.localTracks[trackId] = videoTrack;
206
+
207
+ NSDictionary *trackInfo = @{
208
+ @"enabled" : @(videoTrack.isEnabled),
209
+ @"id" : videoTrack.trackId,
210
+ @"kind" : videoTrack.kind,
211
+ @"readyState" : @"live",
212
+ @"remote" : @(NO)
213
+ };
214
+
215
+ self.localStreams[mediaStreamId] = mediaStream;
216
+ resolve(@{@"streamId" : mediaStreamId, @"track" : trackInfo});
217
+ #endif
218
+ }
219
+
220
+ /**
221
+ * Implements {@code getUserMedia}. Note that at this point constraints have
222
+ * been normalized and permissions have been granted. The constraints only
223
+ * contain keys for which permissions have already been granted, that is,
224
+ * if audio permission was not granted, there will be no "audio" key in
225
+ * the constraints dictionary.
226
+ */
227
+ RCT_EXPORT_METHOD(getUserMedia
228
+ : (NSDictionary *)constraints successCallback
229
+ : (RCTResponseSenderBlock)successCallback errorCallback
230
+ : (RCTResponseSenderBlock)errorCallback) {
231
+ #if TARGET_OS_TV
232
+ errorCallback(@[ @"PlatformNotSupported", @"getUserMedia is not supported on tvOS." ]);
233
+ return;
234
+ #else
235
+ RTCAudioTrack *audioTrack = nil;
236
+ RTCVideoTrack *videoTrack = nil;
237
+
238
+ if (constraints[@"audio"]) {
239
+ audioTrack = [self createAudioTrack:constraints];
240
+ }
241
+ if (constraints[@"video"]) {
242
+ videoTrack = [self createVideoTrack:constraints];
243
+ }
244
+
245
+ if (audioTrack == nil && videoTrack == nil) {
246
+ // Fail with DOMException with name AbortError as per:
247
+ // https://www.w3.org/TR/mediacapture-streams/#dom-mediadevices-getusermedia
248
+ errorCallback(@[ @"DOMException", @"AbortError" ]);
249
+ return;
250
+ }
251
+
252
+ NSString *mediaStreamId = [[NSUUID UUID] UUIDString];
253
+ RTCMediaStream *mediaStream = [self.peerConnectionFactory mediaStreamWithStreamId:mediaStreamId];
254
+ NSMutableArray *tracks = [NSMutableArray array];
255
+ NSMutableArray *tmp = [NSMutableArray array];
256
+ if (audioTrack)
257
+ [tmp addObject:audioTrack];
258
+ if (videoTrack)
259
+ [tmp addObject:videoTrack];
260
+
261
+ for (RTCMediaStreamTrack *track in tmp) {
262
+ if ([track.kind isEqualToString:@"audio"]) {
263
+ [mediaStream addAudioTrack:(RTCAudioTrack *)track];
264
+ } else if ([track.kind isEqualToString:@"video"]) {
265
+ [mediaStream addVideoTrack:(RTCVideoTrack *)track];
266
+ }
267
+
268
+ NSString *trackId = track.trackId;
269
+
270
+ self.localTracks[trackId] = track;
271
+
272
+ NSDictionary *settings = @{};
273
+ if ([track.kind isEqualToString:@"video"]) {
274
+ RTCVideoTrack *videoTrack = (RTCVideoTrack *)track;
275
+ if ([videoTrack.captureController isKindOfClass:[CaptureController class]]) {
276
+ settings = [videoTrack.captureController getSettings];
277
+ }
278
+ } else if ([track.kind isEqualToString:@"audio"]) {
279
+ settings = @{
280
+ @"deviceId" : @"audio",
281
+ @"groupId" : @"",
282
+ };
283
+ }
284
+
285
+ [tracks addObject:@{
286
+ @"enabled" : @(track.isEnabled),
287
+ @"id" : trackId,
288
+ @"kind" : track.kind,
289
+ @"readyState" : @"live",
290
+ @"remote" : @(NO),
291
+ @"settings" : settings
292
+ }];
293
+ }
294
+
295
+ self.localStreams[mediaStreamId] = mediaStream;
296
+ successCallback(@[ mediaStreamId, tracks ]);
297
+ #endif
298
+ }
299
+
300
+ #pragma mark - Other stream related APIs
301
+
302
+ RCT_EXPORT_METHOD(enumerateDevices : (RCTResponseSenderBlock)callback) {
303
+ #if TARGET_OS_TV
304
+ callback(@[]);
305
+ #else
306
+ NSMutableArray *devices = [NSMutableArray array];
307
+ NSMutableArray *deviceTypes = [NSMutableArray array];
308
+ [deviceTypes addObjectsFromArray:@[
309
+ AVCaptureDeviceTypeBuiltInWideAngleCamera,
310
+ AVCaptureDeviceTypeBuiltInUltraWideCamera,
311
+ AVCaptureDeviceTypeBuiltInTelephotoCamera,
312
+ AVCaptureDeviceTypeBuiltInDualCamera,
313
+ AVCaptureDeviceTypeBuiltInDualWideCamera,
314
+ AVCaptureDeviceTypeBuiltInTripleCamera
315
+ ]];
316
+ if (@available(macos 14.0, ios 17.0, tvos 17.0, *)) {
317
+ [deviceTypes addObject:AVCaptureDeviceTypeExternal];
318
+ }
319
+ AVCaptureDeviceDiscoverySession *videoDevicesSession =
320
+ [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:deviceTypes
321
+ mediaType:AVMediaTypeVideo
322
+ position:AVCaptureDevicePositionUnspecified];
323
+ for (AVCaptureDevice *device in videoDevicesSession.devices) {
324
+ NSString *position = @"unknown";
325
+ if (device.position == AVCaptureDevicePositionBack) {
326
+ position = @"environment";
327
+ } else if (device.position == AVCaptureDevicePositionFront) {
328
+ position = @"front";
329
+ }
330
+ NSString *label = @"Unknown video device";
331
+ if (device.localizedName != nil) {
332
+ label = device.localizedName;
333
+ }
334
+
335
+ [devices addObject:@{
336
+ @"facing" : position,
337
+ @"deviceId" : device.uniqueID,
338
+ @"groupId" : @"",
339
+ @"label" : label,
340
+ @"kind" : @"videoinput",
341
+ }];
342
+ }
343
+ AVCaptureDeviceDiscoverySession *audioDevicesSession =
344
+ [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ AVCaptureDeviceTypeBuiltInMicrophone ]
345
+ mediaType:AVMediaTypeAudio
346
+ position:AVCaptureDevicePositionUnspecified];
347
+ for (AVCaptureDevice *device in audioDevicesSession.devices) {
348
+ NSString *label = @"Unknown audio device";
349
+ if (device.localizedName != nil) {
350
+ label = device.localizedName;
351
+ }
352
+ [devices addObject:@{
353
+ @"deviceId" : device.uniqueID,
354
+ @"groupId" : @"",
355
+ @"label" : label,
356
+ @"kind" : @"audioinput",
357
+ }];
358
+ }
359
+ callback(@[ devices ]);
360
+ #endif
361
+ }
362
+
363
+ RCT_EXPORT_METHOD(mediaStreamCreate : (nonnull NSString *)streamID) {
364
+ RTCMediaStream *mediaStream = [self.peerConnectionFactory mediaStreamWithStreamId:streamID];
365
+ self.localStreams[streamID] = mediaStream;
366
+ }
367
+
368
+ RCT_EXPORT_METHOD(mediaStreamAddTrack
369
+ : (nonnull NSString *)streamID
370
+ : (nonnull NSNumber *)pcId
371
+ : (nonnull NSString *)trackID) {
372
+ RTCMediaStream *mediaStream = self.localStreams[streamID];
373
+ if (mediaStream == nil) {
374
+ return;
375
+ }
376
+
377
+ RTCMediaStreamTrack *track = [self trackForId:trackID pcId:pcId];
378
+ if (track == nil) {
379
+ return;
380
+ }
381
+
382
+ if ([track.kind isEqualToString:@"audio"]) {
383
+ [mediaStream addAudioTrack:(RTCAudioTrack *)track];
384
+ } else if ([track.kind isEqualToString:@"video"]) {
385
+ [mediaStream addVideoTrack:(RTCVideoTrack *)track];
386
+ }
387
+ }
388
+
389
+ RCT_EXPORT_METHOD(mediaStreamRemoveTrack
390
+ : (nonnull NSString *)streamID
391
+ : (nonnull NSNumber *)pcId
392
+ : (nonnull NSString *)trackID) {
393
+ RTCMediaStream *mediaStream = self.localStreams[streamID];
394
+ if (mediaStream == nil) {
395
+ return;
396
+ }
397
+
398
+ RTCMediaStreamTrack *track = [self trackForId:trackID pcId:pcId];
399
+ if (track == nil) {
400
+ return;
401
+ }
402
+
403
+ if ([track.kind isEqualToString:@"audio"]) {
404
+ [mediaStream removeAudioTrack:(RTCAudioTrack *)track];
405
+ } else if ([track.kind isEqualToString:@"video"]) {
406
+ [mediaStream removeVideoTrack:(RTCVideoTrack *)track];
407
+ }
408
+ }
409
+
410
+ RCT_EXPORT_METHOD(mediaStreamRelease : (nonnull NSString *)streamID) {
411
+ RTCMediaStream *stream = self.localStreams[streamID];
412
+ if (stream) {
413
+ [self.localStreams removeObjectForKey:streamID];
414
+ }
415
+ }
416
+
417
+ RCT_EXPORT_METHOD(mediaStreamTrackRelease : (nonnull NSString *)trackID) {
418
+ #if TARGET_OS_TV
419
+ return;
420
+ #else
421
+
422
+ RTCMediaStreamTrack *track = self.localTracks[trackID];
423
+ if (track) {
424
+ track.isEnabled = NO;
425
+ [track.captureController stopCapture];
426
+ [self.localTracks removeObjectForKey:trackID];
427
+ }
428
+ #endif
429
+ }
430
+
431
+ RCT_EXPORT_METHOD(mediaStreamTrackSetEnabled : (nonnull NSNumber *)pcId : (nonnull NSString *)trackID : (BOOL)enabled) {
432
+ RTCMediaStreamTrack *track = [self trackForId:trackID pcId:pcId];
433
+ if (track == nil) {
434
+ return;
435
+ }
436
+
437
+ track.isEnabled = enabled;
438
+ #if !TARGET_OS_TV
439
+ if (track.captureController) { // It could be a remote track!
440
+ if (enabled) {
441
+ [track.captureController startCapture];
442
+ } else {
443
+ [track.captureController stopCapture];
444
+ }
445
+ }
446
+ #endif
447
+ }
448
+
449
+ RCT_EXPORT_METHOD(mediaStreamTrackApplyConstraints
450
+ : (nonnull NSString *)trackID
451
+ : (NSDictionary *)constraints
452
+ : (RCTPromiseResolveBlock)resolve
453
+ : (RCTPromiseRejectBlock)reject) {
454
+ #if TARGET_OS_TV
455
+ reject(@"unsupported_platform", @"tvOS is not supported", nil);
456
+ return;
457
+ #else
458
+ RTCMediaStreamTrack *track = self.localTracks[trackID];
459
+ if (track) {
460
+ if ([track.kind isEqualToString:@"video"]) {
461
+ RTCVideoTrack *videoTrack = (RTCVideoTrack *)track;
462
+ if ([videoTrack.captureController isKindOfClass:[CaptureController class]]) {
463
+ CaptureController *vcc = (CaptureController *)videoTrack.captureController;
464
+ NSError *error = nil;
465
+ [vcc applyConstraints:constraints error:&error];
466
+ if (error) {
467
+ reject(@"E_INVALID", error.localizedDescription, error);
468
+ } else {
469
+ resolve([vcc getSettings]);
470
+ }
471
+ }
472
+ } else {
473
+ RCTLogWarn(@"mediaStreamTrackApplyConstraints() track is not video");
474
+ reject(@"E_INVALID", @"Can't apply constraints on audio tracks", nil);
475
+ }
476
+ } else {
477
+ RCTLogWarn(@"mediaStreamTrackApplyConstraints() track is null");
478
+ reject(@"E_INVALID", @"Could not get track", nil);
479
+ }
480
+ #endif
481
+ }
482
+
483
+ RCT_EXPORT_METHOD(mediaStreamTrackSetVolume : (nonnull NSNumber *)pcId : (nonnull NSString *)trackID : (double)volume) {
484
+ RTCMediaStreamTrack *track = [self trackForId:trackID pcId:pcId];
485
+ if (track && [track.kind isEqualToString:@"audio"]) {
486
+ RTCAudioTrack *audioTrack = (RTCAudioTrack *)track;
487
+ audioTrack.source.volume = volume;
488
+ }
489
+ }
490
+
491
+ RCT_EXPORT_METHOD(mediaStreamTrackSetVideoEffects
492
+ : (nonnull NSString *)trackID names
493
+ : (nonnull NSArray<NSString *> *)names) {
494
+ RTCMediaStreamTrack *track = self.localTracks[trackID];
495
+ if (track == nil) {
496
+ return;
497
+ }
498
+
499
+ RTCVideoTrack *videoTrack = (RTCVideoTrack *)track;
500
+ RTCVideoSource *videoSource = videoTrack.source;
501
+
502
+ NSMutableArray *processors = [[NSMutableArray alloc] init];
503
+ for (NSString *name in names) {
504
+ NSObject<VideoFrameProcessorDelegate> *processor = [ProcessorProvider getProcessor:name];
505
+ if (processor != nil) {
506
+ [processors addObject:processor];
507
+ }
508
+ }
509
+
510
+ self.videoEffectProcessor = [[VideoEffectProcessor alloc] initWithProcessors:processors videoSource:videoSource];
511
+
512
+ VideoCaptureController *vcc = (VideoCaptureController *)videoTrack.captureController;
513
+ RTCVideoCapturer *capturer = vcc.capturer;
514
+
515
+ capturer.delegate = self.videoEffectProcessor;
516
+ }
517
+
518
+ #pragma mark - Helpers
519
+
520
+ - (RTCMediaStreamTrack *)trackForId:(nonnull NSString *)trackId pcId:(nonnull NSNumber *)pcId {
521
+ if ([pcId isEqualToNumber:[NSNumber numberWithInt:-1]]) {
522
+ return self.localTracks[trackId];
523
+ }
524
+
525
+ RTCPeerConnection *peerConnection = self.peerConnections[pcId];
526
+ if (peerConnection == nil) {
527
+ return nil;
528
+ }
529
+
530
+ return peerConnection.remoteTracks[trackId];
531
+ }
532
+
533
+ @end
@@ -0,0 +1,24 @@
1
+ #import <WebRTC/RTCPeerConnection.h>
2
+ #import "DataChannelWrapper.h"
3
+ #import "WebRTCModule.h"
4
+
5
+ @interface RTCPeerConnection (React)
6
+
7
+ @property(nonatomic, strong) NSNumber *reactTag;
8
+ @property(nonatomic, strong) NSMutableDictionary<NSString *, DataChannelWrapper *> *dataChannels;
9
+ @property(nonatomic, strong) NSMutableDictionary<NSString *, RTCMediaStream *> *remoteStreams;
10
+ @property(nonatomic, strong) NSMutableDictionary<NSString *, RTCMediaStreamTrack *> *remoteTracks;
11
+ @property(nonatomic, weak) id webRTCModule;
12
+
13
+ @end
14
+
15
+ @interface WebRTCModule (RTCPeerConnection)<RTCPeerConnectionDelegate>
16
+
17
+ - (nullable RTCRtpSender *)getSenderByPeerConnectionId:(nonnull NSNumber *)peerConnectionId
18
+ senderId:(nonnull NSString *)senderId;
19
+ - (nullable RTCRtpReceiver *)getReceiverByPeerConnectionId:(nonnull NSNumber *)peerConnectionId
20
+ receiverId:(nonnull NSString *)receiverId;
21
+ - (nullable RTCRtpTransceiver *)getTransceiverByPeerConnectionId:(nonnull NSNumber *)peerConnectionId
22
+ transceiverId:(nonnull NSString *)transceiverId;
23
+
24
+ @end