From 6981f605b36be67b68887deae153ec9985ce5664 Mon Sep 17 00:00:00 2001 From: davidliu Date: Mon, 6 Apr 2026 19:08:30 +0900 Subject: [PATCH] android: add registerTrack methods for 3rd party track registration --- .../java/com/oney/WebRTCModule/GetUserMediaImpl.java | 9 +++++++++ .../main/java/com/oney/WebRTCModule/WebRTCModule.java | 9 +++++++++ examples/GumTestApp/ios/GumTestApp/AppDelegate.m | 5 ++++- examples/GumTestApp/ios/GumTestApp/Info.plist | 1 + 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java b/android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java index 95d7687b3..7dd0515b3 100644 --- a/android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java +++ b/android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java @@ -469,6 +469,15 @@ void setVideoEffects(String trackId, ReadableArray names) { } } + void registerTrack(AudioTrack track, AudioSource source) { + tracks.put(track.id(), new TrackPrivate(track, source, null, null)); + } + + void registerTrack(VideoTrack track, VideoSource source, AbstractVideoCaptureController controller, + SurfaceTextureHelper surfaceTextureHelper) { + tracks.put(track.id(), new TrackPrivate(track, source, controller, surfaceTextureHelper)); + } + /** * Application/library-specific private members of local * {@code MediaStreamTrack}s created by {@code GetUserMediaImpl}. diff --git a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java index 2d63c37a6..a91b46530 100644 --- a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java +++ b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java @@ -477,6 +477,15 @@ public VideoTrack createVideoTrack(AbstractVideoCaptureController videoCaptureCo return getUserMediaImpl.createVideoTrack(videoCaptureController); } + public void registerTrack(AudioTrack track, AudioSource source) { + getUserMediaImpl.registerTrack(track, source); + } + + public void registerTrack(VideoTrack track, VideoSource source, AbstractVideoCaptureController controller, + SurfaceTextureHelper surfaceTextureHelper) { + getUserMediaImpl.registerTrack(track, source, controller, surfaceTextureHelper); + } + public void createStream( MediaStreamTrack[] tracks, GetUserMediaImpl.BiConsumer> successCallback) { getUserMediaImpl.createStream(tracks, successCallback); diff --git a/examples/GumTestApp/ios/GumTestApp/AppDelegate.m b/examples/GumTestApp/ios/GumTestApp/AppDelegate.m index 7a317776a..deca62def 100644 --- a/examples/GumTestApp/ios/GumTestApp/AppDelegate.m +++ b/examples/GumTestApp/ios/GumTestApp/AppDelegate.m @@ -1,7 +1,7 @@ #import "AppDelegate.h" #import - +#import "WebRTCModuleOptions.h" @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions @@ -10,6 +10,9 @@ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:( // You can add your custom initial props in the dictionary below. // They will be passed down to the ViewController used by React Native. self.initialProps = @{}; + + WebRTCModuleOptions* options = [WebRTCModuleOptions sharedInstance]; + options.enableMultitaskingCameraAccess = true; return [super application:application didFinishLaunchingWithOptions:launchOptions]; } diff --git a/examples/GumTestApp/ios/GumTestApp/Info.plist b/examples/GumTestApp/ios/GumTestApp/Info.plist index 5f10f30fe..075092a94 100644 --- a/examples/GumTestApp/ios/GumTestApp/Info.plist +++ b/examples/GumTestApp/ios/GumTestApp/Info.plist @@ -46,6 +46,7 @@ UIBackgroundModes audio + voip UILaunchStoryboardName LaunchScreen