Skip to content

Commit 8b03eb3

Browse files
authored
Merge pull request #4 from GetStream/chore/sync_0.12.3
Sync flutter_webrtc 0.12.3
2 parents d1792e1 + 27c229b commit 8b03eb3

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

58 files changed

+1057
-133
lines changed

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
# Changelog
22

33
--------------------------------------------
4+
[0.12.3] - 2024-11-29
5+
6+
* [iOS/Android/macOS] feat: Expose AV Processing and Sink native APIs.
7+
48
[0.12.2+1] - 2024-11-26
59

610
* [iOS/Android] Added video effects support

android/src/main/java/io/getstream/webrtc/flutter/FlutterRTCFrameCryptor.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -152,8 +152,6 @@ private FrameCryptorAlgorithm frameCryptorAlgorithmFromInt(int algorithm) {
152152
switch (algorithm) {
153153
case 0:
154154
return FrameCryptorAlgorithm.AES_GCM;
155-
case 1:
156-
return FrameCryptorAlgorithm.AES_CBC;
157155
default:
158156
return FrameCryptorAlgorithm.AES_GCM;
159157
}

android/src/main/java/io/getstream/webrtc/flutter/FlutterWebRTCPlugin.java

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,10 +11,14 @@
1111
import androidx.lifecycle.Lifecycle;
1212
import androidx.lifecycle.LifecycleOwner;
1313

14+
import io.getstream.webrtc.flutter.audio.AudioProcessingController;
1415
import io.getstream.webrtc.flutter.audio.AudioSwitchManager;
1516
import io.getstream.webrtc.flutter.utils.AnyThreadSink;
1617
import io.getstream.webrtc.flutter.utils.ConstraintsMap;
1718

19+
import org.webrtc.ExternalAudioProcessingFactory;
20+
import org.webrtc.MediaStreamTrack;
21+
1822
import io.flutter.embedding.engine.plugins.FlutterPlugin;
1923
import io.flutter.embedding.engine.plugins.activity.ActivityAware;
2024
import io.flutter.embedding.engine.plugins.activity.ActivityPluginBinding;
@@ -41,6 +45,25 @@ public class FlutterWebRTCPlugin implements FlutterPlugin, ActivityAware, EventC
4145
public EventChannel.EventSink eventSink;
4246

4347
public FlutterWebRTCPlugin() {
48+
sharedSingleton = this;
49+
}
50+
51+
public static FlutterWebRTCPlugin sharedSingleton;
52+
53+
public AudioProcessingController getAudioProcessingController() {
54+
return methodCallHandler.audioProcessingController;
55+
}
56+
57+
public MediaStreamTrack getTrackForId(String trackId, String peerConnectionId) {
58+
return methodCallHandler.getTrackForId(trackId, peerConnectionId);
59+
}
60+
61+
public LocalTrack getLocalTrack(String trackId) {
62+
return methodCallHandler.getLocalTrack(trackId);
63+
}
64+
65+
public MediaStreamTrack getRemoteTrack(String trackId) {
66+
return methodCallHandler.getRemoteTrack(trackId);
4467
}
4568

4669
/**

android/src/main/java/io/getstream/webrtc/flutter/GetUserMediaImpl.java

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@
4242

4343
import io.getstream.webrtc.flutter.audio.AudioSwitchManager;
4444
import io.getstream.webrtc.flutter.audio.AudioUtils;
45+
import io.getstream.webrtc.flutter.audio.LocalAudioTrack;
4546
import io.getstream.webrtc.flutter.record.AudioChannel;
4647
import io.getstream.webrtc.flutter.record.AudioSamplesInterceptor;
4748
import io.getstream.webrtc.flutter.record.MediaRecorderImpl;
@@ -56,6 +57,7 @@
5657
import io.getstream.webrtc.flutter.videoEffects.VideoFrameProcessor;
5758
import io.getstream.webrtc.flutter.videoEffects.VideoEffectProcessor;
5859
import io.getstream.webrtc.flutter.videoEffects.ProcessorProvider;
60+
import io.getstream.webrtc.flutter.video.LocalVideoTrack;
5961

6062
import org.webrtc.AudioSource;
6163
import org.webrtc.AudioTrack;
@@ -383,7 +385,9 @@ private ConstraintsMap getUserAudio(ConstraintsMap constraints, MediaStream stre
383385

384386
if (deviceId != null) {
385387
try {
386-
setPreferredInputDevice(deviceId);
388+
if (VERSION.SDK_INT >= VERSION_CODES.M) {
389+
setPreferredInputDevice(deviceId);
390+
}
387391
} catch (Exception e) {
388392
Log.e(TAG, "setPreferredInputDevice failed", e);
389393
}
@@ -392,7 +396,7 @@ private ConstraintsMap getUserAudio(ConstraintsMap constraints, MediaStream stre
392396
AudioTrack track = pcFactory.createAudioTrack(trackId, audioSource);
393397
stream.addTrack(track);
394398

395-
stateProvider.putLocalTrack(track.id(), track);
399+
stateProvider.putLocalTrack(track.id(), new LocalAudioTrack(track));
396400

397401
ConstraintsMap trackParams = new ConstraintsMap();
398402
trackParams.putBoolean("enabled", track.enabled());
@@ -403,7 +407,9 @@ private ConstraintsMap getUserAudio(ConstraintsMap constraints, MediaStream stre
403407
trackParams.putBoolean("remote", false);
404408

405409
if (deviceId == null) {
406-
deviceId = "" + getPreferredInputDevice(preferredInput);
410+
if (VERSION.SDK_INT >= VERSION_CODES.M) {
411+
deviceId = "" + getPreferredInputDevice(preferredInput);
412+
}
407413
}
408414

409415
ConstraintsMap settings = new ConstraintsMap();
@@ -522,7 +528,7 @@ protected void onReceiveResult(int requestCode, Bundle resultData) {
522528

523529
private void getDisplayMedia(final Result result, final MediaStream mediaStream, final Intent mediaProjectionData) {
524530
/* Create ScreenCapture */
525-
MediaStreamTrack[] tracks = new MediaStreamTrack[1];
531+
VideoTrack displayTrack = null;
526532
VideoCapturer videoCapturer = null;
527533
videoCapturer =
528534
new OrientationAwareScreenCapturer(
@@ -570,41 +576,31 @@ public void onStop() {
570576
String trackId = stateProvider.getNextTrackUUID();
571577
mVideoCapturers.put(trackId, info);
572578

573-
tracks[0] = pcFactory.createVideoTrack(trackId, videoSource);
579+
displayTrack = pcFactory.createVideoTrack(trackId, videoSource);
574580

575581
ConstraintsArray audioTracks = new ConstraintsArray();
576582
ConstraintsArray videoTracks = new ConstraintsArray();
577583
ConstraintsMap successResult = new ConstraintsMap();
578584

579-
for (MediaStreamTrack track : tracks) {
580-
if (track == null) {
581-
continue;
582-
}
585+
if (displayTrack != null) {
586+
String id = displayTrack.id();
583587

584-
String id = track.id();
588+
LocalVideoTrack displayLocalVideoTrack = new LocalVideoTrack(displayTrack);
589+
videoSource.setVideoProcessor(displayLocalVideoTrack);
585590

586-
if (track instanceof AudioTrack) {
587-
mediaStream.addTrack((AudioTrack) track);
588-
} else {
589-
mediaStream.addTrack((VideoTrack) track);
590-
}
591-
stateProvider.putLocalTrack(id, track);
591+
stateProvider.putLocalTrack(id, displayLocalVideoTrack);
592592

593593
ConstraintsMap track_ = new ConstraintsMap();
594-
String kind = track.kind();
594+
String kind = displayTrack.kind();
595595

596-
track_.putBoolean("enabled", track.enabled());
596+
track_.putBoolean("enabled", displayTrack.enabled());
597597
track_.putString("id", id);
598598
track_.putString("kind", kind);
599599
track_.putString("label", kind);
600-
track_.putString("readyState", track.state().toString());
600+
track_.putString("readyState", displayTrack.state().toString());
601601
track_.putBoolean("remote", false);
602602

603-
if (track instanceof AudioTrack) {
604-
audioTracks.pushMap(track_);
605-
} else {
606-
videoTracks.pushMap(track_);
607-
}
603+
videoTracks.pushMap(track_);
608604
}
609605

610606
String streamId = mediaStream.getId();
@@ -758,6 +754,13 @@ private ConstraintsMap getUserVideo(ConstraintsMap constraints, MediaStream medi
758754
deviceId = result.first;
759755
VideoCapturer videoCapturer = result.second;
760756

757+
if (facingMode == null && cameraEnumerator.isFrontFacing(deviceId)) {
758+
facingMode = "user";
759+
} else if (facingMode == null && cameraEnumerator.isBackFacing(deviceId)) {
760+
facingMode = "environment";
761+
}
762+
// else, leave facingMode as it was
763+
761764
PeerConnectionFactory pcFactory = stateProvider.getPeerConnectionFactory();
762765
VideoSource videoSource = pcFactory.createVideoSource(false);
763766
String threadName = Thread.currentThread().getName() + "_texture_camera_thread";
@@ -824,7 +827,10 @@ private ConstraintsMap getUserVideo(ConstraintsMap constraints, MediaStream medi
824827
VideoTrack track = pcFactory.createVideoTrack(trackId, videoSource);
825828
mediaStream.addTrack(track);
826829

827-
stateProvider.putLocalTrack(track.id(), track);
830+
LocalVideoTrack localVideoTrack = new LocalVideoTrack(track);
831+
videoSource.setVideoProcessor(localVideoTrack);
832+
833+
stateProvider.putLocalTrack(track.id(),localVideoTrack);
828834

829835
ConstraintsMap trackParams = new ConstraintsMap();
830836

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
package io.getstream.webrtc.flutter;
2+
3+
import org.webrtc.MediaStreamTrack;
4+
5+
public class LocalTrack {
6+
public LocalTrack(MediaStreamTrack track) {
7+
this.track = track;
8+
}
9+
10+
public MediaStreamTrack track;
11+
12+
public void dispose() {
13+
track.dispose();
14+
}
15+
16+
public boolean enabled() {
17+
return track.enabled();
18+
}
19+
20+
public void setEnabled(boolean enabled) {
21+
track.setEnabled(enabled);
22+
}
23+
24+
public String id() {
25+
return track.id();
26+
}
27+
28+
public String kind() {
29+
return track.kind();
30+
}
31+
}

0 commit comments

Comments
 (0)