@sbhjt-gr/react-native-webrtc 124.0.2 → 124.0.4
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.
- package/.clang-format +11 -11
- package/.eslintignore +6 -6
- package/.nvmrc +1 -1
- package/ISSUE_TEMPLATE.md +40 -40
- package/LICENSE +22 -22
- package/README.md +103 -103
- package/android/build.gradle +37 -37
- package/android/consumer-rules.pro +3 -3
- package/android/src/main/AndroidManifest.xml +11 -11
- package/android/src/main/java/com/oney/WebRTCModule/AbstractVideoCaptureController.java +113 -113
- package/android/src/main/java/com/oney/WebRTCModule/CameraCaptureController.java +338 -338
- package/android/src/main/java/com/oney/WebRTCModule/CameraEventsHandler.java +49 -49
- package/android/src/main/java/com/oney/WebRTCModule/DataChannelWrapper.java +99 -99
- package/android/src/main/java/com/oney/WebRTCModule/DataPacketCryptorManager.java +62 -62
- package/android/src/main/java/com/oney/WebRTCModule/DisplayUtils.java +16 -16
- package/android/src/main/java/com/oney/WebRTCModule/EglUtils.java +66 -66
- package/android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java +539 -539
- package/android/src/main/java/com/oney/WebRTCModule/LibraryLoader.java +21 -21
- package/android/src/main/java/com/oney/WebRTCModule/MediaProjectionNotification.java +70 -70
- package/android/src/main/java/com/oney/WebRTCModule/MediaProjectionService.java +82 -82
- package/android/src/main/java/com/oney/WebRTCModule/PeerConnectionObserver.java +588 -588
- package/android/src/main/java/com/oney/WebRTCModule/RTCCryptoManager.java +493 -493
- package/android/src/main/java/com/oney/WebRTCModule/RTCVideoViewManager.java +98 -98
- package/android/src/main/java/com/oney/WebRTCModule/ReactBridgeUtil.java +35 -35
- package/android/src/main/java/com/oney/WebRTCModule/ScreenCaptureController.java +94 -94
- package/android/src/main/java/com/oney/WebRTCModule/SerializeUtils.java +342 -342
- package/android/src/main/java/com/oney/WebRTCModule/StringUtils.java +100 -100
- package/android/src/main/java/com/oney/WebRTCModule/ThreadUtils.java +41 -41
- package/android/src/main/java/com/oney/WebRTCModule/TrackCapturerEventsEmitter.java +34 -34
- package/android/src/main/java/com/oney/WebRTCModule/VideoTrackAdapter.java +137 -137
- package/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java +1649 -1643
- package/android/src/main/java/com/oney/WebRTCModule/WebRTCModuleOptions.java +33 -33
- package/android/src/main/java/com/oney/WebRTCModule/WebRTCModulePackage.java +21 -21
- package/android/src/main/java/com/oney/WebRTCModule/WebRTCView.java +583 -583
- package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraClient.java +529 -464
- package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraConfig.java +17 -17
- package/android/src/main/java/com/oney/WebRTCModule/palabra/PalabraListener.java +7 -7
- package/android/src/main/java/com/oney/WebRTCModule/videoEffects/ProcessorProvider.java +38 -38
- package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoEffectProcessor.java +59 -59
- package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoFrameProcessor.java +19 -19
- package/android/src/main/java/com/oney/WebRTCModule/videoEffects/VideoFrameProcessorFactoryInterface.java +12 -12
- package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/H264AndSoftwareVideoDecoderFactory.java +73 -73
- package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/H264AndSoftwareVideoEncoderFactory.java +73 -73
- package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/SoftwareVideoDecoderFactoryProxy.java +36 -36
- package/android/src/main/java/com/oney/WebRTCModule/webrtcutils/SoftwareVideoEncoderFactoryProxy.java +36 -36
- package/android/src/main/java/org/webrtc/Camera1Helper.java +54 -54
- package/android/src/main/java/org/webrtc/Camera2Helper.java +52 -52
- package/android/src/main/res/values/strings.xml +5 -5
- package/android/src/main/res/values/styles.xml +8 -8
- package/ios/RCTWebRTC/CaptureController.h +18 -18
- package/ios/RCTWebRTC/CaptureController.m +28 -28
- package/ios/RCTWebRTC/CapturerEventsDelegate.h +12 -12
- package/ios/RCTWebRTC/DataChannelWrapper.h +27 -27
- package/ios/RCTWebRTC/DataChannelWrapper.m +42 -42
- package/ios/RCTWebRTC/I420Converter.h +22 -22
- package/ios/RCTWebRTC/I420Converter.m +164 -164
- package/ios/RCTWebRTC/PIPController.h +24 -24
- package/ios/RCTWebRTC/PIPController.m +234 -234
- package/ios/RCTWebRTC/PalabraAudioSink.h +13 -13
- package/ios/RCTWebRTC/PalabraAudioSink.m +18 -18
- package/ios/RCTWebRTC/PalabraClient.h +42 -36
- package/ios/RCTWebRTC/PalabraClient.m +680 -584
- package/ios/RCTWebRTC/RCTConvert+WebRTC.h +16 -16
- package/ios/RCTWebRTC/RCTConvert+WebRTC.m +206 -206
- package/ios/RCTWebRTC/RTCMediaStreamTrack+React.h +10 -10
- package/ios/RCTWebRTC/RTCMediaStreamTrack+React.m +16 -16
- package/ios/RCTWebRTC/RTCVideoViewManager.h +29 -29
- package/ios/RCTWebRTC/RTCVideoViewManager.m +411 -411
- package/ios/RCTWebRTC/SampleBufferVideoCallView.h +12 -12
- package/ios/RCTWebRTC/SampleBufferVideoCallView.m +178 -178
- package/ios/RCTWebRTC/ScreenCaptureController.h +20 -20
- package/ios/RCTWebRTC/ScreenCaptureController.m +82 -82
- package/ios/RCTWebRTC/ScreenCapturePickerViewManager.h +7 -7
- package/ios/RCTWebRTC/ScreenCapturePickerViewManager.m +59 -59
- package/ios/RCTWebRTC/ScreenCapturer.h +19 -19
- package/ios/RCTWebRTC/ScreenCapturer.m +263 -263
- package/ios/RCTWebRTC/SerializeUtils.h +28 -28
- package/ios/RCTWebRTC/SerializeUtils.m +314 -314
- package/ios/RCTWebRTC/SocketConnection.h +13 -13
- package/ios/RCTWebRTC/SocketConnection.m +137 -137
- package/ios/RCTWebRTC/TrackCapturerEventsEmitter.h +14 -14
- package/ios/RCTWebRTC/TrackCapturerEventsEmitter.m +36 -36
- package/ios/RCTWebRTC/VideoCaptureController.h +21 -21
- package/ios/RCTWebRTC/VideoCaptureController.m +328 -328
- package/ios/RCTWebRTC/WLVAudioDevice.h +12 -12
- package/ios/RCTWebRTC/WLVAudioDevice.m +137 -137
- package/ios/RCTWebRTC/WebRTCModule+Palabra.h +4 -4
- package/ios/RCTWebRTC/WebRTCModule+Palabra.m +92 -83
- package/ios/RCTWebRTC/WebRTCModule+Permissions.m +75 -75
- package/ios/RCTWebRTC/WebRTCModule+RTCAudioSession.m +20 -20
- package/ios/RCTWebRTC/WebRTCModule+RTCDataChannel.h +14 -14
- package/ios/RCTWebRTC/WebRTCModule+RTCDataChannel.m +165 -165
- package/ios/RCTWebRTC/WebRTCModule+RTCFrameCryptor.m +611 -611
- package/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.h +13 -13
- package/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m +728 -728
- package/ios/RCTWebRTC/WebRTCModule+RTCPeerConnection.h +24 -24
- package/ios/RCTWebRTC/WebRTCModule+RTCPeerConnection.m +1004 -1004
- package/ios/RCTWebRTC/WebRTCModule+Transceivers.m +267 -267
- package/ios/RCTWebRTC/WebRTCModule+VideoTrackAdapter.h +12 -12
- package/ios/RCTWebRTC/WebRTCModule+VideoTrackAdapter.m +166 -166
- package/ios/RCTWebRTC/WebRTCModule.h +58 -58
- package/ios/RCTWebRTC/WebRTCModule.m +169 -169
- package/ios/RCTWebRTC/WebRTCModuleOptions.h +24 -24
- package/ios/RCTWebRTC/WebRTCModuleOptions.m +31 -31
- package/ios/RCTWebRTC/videoEffects/ProcessorProvider.h +9 -9
- package/ios/RCTWebRTC/videoEffects/ProcessorProvider.m +23 -23
- package/ios/RCTWebRTC/videoEffects/VideoEffectProcessor.h +13 -13
- package/ios/RCTWebRTC/videoEffects/VideoEffectProcessor.m +23 -23
- package/ios/RCTWebRTC/videoEffects/VideoFrameProcessor.h +8 -8
- package/ios/RCTWebRTC.xcodeproj/project.pbxproj +404 -404
- package/ios/RCTWebRTC.xcworkspace/contents.xcworkspacedata +10 -10
- package/lib/commonjs/Constraints.js.map +1 -1
- package/lib/commonjs/EventEmitter.js.map +1 -1
- package/lib/commonjs/Logger.js.map +1 -1
- package/lib/commonjs/MediaDevices.js +17 -17
- package/lib/commonjs/MediaDevices.js.map +1 -1
- package/lib/commonjs/MediaStream.js +19 -19
- package/lib/commonjs/MediaStream.js.map +1 -1
- package/lib/commonjs/MediaStreamError.js.map +1 -1
- package/lib/commonjs/MediaStreamErrorEvent.js.map +1 -1
- package/lib/commonjs/MediaStreamTrack.js +28 -28
- package/lib/commonjs/MediaStreamTrack.js.map +1 -1
- package/lib/commonjs/MediaStreamTrackEvent.js +6 -6
- package/lib/commonjs/MediaStreamTrackEvent.js.map +1 -1
- package/lib/commonjs/MessageEvent.js +7 -7
- package/lib/commonjs/MessageEvent.js.map +1 -1
- package/lib/commonjs/Permissions.js +28 -28
- package/lib/commonjs/Permissions.js.map +1 -1
- package/lib/commonjs/RTCAudioSession.js +4 -4
- package/lib/commonjs/RTCAudioSession.js.map +1 -1
- package/lib/commonjs/RTCDataChannel.js +2 -2
- package/lib/commonjs/RTCDataChannel.js.map +1 -1
- package/lib/commonjs/RTCDataChannelEvent.js +6 -6
- package/lib/commonjs/RTCDataChannelEvent.js.map +1 -1
- package/lib/commonjs/RTCDataPacketCryptor.js.map +1 -1
- package/lib/commonjs/RTCDataPacketCryptorFactory.js.map +1 -1
- package/lib/commonjs/RTCErrorEvent.js +3 -3
- package/lib/commonjs/RTCErrorEvent.js.map +1 -1
- package/lib/commonjs/RTCFrameCryptor.js +8 -8
- package/lib/commonjs/RTCFrameCryptor.js.map +1 -1
- package/lib/commonjs/RTCFrameCryptorFactory.js.map +1 -1
- package/lib/commonjs/RTCIceCandidate.js.map +1 -1
- package/lib/commonjs/RTCIceCandidateEvent.js +7 -7
- package/lib/commonjs/RTCIceCandidateEvent.js.map +1 -1
- package/lib/commonjs/RTCKeyProvider.js.map +1 -1
- package/lib/commonjs/RTCPIPView.js +2 -2
- package/lib/commonjs/RTCPIPView.js.map +1 -1
- package/lib/commonjs/RTCPIPView.web.js.map +1 -1
- package/lib/commonjs/RTCPeerConnection.js +146 -41
- package/lib/commonjs/RTCPeerConnection.js.map +1 -1
- package/lib/commonjs/RTCRtcpParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpCapabilities.js +2 -2
- package/lib/commonjs/RTCRtpCapabilities.js.map +1 -1
- package/lib/commonjs/RTCRtpCodecCapability.js.map +1 -1
- package/lib/commonjs/RTCRtpCodecParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpEncodingParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpHeaderExtension.js.map +1 -1
- package/lib/commonjs/RTCRtpParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpReceiveParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpReceiver.js +7 -7
- package/lib/commonjs/RTCRtpReceiver.js.map +1 -1
- package/lib/commonjs/RTCRtpSendParameters.js +3 -3
- package/lib/commonjs/RTCRtpSendParameters.js.map +1 -1
- package/lib/commonjs/RTCRtpSender.js +7 -7
- package/lib/commonjs/RTCRtpSender.js.map +1 -1
- package/lib/commonjs/RTCRtpTransceiver.js.map +1 -1
- package/lib/commonjs/RTCSessionDescription.js.map +1 -1
- package/lib/commonjs/RTCTrackEvent.js +6 -6
- package/lib/commonjs/RTCTrackEvent.js.map +1 -1
- package/lib/commonjs/RTCUtil.js +28 -28
- package/lib/commonjs/RTCUtil.js.map +1 -1
- package/lib/commonjs/RTCView.js +5 -5
- package/lib/commonjs/RTCView.js.map +1 -1
- package/lib/commonjs/RTCView.web.js.map +1 -1
- package/lib/commonjs/ScreenCapturePickerView.js.map +1 -1
- package/lib/commonjs/ScreenCapturePickerView.web.js.map +1 -1
- package/lib/commonjs/getDisplayMedia.js.map +1 -1
- package/lib/commonjs/getUserMedia.js +23 -0
- package/lib/commonjs/getUserMedia.js.map +1 -1
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/index.web.js.map +1 -1
- package/lib/commonjs/webStream.js.map +1 -1
- package/lib/module/Constraints.js.map +1 -1
- package/lib/module/EventEmitter.js.map +1 -1
- package/lib/module/Logger.js.map +1 -1
- package/lib/module/MediaDevices.js +17 -17
- package/lib/module/MediaDevices.js.map +1 -1
- package/lib/module/MediaStream.js +19 -19
- package/lib/module/MediaStream.js.map +1 -1
- package/lib/module/MediaStreamError.js.map +1 -1
- package/lib/module/MediaStreamErrorEvent.js.map +1 -1
- package/lib/module/MediaStreamTrack.js +28 -28
- package/lib/module/MediaStreamTrack.js.map +1 -1
- package/lib/module/MediaStreamTrackEvent.js +6 -6
- package/lib/module/MediaStreamTrackEvent.js.map +1 -1
- package/lib/module/MessageEvent.js +7 -7
- package/lib/module/MessageEvent.js.map +1 -1
- package/lib/module/Permissions.js +28 -28
- package/lib/module/Permissions.js.map +1 -1
- package/lib/module/RTCAudioSession.js +4 -4
- package/lib/module/RTCAudioSession.js.map +1 -1
- package/lib/module/RTCDataChannel.js +2 -2
- package/lib/module/RTCDataChannel.js.map +1 -1
- package/lib/module/RTCDataChannelEvent.js +6 -6
- package/lib/module/RTCDataChannelEvent.js.map +1 -1
- package/lib/module/RTCDataPacketCryptor.js.map +1 -1
- package/lib/module/RTCDataPacketCryptorFactory.js.map +1 -1
- package/lib/module/RTCErrorEvent.js +3 -3
- package/lib/module/RTCErrorEvent.js.map +1 -1
- package/lib/module/RTCFrameCryptor.js +8 -8
- package/lib/module/RTCFrameCryptor.js.map +1 -1
- package/lib/module/RTCFrameCryptorFactory.js.map +1 -1
- package/lib/module/RTCIceCandidate.js.map +1 -1
- package/lib/module/RTCIceCandidateEvent.js +7 -7
- package/lib/module/RTCIceCandidateEvent.js.map +1 -1
- package/lib/module/RTCKeyProvider.js.map +1 -1
- package/lib/module/RTCPIPView.js +2 -2
- package/lib/module/RTCPIPView.js.map +1 -1
- package/lib/module/RTCPIPView.web.js.map +1 -1
- package/lib/module/RTCPeerConnection.js +146 -41
- package/lib/module/RTCPeerConnection.js.map +1 -1
- package/lib/module/RTCRtcpParameters.js.map +1 -1
- package/lib/module/RTCRtpCapabilities.js +2 -2
- package/lib/module/RTCRtpCapabilities.js.map +1 -1
- package/lib/module/RTCRtpCodecCapability.js.map +1 -1
- package/lib/module/RTCRtpCodecParameters.js.map +1 -1
- package/lib/module/RTCRtpEncodingParameters.js.map +1 -1
- package/lib/module/RTCRtpHeaderExtension.js.map +1 -1
- package/lib/module/RTCRtpParameters.js.map +1 -1
- package/lib/module/RTCRtpReceiveParameters.js.map +1 -1
- package/lib/module/RTCRtpReceiver.js +7 -7
- package/lib/module/RTCRtpReceiver.js.map +1 -1
- package/lib/module/RTCRtpSendParameters.js +3 -3
- package/lib/module/RTCRtpSendParameters.js.map +1 -1
- package/lib/module/RTCRtpSender.js +7 -7
- package/lib/module/RTCRtpSender.js.map +1 -1
- package/lib/module/RTCRtpTransceiver.js.map +1 -1
- package/lib/module/RTCSessionDescription.js.map +1 -1
- package/lib/module/RTCTrackEvent.js +6 -6
- package/lib/module/RTCTrackEvent.js.map +1 -1
- package/lib/module/RTCUtil.js +28 -28
- package/lib/module/RTCUtil.js.map +1 -1
- package/lib/module/RTCView.js +5 -5
- package/lib/module/RTCView.js.map +1 -1
- package/lib/module/RTCView.web.js.map +1 -1
- package/lib/module/ScreenCapturePickerView.js.map +1 -1
- package/lib/module/ScreenCapturePickerView.web.js.map +1 -1
- package/lib/module/getDisplayMedia.js.map +1 -1
- package/lib/module/getUserMedia.js +23 -0
- package/lib/module/getUserMedia.js.map +1 -1
- package/lib/module/index.js.map +1 -1
- package/lib/module/index.web.js.map +1 -1
- package/lib/module/webStream.js.map +1 -1
- package/lib/typescript/Constraints.d.ts +19 -19
- package/lib/typescript/EventEmitter.d.ts +6 -6
- package/lib/typescript/Logger.d.ts +13 -13
- package/lib/typescript/MediaDevices.d.ts +30 -30
- package/lib/typescript/MediaStream.d.ts +48 -48
- package/lib/typescript/MediaStreamError.d.ts +6 -6
- package/lib/typescript/MediaStreamErrorEvent.d.ts +6 -6
- package/lib/typescript/MediaStreamTrack.d.ts +101 -101
- package/lib/typescript/MediaStreamTrackEvent.d.ts +19 -19
- package/lib/typescript/MessageEvent.d.ts +20 -20
- package/lib/typescript/Permissions.d.ts +55 -55
- package/lib/typescript/RTCAudioSession.d.ts +10 -10
- package/lib/typescript/RTCDataChannel.d.ts +43 -43
- package/lib/typescript/RTCDataChannelEvent.d.ts +19 -19
- package/lib/typescript/RTCDataPacketCryptor.d.ts +12 -12
- package/lib/typescript/RTCDataPacketCryptorFactory.d.ts +6 -6
- package/lib/typescript/RTCErrorEvent.d.ts +12 -12
- package/lib/typescript/RTCFrameCryptor.d.ts +47 -47
- package/lib/typescript/RTCFrameCryptorFactory.d.ts +21 -21
- package/lib/typescript/RTCIceCandidate.d.ts +17 -17
- package/lib/typescript/RTCIceCandidateEvent.d.ts +20 -20
- package/lib/typescript/RTCKeyProvider.d.ts +21 -21
- package/lib/typescript/RTCPIPView.d.ts +15 -15
- package/lib/typescript/RTCPIPView.web.d.ts +13 -13
- package/lib/typescript/RTCPeerConnection.d.ts +117 -117
- package/lib/typescript/RTCRtcpParameters.d.ts +10 -10
- package/lib/typescript/RTCRtpCapabilities.d.ts +9 -9
- package/lib/typescript/RTCRtpCodecCapability.d.ts +7 -7
- package/lib/typescript/RTCRtpCodecParameters.d.ts +16 -16
- package/lib/typescript/RTCRtpEncodingParameters.d.ts +23 -23
- package/lib/typescript/RTCRtpHeaderExtension.d.ts +12 -12
- package/lib/typescript/RTCRtpParameters.d.ts +19 -19
- package/lib/typescript/RTCRtpReceiveParameters.d.ts +4 -4
- package/lib/typescript/RTCRtpReceiver.d.ts +21 -21
- package/lib/typescript/RTCRtpSendParameters.d.ts +20 -20
- package/lib/typescript/RTCRtpSender.d.ts +22 -22
- package/lib/typescript/RTCRtpTransceiver.d.ts +31 -31
- package/lib/typescript/RTCSessionDescription.d.ts +12 -12
- package/lib/typescript/RTCTrackEvent.d.ts +29 -29
- package/lib/typescript/RTCUtil.d.ts +37 -37
- package/lib/typescript/RTCView.d.ts +117 -117
- package/lib/typescript/RTCView.web.d.ts +25 -25
- package/lib/typescript/ScreenCapturePickerView.d.ts +2 -2
- package/lib/typescript/ScreenCapturePickerView.web.d.ts +1 -1
- package/lib/typescript/getDisplayMedia.d.ts +2 -2
- package/lib/typescript/getUserMedia.d.ts +7 -7
- package/lib/typescript/index.d.ts +22 -22
- package/lib/typescript/index.web.d.ts +101 -101
- package/lib/typescript/webStream.d.ts +3 -3
- package/livekit-react-native-webrtc.podspec +29 -29
- package/macos/RCTWebRTC.xcodeproj/project.pbxproj +324 -324
- package/macos/RCTWebRTC.xcodeproj/project.xcworkspace/contents.xcworkspacedata +7 -7
- package/macos/RCTWebRTC.xcodeproj/project.xcworkspace/xcshareddata/IDEWorkspaceChecks.plist +8 -8
- package/metro.config.js +7 -7
- package/metro.config.macos.js +14 -14
- package/package.json +66 -66
- package/react-native.config.js +11 -11
- package/src/.eslintrc.cjs +67 -67
- package/src/Constraints.ts +20 -20
- package/src/EventEmitter.ts +65 -65
- package/src/Logger.ts +49 -49
- package/src/MediaDevices.ts +53 -53
- package/src/MediaStream.ts +161 -161
- package/src/MediaStreamError.ts +12 -12
- package/src/MediaStreamErrorEvent.ts +11 -11
- package/src/MediaStreamTrack.ts +282 -282
- package/src/MediaStreamTrackEvent.ts +25 -25
- package/src/MessageEvent.ts +26 -26
- package/src/Permissions.ts +133 -133
- package/src/RTCAudioSession.ts +25 -25
- package/src/RTCDataChannel.ts +190 -190
- package/src/RTCDataChannelEvent.ts +28 -28
- package/src/RTCDataPacketCryptor.ts +90 -90
- package/src/RTCDataPacketCryptorFactory.ts +24 -24
- package/src/RTCErrorEvent.ts +20 -20
- package/src/RTCFrameCryptor.ts +162 -162
- package/src/RTCFrameCryptorFactory.ts +101 -101
- package/src/RTCIceCandidate.ts +29 -29
- package/src/RTCIceCandidateEvent.ts +26 -26
- package/src/RTCKeyProvider.ts +117 -117
- package/src/RTCPIPView.tsx +46 -46
- package/src/RTCPIPView.web.tsx +18 -18
- package/src/RTCPeerConnection.ts +935 -832
- package/src/RTCRtcpParameters.ts +23 -23
- package/src/RTCRtpCapabilities.ts +16 -16
- package/src/RTCRtpCodecCapability.ts +12 -12
- package/src/RTCRtpCodecParameters.ts +44 -44
- package/src/RTCRtpEncodingParameters.ts +90 -90
- package/src/RTCRtpHeaderExtension.ts +27 -27
- package/src/RTCRtpParameters.ts +37 -37
- package/src/RTCRtpReceiveParameters.ts +7 -7
- package/src/RTCRtpReceiver.ts +60 -60
- package/src/RTCRtpSendParameters.ts +63 -63
- package/src/RTCRtpSender.ts +78 -78
- package/src/RTCRtpTransceiver.ts +107 -107
- package/src/RTCSessionDescription.ts +30 -30
- package/src/RTCTrackEvent.ts +42 -42
- package/src/RTCUtil.ts +211 -211
- package/src/RTCView.ts +122 -122
- package/src/RTCView.web.tsx +80 -80
- package/src/ScreenCapturePickerView.ts +4 -4
- package/src/ScreenCapturePickerView.web.tsx +3 -3
- package/src/getDisplayMedia.ts +30 -30
- package/src/getUserMedia.ts +136 -111
- package/src/index.ts +107 -107
- package/src/index.web.ts +191 -191
- package/src/webStream.ts +31 -31
- package/tools/format.sh +6 -6
- package/tools/release.sh +45 -45
- package/tsconfig.json +17 -17
|
@@ -1,12 +1,12 @@
|
|
|
1
|
-
#import <AVKit/AVKit.h>
|
|
2
|
-
#import <Foundation/Foundation.h>
|
|
3
|
-
#import <React/RCTViewManager.h>
|
|
4
|
-
#import <WebRTC/RTCVideoRenderer.h>
|
|
5
|
-
|
|
6
|
-
@interface SampleBufferVideoCallView : UIView<RTCVideoRenderer>
|
|
7
|
-
|
|
8
|
-
@property(nonnull, nonatomic, readonly) AVSampleBufferDisplayLayer *sampleBufferLayer;
|
|
9
|
-
@property(nonatomic, assign) BOOL shouldRender;
|
|
10
|
-
|
|
11
|
-
- (void)requestScaleRecalculation;
|
|
12
|
-
@end
|
|
1
|
+
#import <AVKit/AVKit.h>
|
|
2
|
+
#import <Foundation/Foundation.h>
|
|
3
|
+
#import <React/RCTViewManager.h>
|
|
4
|
+
#import <WebRTC/RTCVideoRenderer.h>
|
|
5
|
+
|
|
6
|
+
@interface SampleBufferVideoCallView : UIView<RTCVideoRenderer>
|
|
7
|
+
|
|
8
|
+
@property(nonnull, nonatomic, readonly) AVSampleBufferDisplayLayer *sampleBufferLayer;
|
|
9
|
+
@property(nonatomic, assign) BOOL shouldRender;
|
|
10
|
+
|
|
11
|
+
- (void)requestScaleRecalculation;
|
|
12
|
+
@end
|
|
@@ -1,178 +1,178 @@
|
|
|
1
|
-
#import "SampleBufferVideoCallView.h"
|
|
2
|
-
#import <Accelerate/Accelerate.h>
|
|
3
|
-
#import <WebRTC/WebRTC.h>
|
|
4
|
-
#import "I420Converter.h"
|
|
5
|
-
|
|
6
|
-
@protocol SampleBufferRendering<AVQueuedSampleBufferRendering>
|
|
7
|
-
|
|
8
|
-
- (BOOL)requiresFlushToResumeDecoding;
|
|
9
|
-
|
|
10
|
-
@end
|
|
11
|
-
|
|
12
|
-
/** These classes already implement the required methods. */
|
|
13
|
-
@interface AVSampleBufferDisplayLayer ()<SampleBufferRendering>
|
|
14
|
-
@end
|
|
15
|
-
@interface AVSampleBufferVideoRenderer ()<SampleBufferRendering>
|
|
16
|
-
@end
|
|
17
|
-
|
|
18
|
-
@interface SampleBufferVideoCallView ()
|
|
19
|
-
|
|
20
|
-
@property(nonatomic, retain) I420Converter *i420Converter;
|
|
21
|
-
@property(nonatomic, strong) id<SampleBufferRendering> renderer;
|
|
22
|
-
@property(nonatomic, assign) NSInteger currentRotation;
|
|
23
|
-
|
|
24
|
-
@end
|
|
25
|
-
|
|
26
|
-
@implementation SampleBufferVideoCallView
|
|
27
|
-
|
|
28
|
-
+ (Class)layerClass {
|
|
29
|
-
return [AVSampleBufferDisplayLayer class];
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
- (instancetype)initWithFrame:(CGRect)frame {
|
|
33
|
-
if (self = [super initWithFrame:frame]) {
|
|
34
|
-
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
35
|
-
selector:@selector(layerFailedToDecode:)
|
|
36
|
-
name:AVSampleBufferDisplayLayerFailedToDecodeNotification
|
|
37
|
-
object:self.sampleBufferLayer];
|
|
38
|
-
if (@available(iOS 17.0, *)) {
|
|
39
|
-
_renderer = self.sampleBufferLayer.sampleBufferRenderer;
|
|
40
|
-
} else {
|
|
41
|
-
_renderer = self.sampleBufferLayer;
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
return self;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
- (void)layerFailedToDecode:(NSNotification *)note {
|
|
48
|
-
NSError *error = [[note userInfo] valueForKey:AVSampleBufferDisplayLayerFailedToDecodeNotificationErrorKey];
|
|
49
|
-
NSLog(@"layerFailedToDecode, error: %@", [error localizedDescription]);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
- (AVSampleBufferDisplayLayer *)sampleBufferLayer {
|
|
53
|
-
return (AVSampleBufferDisplayLayer *)self.layer;
|
|
54
|
-
}
|
|
55
|
-
|
|
56
|
-
- (void)requestScaleRecalculation {
|
|
57
|
-
_currentRotation = -1;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
- (void)recalculateScale:(RTCVideoRotation)rotation {
|
|
61
|
-
if (self.currentRotation != rotation) {
|
|
62
|
-
self.currentRotation = rotation;
|
|
63
|
-
|
|
64
|
-
CGFloat scale = 1;
|
|
65
|
-
if (rotation == 90 || rotation == 270) {
|
|
66
|
-
CGSize size = self.bounds.size;
|
|
67
|
-
scale = size.height / size.width;
|
|
68
|
-
}
|
|
69
|
-
|
|
70
|
-
self.sampleBufferLayer.transform = CATransform3DConcat(
|
|
71
|
-
CATransform3DMakeRotation(rotation / 180.0 * M_PI, 0.0, 0.0, 1.0), CATransform3DMakeScale(scale, scale, 1));
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/** The size of the video frame. */
|
|
76
|
-
- (void)setSize:(CGSize)size {
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/** The frame to be displayed. */
|
|
80
|
-
- (void)renderFrame:(nullable RTC_OBJC_TYPE(RTCVideoFrame) *)frame {
|
|
81
|
-
if (!_shouldRender) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
// Convert RTCVideoFrame to CMSampleBuffer
|
|
86
|
-
CMSampleBufferRef sampleBuffer = [self sampleBufferFrom:frame];
|
|
87
|
-
if (sampleBuffer == nil) {
|
|
88
|
-
return;
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
dispatch_async(dispatch_get_main_queue(), ^{
|
|
92
|
-
if (self.renderer.requiresFlushToResumeDecoding) {
|
|
93
|
-
[self.renderer flush];
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
if (!self.renderer.readyForMoreMediaData) {
|
|
97
|
-
return;
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
[self recalculateScale:frame.rotation];
|
|
101
|
-
|
|
102
|
-
// Display the CMSampleBuffer using AVSampleBufferDisplayLayer
|
|
103
|
-
[self.renderer enqueueSampleBuffer:sampleBuffer];
|
|
104
|
-
CFRelease(sampleBuffer);
|
|
105
|
-
});
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
- (CMSampleBufferRef)sampleBufferFrom:(RTCVideoFrame *)rtcVideoFrame {
|
|
109
|
-
// Convert RTCVideoFrame to CMSampleBuffer
|
|
110
|
-
|
|
111
|
-
// Assuming your RTCVideoFrame contains pixelBuffer
|
|
112
|
-
CVPixelBufferRef pixelBuffer = [self pixelBufferFrom:rtcVideoFrame];
|
|
113
|
-
if (!pixelBuffer) {
|
|
114
|
-
return nil;
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// Create a CMVideoFormatDescription
|
|
118
|
-
CMVideoFormatDescriptionRef formatDescription;
|
|
119
|
-
CMVideoFormatDescriptionCreateForImageBuffer(kCFAllocatorDefault, pixelBuffer, &formatDescription);
|
|
120
|
-
|
|
121
|
-
// Create CMSampleTimingInfo
|
|
122
|
-
// Timescale is 90khz according to RTCVideoFrame.h
|
|
123
|
-
CMSampleTimingInfo timingInfo;
|
|
124
|
-
timingInfo.presentationTimeStamp = CMTimeMake(rtcVideoFrame.timeStamp, 90000);
|
|
125
|
-
timingInfo.decodeTimeStamp = CMTimeMake(rtcVideoFrame.timeStamp, 90000);
|
|
126
|
-
|
|
127
|
-
// Create CMSampleBuffer
|
|
128
|
-
CMSampleBufferRef sampleBuffer;
|
|
129
|
-
CMSampleBufferCreateForImageBuffer(
|
|
130
|
-
kCFAllocatorDefault, pixelBuffer, true, nil, nil, formatDescription, &timingInfo, &sampleBuffer);
|
|
131
|
-
|
|
132
|
-
CFArrayRef attachments = CMSampleBufferGetSampleAttachmentsArray(sampleBuffer, YES);
|
|
133
|
-
CFMutableDictionaryRef dict = (CFMutableDictionaryRef)CFArrayGetValueAtIndex(attachments, 0);
|
|
134
|
-
|
|
135
|
-
CFDictionarySetValue(dict, kCMSampleAttachmentKey_DisplayImmediately, kCFBooleanTrue);
|
|
136
|
-
CVPixelBufferRelease(pixelBuffer);
|
|
137
|
-
return sampleBuffer;
|
|
138
|
-
}
|
|
139
|
-
|
|
140
|
-
/**
|
|
141
|
-
* The CVPixelBufferRef returned from this function must be released when finished using it.
|
|
142
|
-
*/
|
|
143
|
-
- (CVPixelBufferRef)pixelBufferFrom:(RTCVideoFrame *)videoFrame {
|
|
144
|
-
if ([videoFrame.buffer isKindOfClass:[RTCCVPixelBuffer class]]) {
|
|
145
|
-
CVPixelBufferRef pixelBuffer = [((RTCCVPixelBuffer *)videoFrame.buffer) pixelBuffer];
|
|
146
|
-
CVPixelBufferRetain(pixelBuffer);
|
|
147
|
-
return [((RTCCVPixelBuffer *)videoFrame.buffer) pixelBuffer];
|
|
148
|
-
} else {
|
|
149
|
-
return [self pixelBufferFromI420:[videoFrame.buffer toI420]];
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
|
|
153
|
-
/**
|
|
154
|
-
* The CVPixelBufferRef returned from this function must be released when finished using it.
|
|
155
|
-
*/
|
|
156
|
-
- (CVPixelBufferRef)pixelBufferFromI420:(RTCI420Buffer *)i420Buffer {
|
|
157
|
-
if (_i420Converter == nil) {
|
|
158
|
-
I420Converter *converter = [[I420Converter alloc] init];
|
|
159
|
-
vImage_Error err = [converter prepareForAccelerateConversion];
|
|
160
|
-
|
|
161
|
-
if (err != kvImageNoError) {
|
|
162
|
-
NSLog(@"Error when preparing i420Converter: %ld", err);
|
|
163
|
-
return NULL;
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
_i420Converter = converter;
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
CVPixelBufferRef convertedPixelBuffer = [_i420Converter convertI420ToPixelBuffer:i420Buffer];
|
|
170
|
-
|
|
171
|
-
return convertedPixelBuffer;
|
|
172
|
-
}
|
|
173
|
-
|
|
174
|
-
- (void)dealloc {
|
|
175
|
-
[_i420Converter unprepareForAccelerateConversion];
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
@end
|
|
1
|
+
#import "SampleBufferVideoCallView.h"
|
|
2
|
+
#import <Accelerate/Accelerate.h>
|
|
3
|
+
#import <WebRTC/WebRTC.h>
|
|
4
|
+
#import "I420Converter.h"
|
|
5
|
+
|
|
6
|
+
@protocol SampleBufferRendering<AVQueuedSampleBufferRendering>
|
|
7
|
+
|
|
8
|
+
- (BOOL)requiresFlushToResumeDecoding;
|
|
9
|
+
|
|
10
|
+
@end
|
|
11
|
+
|
|
12
|
+
/** These classes already implement the required methods. */
|
|
13
|
+
@interface AVSampleBufferDisplayLayer ()<SampleBufferRendering>
|
|
14
|
+
@end
|
|
15
|
+
@interface AVSampleBufferVideoRenderer ()<SampleBufferRendering>
|
|
16
|
+
@end
|
|
17
|
+
|
|
18
|
+
@interface SampleBufferVideoCallView ()
|
|
19
|
+
|
|
20
|
+
@property(nonatomic, retain) I420Converter *i420Converter;
|
|
21
|
+
@property(nonatomic, strong) id<SampleBufferRendering> renderer;
|
|
22
|
+
@property(nonatomic, assign) NSInteger currentRotation;
|
|
23
|
+
|
|
24
|
+
@end
|
|
25
|
+
|
|
26
|
+
@implementation SampleBufferVideoCallView
|
|
27
|
+
|
|
28
|
+
+ (Class)layerClass {
|
|
29
|
+
return [AVSampleBufferDisplayLayer class];
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
- (instancetype)initWithFrame:(CGRect)frame {
|
|
33
|
+
if (self = [super initWithFrame:frame]) {
|
|
34
|
+
[[NSNotificationCenter defaultCenter] addObserver:self
|
|
35
|
+
selector:@selector(layerFailedToDecode:)
|
|
36
|
+
name:AVSampleBufferDisplayLayerFailedToDecodeNotification
|
|
37
|
+
object:self.sampleBufferLayer];
|
|
38
|
+
if (@available(iOS 17.0, *)) {
|
|
39
|
+
_renderer = self.sampleBufferLayer.sampleBufferRenderer;
|
|
40
|
+
} else {
|
|
41
|
+
_renderer = self.sampleBufferLayer;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
return self;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
- (void)layerFailedToDecode:(NSNotification *)note {
|
|
48
|
+
NSError *error = [[note userInfo] valueForKey:AVSampleBufferDisplayLayerFailedToDecodeNotificationErrorKey];
|
|
49
|
+
NSLog(@"layerFailedToDecode, error: %@", [error localizedDescription]);
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
- (AVSampleBufferDisplayLayer *)sampleBufferLayer {
|
|
53
|
+
return (AVSampleBufferDisplayLayer *)self.layer;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
- (void)requestScaleRecalculation {
|
|
57
|
+
_currentRotation = -1;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
- (void)recalculateScale:(RTCVideoRotation)rotation {
|
|
61
|
+
if (self.currentRotation != rotation) {
|
|
62
|
+
self.currentRotation = rotation;
|
|
63
|
+
|
|
64
|
+
CGFloat scale = 1;
|
|
65
|
+
if (rotation == 90 || rotation == 270) {
|
|
66
|
+
CGSize size = self.bounds.size;
|
|
67
|
+
scale = size.height / size.width;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
self.sampleBufferLayer.transform = CATransform3DConcat(
|
|
71
|
+
CATransform3DMakeRotation(rotation / 180.0 * M_PI, 0.0, 0.0, 1.0), CATransform3DMakeScale(scale, scale, 1));
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
/** The size of the video frame. */
|
|
76
|
+
- (void)setSize:(CGSize)size {
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/** The frame to be displayed. */
|
|
80
|
+
- (void)renderFrame:(nullable RTC_OBJC_TYPE(RTCVideoFrame) *)frame {
|
|
81
|
+
if (!_shouldRender) {
|
|
82
|
+
return;
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
// Convert RTCVideoFrame to CMSampleBuffer
|
|
86
|
+
CMSampleBufferRef sampleBuffer = [self sampleBufferFrom:frame];
|
|
87
|
+
if (sampleBuffer == nil) {
|
|
88
|
+
return;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
dispatch_async(dispatch_get_main_queue(), ^{
|
|
92
|
+
if (self.renderer.requiresFlushToResumeDecoding) {
|
|
93
|
+
[self.renderer flush];
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
if (!self.renderer.readyForMoreMediaData) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
[self recalculateScale:frame.rotation];
|
|
101
|
+
|
|
102
|
+
// Display the CMSampleBuffer using AVSampleBufferDisplayLayer
|
|
103
|
+
[self.renderer enqueueSampleBuffer:sampleBuffer];
|
|
104
|
+
CFRelease(sampleBuffer);
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
- (CMSampleBufferRef)sampleBufferFrom:(RTCVideoFrame *)rtcVideoFrame {
|
|
109
|
+
// Convert RTCVideoFrame to CMSampleBuffer
|
|
110
|
+
|
|
111
|
+
// Assuming your RTCVideoFrame contains pixelBuffer
|
|
112
|
+
CVPixelBufferRef pixelBuffer = [self pixelBufferFrom:rtcVideoFrame];
|
|
113
|
+
if (!pixelBuffer) {
|
|
114
|
+
return nil;
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
// Create a CMVideoFormatDescription
|
|
118
|
+
CMVideoFormatDescriptionRef formatDescription;
|
|
119
|
+
CMVideoFormatDescriptionCreateForImageBuffer(kCFAllocatorDefault, pixelBuffer, &formatDescription);
|
|
120
|
+
|
|
121
|
+
// Create CMSampleTimingInfo
|
|
122
|
+
// Timescale is 90khz according to RTCVideoFrame.h
|
|
123
|
+
CMSampleTimingInfo timingInfo;
|
|
124
|
+
timingInfo.presentationTimeStamp = CMTimeMake(rtcVideoFrame.timeStamp, 90000);
|
|
125
|
+
timingInfo.decodeTimeStamp = CMTimeMake(rtcVideoFrame.timeStamp, 90000);
|
|
126
|
+
|
|
127
|
+
// Create CMSampleBuffer
|
|
128
|
+
CMSampleBufferRef sampleBuffer;
|
|
129
|
+
CMSampleBufferCreateForImageBuffer(
|
|
130
|
+
kCFAllocatorDefault, pixelBuffer, true, nil, nil, formatDescription, &timingInfo, &sampleBuffer);
|
|
131
|
+
|
|
132
|
+
CFArrayRef attachments = CMSampleBufferGetSampleAttachmentsArray(sampleBuffer, YES);
|
|
133
|
+
CFMutableDictionaryRef dict = (CFMutableDictionaryRef)CFArrayGetValueAtIndex(attachments, 0);
|
|
134
|
+
|
|
135
|
+
CFDictionarySetValue(dict, kCMSampleAttachmentKey_DisplayImmediately, kCFBooleanTrue);
|
|
136
|
+
CVPixelBufferRelease(pixelBuffer);
|
|
137
|
+
return sampleBuffer;
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* The CVPixelBufferRef returned from this function must be released when finished using it.
|
|
142
|
+
*/
|
|
143
|
+
- (CVPixelBufferRef)pixelBufferFrom:(RTCVideoFrame *)videoFrame {
|
|
144
|
+
if ([videoFrame.buffer isKindOfClass:[RTCCVPixelBuffer class]]) {
|
|
145
|
+
CVPixelBufferRef pixelBuffer = [((RTCCVPixelBuffer *)videoFrame.buffer) pixelBuffer];
|
|
146
|
+
CVPixelBufferRetain(pixelBuffer);
|
|
147
|
+
return [((RTCCVPixelBuffer *)videoFrame.buffer) pixelBuffer];
|
|
148
|
+
} else {
|
|
149
|
+
return [self pixelBufferFromI420:[videoFrame.buffer toI420]];
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
/**
|
|
154
|
+
* The CVPixelBufferRef returned from this function must be released when finished using it.
|
|
155
|
+
*/
|
|
156
|
+
- (CVPixelBufferRef)pixelBufferFromI420:(RTCI420Buffer *)i420Buffer {
|
|
157
|
+
if (_i420Converter == nil) {
|
|
158
|
+
I420Converter *converter = [[I420Converter alloc] init];
|
|
159
|
+
vImage_Error err = [converter prepareForAccelerateConversion];
|
|
160
|
+
|
|
161
|
+
if (err != kvImageNoError) {
|
|
162
|
+
NSLog(@"Error when preparing i420Converter: %ld", err);
|
|
163
|
+
return NULL;
|
|
164
|
+
}
|
|
165
|
+
|
|
166
|
+
_i420Converter = converter;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
CVPixelBufferRef convertedPixelBuffer = [_i420Converter convertI420ToPixelBuffer:i420Buffer];
|
|
170
|
+
|
|
171
|
+
return convertedPixelBuffer;
|
|
172
|
+
}
|
|
173
|
+
|
|
174
|
+
- (void)dealloc {
|
|
175
|
+
[_i420Converter unprepareForAccelerateConversion];
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
@end
|
|
@@ -1,20 +1,20 @@
|
|
|
1
|
-
#import <Foundation/Foundation.h>
|
|
2
|
-
#import "CaptureController.h"
|
|
3
|
-
#import "CapturerEventsDelegate.h"
|
|
4
|
-
|
|
5
|
-
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
-
|
|
7
|
-
extern NSString *const kRTCScreensharingSocketFD;
|
|
8
|
-
extern NSString *const kRTCAppGroupIdentifier;
|
|
9
|
-
|
|
10
|
-
@class ScreenCapturer;
|
|
11
|
-
|
|
12
|
-
@interface ScreenCaptureController : CaptureController
|
|
13
|
-
|
|
14
|
-
- (instancetype)initWithCapturer:(nonnull ScreenCapturer *)capturer;
|
|
15
|
-
- (void)startCapture;
|
|
16
|
-
- (void)stopCapture;
|
|
17
|
-
|
|
18
|
-
@end
|
|
19
|
-
|
|
20
|
-
NS_ASSUME_NONNULL_END
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import "CaptureController.h"
|
|
3
|
+
#import "CapturerEventsDelegate.h"
|
|
4
|
+
|
|
5
|
+
NS_ASSUME_NONNULL_BEGIN
|
|
6
|
+
|
|
7
|
+
extern NSString *const kRTCScreensharingSocketFD;
|
|
8
|
+
extern NSString *const kRTCAppGroupIdentifier;
|
|
9
|
+
|
|
10
|
+
@class ScreenCapturer;
|
|
11
|
+
|
|
12
|
+
@interface ScreenCaptureController : CaptureController
|
|
13
|
+
|
|
14
|
+
- (instancetype)initWithCapturer:(nonnull ScreenCapturer *)capturer;
|
|
15
|
+
- (void)startCapture;
|
|
16
|
+
- (void)stopCapture;
|
|
17
|
+
|
|
18
|
+
@end
|
|
19
|
+
|
|
20
|
+
NS_ASSUME_NONNULL_END
|
|
@@ -1,83 +1,83 @@
|
|
|
1
|
-
#if TARGET_OS_IOS
|
|
2
|
-
|
|
3
|
-
#import "ScreenCaptureController.h"
|
|
4
|
-
#import "ScreenCapturer.h"
|
|
5
|
-
#import "SocketConnection.h"
|
|
6
|
-
|
|
7
|
-
NSString *const kRTCScreensharingSocketFD = @"rtc_SSFD";
|
|
8
|
-
NSString *const kRTCAppGroupIdentifier = @"RTCAppGroupIdentifier";
|
|
9
|
-
|
|
10
|
-
@interface ScreenCaptureController ()
|
|
11
|
-
|
|
12
|
-
@property(nonatomic, retain) ScreenCapturer *capturer;
|
|
13
|
-
|
|
14
|
-
@end
|
|
15
|
-
|
|
16
|
-
@interface ScreenCaptureController (CapturerEventsDelegate)<CapturerEventsDelegate>
|
|
17
|
-
- (void)capturerDidEnd:(RTCVideoCapturer *)capturer;
|
|
18
|
-
@end
|
|
19
|
-
|
|
20
|
-
@interface ScreenCaptureController (Private)
|
|
21
|
-
|
|
22
|
-
@property(nonatomic, readonly) NSString *appGroupIdentifier;
|
|
23
|
-
|
|
24
|
-
@end
|
|
25
|
-
|
|
26
|
-
@implementation ScreenCaptureController
|
|
27
|
-
|
|
28
|
-
- (instancetype)initWithCapturer:(nonnull ScreenCapturer *)capturer {
|
|
29
|
-
self = [super init];
|
|
30
|
-
if (self) {
|
|
31
|
-
self.capturer = capturer;
|
|
32
|
-
self.deviceId = @"screen-capture";
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
return self;
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
- (void)dealloc {
|
|
39
|
-
[self.capturer stopCapture];
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
- (void)startCapture {
|
|
43
|
-
if (!self.appGroupIdentifier) {
|
|
44
|
-
return;
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
self.capturer.eventsDelegate = self;
|
|
48
|
-
NSString *socketFilePath = [self filePathForApplicationGroupIdentifier:self.appGroupIdentifier];
|
|
49
|
-
SocketConnection *connection = [[SocketConnection alloc] initWithFilePath:socketFilePath];
|
|
50
|
-
[self.capturer startCaptureWithConnection:connection];
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
- (void)stopCapture {
|
|
54
|
-
[self.capturer stopCapture];
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
- (NSDictionary *)getSettings {
|
|
58
|
-
return @{@"deviceId" : self.deviceId, @"groupId" : @"", @"frameRate" : @(30)};
|
|
59
|
-
}
|
|
60
|
-
// MARK: CapturerEventsDelegate Methods
|
|
61
|
-
|
|
62
|
-
- (void)capturerDidEnd:(RTCVideoCapturer *)capturer {
|
|
63
|
-
[self.eventsDelegate capturerDidEnd:capturer];
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// MARK: Private Methods
|
|
67
|
-
|
|
68
|
-
- (NSString *)appGroupIdentifier {
|
|
69
|
-
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
|
|
70
|
-
return infoDictionary[kRTCAppGroupIdentifier];
|
|
71
|
-
}
|
|
72
|
-
|
|
73
|
-
- (NSString *)filePathForApplicationGroupIdentifier:(nonnull NSString *)identifier {
|
|
74
|
-
NSURL *sharedContainer =
|
|
75
|
-
[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:identifier];
|
|
76
|
-
NSString *socketFilePath = [[sharedContainer URLByAppendingPathComponent:kRTCScreensharingSocketFD] path];
|
|
77
|
-
|
|
78
|
-
return socketFilePath;
|
|
79
|
-
}
|
|
80
|
-
|
|
81
|
-
@end
|
|
82
|
-
|
|
1
|
+
#if TARGET_OS_IOS
|
|
2
|
+
|
|
3
|
+
#import "ScreenCaptureController.h"
|
|
4
|
+
#import "ScreenCapturer.h"
|
|
5
|
+
#import "SocketConnection.h"
|
|
6
|
+
|
|
7
|
+
NSString *const kRTCScreensharingSocketFD = @"rtc_SSFD";
|
|
8
|
+
NSString *const kRTCAppGroupIdentifier = @"RTCAppGroupIdentifier";
|
|
9
|
+
|
|
10
|
+
@interface ScreenCaptureController ()
|
|
11
|
+
|
|
12
|
+
@property(nonatomic, retain) ScreenCapturer *capturer;
|
|
13
|
+
|
|
14
|
+
@end
|
|
15
|
+
|
|
16
|
+
@interface ScreenCaptureController (CapturerEventsDelegate)<CapturerEventsDelegate>
|
|
17
|
+
- (void)capturerDidEnd:(RTCVideoCapturer *)capturer;
|
|
18
|
+
@end
|
|
19
|
+
|
|
20
|
+
@interface ScreenCaptureController (Private)
|
|
21
|
+
|
|
22
|
+
@property(nonatomic, readonly) NSString *appGroupIdentifier;
|
|
23
|
+
|
|
24
|
+
@end
|
|
25
|
+
|
|
26
|
+
@implementation ScreenCaptureController
|
|
27
|
+
|
|
28
|
+
- (instancetype)initWithCapturer:(nonnull ScreenCapturer *)capturer {
|
|
29
|
+
self = [super init];
|
|
30
|
+
if (self) {
|
|
31
|
+
self.capturer = capturer;
|
|
32
|
+
self.deviceId = @"screen-capture";
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return self;
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
- (void)dealloc {
|
|
39
|
+
[self.capturer stopCapture];
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
- (void)startCapture {
|
|
43
|
+
if (!self.appGroupIdentifier) {
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
self.capturer.eventsDelegate = self;
|
|
48
|
+
NSString *socketFilePath = [self filePathForApplicationGroupIdentifier:self.appGroupIdentifier];
|
|
49
|
+
SocketConnection *connection = [[SocketConnection alloc] initWithFilePath:socketFilePath];
|
|
50
|
+
[self.capturer startCaptureWithConnection:connection];
|
|
51
|
+
}
|
|
52
|
+
|
|
53
|
+
- (void)stopCapture {
|
|
54
|
+
[self.capturer stopCapture];
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
- (NSDictionary *)getSettings {
|
|
58
|
+
return @{@"deviceId" : self.deviceId, @"groupId" : @"", @"frameRate" : @(30)};
|
|
59
|
+
}
|
|
60
|
+
// MARK: CapturerEventsDelegate Methods
|
|
61
|
+
|
|
62
|
+
- (void)capturerDidEnd:(RTCVideoCapturer *)capturer {
|
|
63
|
+
[self.eventsDelegate capturerDidEnd:capturer];
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// MARK: Private Methods
|
|
67
|
+
|
|
68
|
+
- (NSString *)appGroupIdentifier {
|
|
69
|
+
NSDictionary *infoDictionary = [[NSBundle mainBundle] infoDictionary];
|
|
70
|
+
return infoDictionary[kRTCAppGroupIdentifier];
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
- (NSString *)filePathForApplicationGroupIdentifier:(nonnull NSString *)identifier {
|
|
74
|
+
NSURL *sharedContainer =
|
|
75
|
+
[[NSFileManager defaultManager] containerURLForSecurityApplicationGroupIdentifier:identifier];
|
|
76
|
+
NSString *socketFilePath = [[sharedContainer URLByAppendingPathComponent:kRTCScreensharingSocketFD] path];
|
|
77
|
+
|
|
78
|
+
return socketFilePath;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
@end
|
|
82
|
+
|
|
83
83
|
#endif
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
#import <Foundation/Foundation.h>
|
|
2
|
-
#import <React/RCTViewManager.h>
|
|
3
|
-
|
|
4
|
-
API_AVAILABLE(ios(12))
|
|
5
|
-
@interface ScreenCapturePickerViewManager : RCTViewManager
|
|
6
|
-
|
|
7
|
-
@end
|
|
1
|
+
#import <Foundation/Foundation.h>
|
|
2
|
+
#import <React/RCTViewManager.h>
|
|
3
|
+
|
|
4
|
+
API_AVAILABLE(ios(12))
|
|
5
|
+
@interface ScreenCapturePickerViewManager : RCTViewManager
|
|
6
|
+
|
|
7
|
+
@end
|