8000 Multiple bug fixes and improvements (Thanks @wskfjtheqian) · tmthecoder/flutter-webrtc@d47e5af · GitHub
[go: up one dir, main page]

Skip to content

Commit d47e5af

Browse files
authored
Multiple bug fixes and improvements (Thanks @wskfjtheqian)
- Change getLocalDescription,getRemoteDescription,RTCRtpSenderWeb.track returns to nullable. - Fixed bug in RTCPeerConnectionWeb.removeTrack. - Change MediaStreamTrack.captureFrame returns to ByteBuffer to compatible with web API. - Do null safety check in onRemoveStream,onRemoveTrack and MediaStream.getTrackById. - Add reStartCamera method when the camera is preempted by other apps. - Refactored RTCVideoRendererWeb and RTCVideoViewWeb, using video and audio HTML tags to render audio and video streams separately.
1 parent 6ae3c5b commit d47e5af

17 files changed

+719
-443
lines changed

android/src/main/java/com/cloudwebrtc/webrtc/FlutterRTCVideoRenderer.java

Lines changed: 30 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111

1212
import org.webrtc.EglBase;
1313
import org.webrtc.MediaStream;
14+
import org.webrtc.MediaStreamTrack;
1415
import org.webrtc.RendererCommon.RendererEvents;
1516
import org.webrtc.VideoTrack;
1617

@@ -23,13 +24,14 @@ public class FlutterRTCVideoRenderer implements EventChannel.StreamHandler {
2324
private final SurfaceTexture texture;
2425
private TextureRegistry.SurfaceTextureEntry entry;
2526
private int id = -1;
27+
private MediaStream mediaStream;
2628

27-
public void Dispose(){
29+
public void Dispose() {
2830
//destroy
29-
if(surfaceTextureRenderer != null) {
31+
if (surfaceTextureRenderer != null) {
3032
surfaceTextureRenderer.release();
3133
}
32-
if(eventChannel != null)
34+
if (eventChannel != null)
3335
eventChannel.setStreamHandler(null);
3436

3537
eventSink = null;
@@ -43,9 +45,9 @@ public void Dispose(){
4345
private RendererEvents rendererEvents;
4446

4547
private void listenRendererEvents() {
46-
rendererEvents = new RendererEvents() {
48+
rendererEvents = new RendererEvents() {
4749
private int _rotation = -1;
48-
private int _width = 0, _height = 0;
50+
private int _width = 0, _height = 0;
4951

5052
@Override
5153
public void onFirstFrameRendered() {
@@ -60,8 +62,8 @@ public void onFrameResolutionChanged(
6062
int videoWidth, int videoHeight,
6163
int rotation) {
6264

63-
if(eventSink != null) {
64-
if(_width != videoWidth || _height != videoHeight) {
65+
if (eventSink != null) {
66+
if (_width != videoWidth || _height != videoHeight) {
6567
ConstraintsMap params = new ConstraintsMap();
6668
params.putString("event", "didTextureChangeVideoSize");
6769
params.putInt("id", id);
@@ -72,7 +74,7 @@ public void onFrameResolutionChanged(
7274
eventSink.success(params.toMap());
7375
}
7476

75-
if(_rotation != rotation) {
77+
if (_rotation != rotation) {
7678
ConstraintsMap params2 = new ConstraintsMap();
7779
params2.putString("event", "didTextureChangeRotation");
7880
params2.putInt("id", id);
@@ -84,6 +86,7 @@ public void onFrameResolutionChanged(
8486
}
8587
};
8688
}
89+
8790
private SurfaceTextureRenderer surfaceTextureRenderer;
8891

8992
/**
@@ -105,11 +108,11 @@ public FlutterRTCVideoRenderer(SurfaceTexture texture, TextureRegistry.SurfaceTe
105108
this.entry = entry;
106109
}
107110

108-
public void setEventChannel(EventChannel eventChannel){
111+
public void setEventChannel(EventChannel eventChannel) {
109112
this.eventChannel = eventChannel;
110113
}
111114

112-
public void setId(int id){
115+
public void setId(int id) {
113116
this.id = id;
114117
}
115118

@@ -137,11 +140,11 @@ private void removeRendererFromVideoTrack() {
137140
* specified {@code mediaStream}.
138141
*
139142
* @param mediaStream The {@code MediaStream} to be rendered by this
140-
* {@code FlutterRTCVideoRenderer} or {@code null}.
143+
* {@code FlutterRTCVideoRenderer} or {@code null}.
141144
*/
142145
public void setStream(MediaStream mediaStream) {
143146
VideoTrack videoTrack;
144-
147+
this.mediaStream = mediaStream;
145148
if (mediaStream == null) {
146149
videoTrack = null;
147150
} else {
@@ -157,9 +160,9 @@ public void setStream(MediaStream mediaStream) {
157160
* Sets the {@code VideoTrack} to be rendered by this {@code FlutterRTCVideoRenderer}.
158161
*
159162
* @param videoTrack The {@code VideoTrack} to be rendered by this
160-
* {@code FlutterRTCVideoRenderer} or {@code null}.
163+
* {@code FlutterRTCVideoRenderer} or {@code null}.
161164
*/
162-
private void setVideoTrack(VideoTrack videoTrack) {
165+
public void setVideoTrack(VideoTrack videoTrack) {
163166
VideoTrack oldValue = this.videoTrack;
164167

165168
if (oldValue != videoTrack) {
@@ -202,4 +205,17 @@ private void tryAddRendererToVideoTrack() {
202205
}
203206
}
204207

208+
public boolean checkMediaStream(String id) {
209+
if (null == id || null == mediaStream) {
210+
return false;
211+
}
212+
return id.equals(mediaStream.getId());
213+
}
214+
215+
public boolean checkVideoTrack(String id) {
216+
if (null == id || null == videoTrack) {
217+
return false;
218+
}
219+
return id.equals(videoTrack.id());
220+
}
205221
}

0 commit comments

Comments
 (0)
0