8000 Fix #122 · model-lib/flutter-webrtc@86c42d0 · GitHub
[go: up one dir, main page]

Skip to content

Commit 86c42d0

Browse files
committed
1 parent d5e94c8 commit 86c42d0

File tree

2 files changed

+101
-2
lines changed

2 files changed

+101
-2
lines changed

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

Lines changed: 55 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -247,7 +247,15 @@ public void onMethodCall(MethodCall call, Result notSafeResult) {
247247
track.setEnabled(enabled);
248248
}
249249
result.success(null);
250-
}else if (call.method.equals("trackDispose")) {
250+
}else if (call.method.equals("mediaStreamAddTrack")) {
251+
String streamId = call.argument("streamId");
252+
String trackId = call.argument("trackId");
253+
mediaStreamAddTrack(streamId, trackId, result);
254+
}else if (call.method.equals("mediaStreamRemoveTrack")) {
255+
String streamId = call.argument("streamId");
256+
String trackId = call.argument("trackId");
257+
mediaStreamRemoveTrack(streamId,trackId, result);
258+
} else if (call.method.equals("trackDispose")) {
251259
String trackId = call.argument("trackId");
252260
localTracks.remove(trackId);
253261
result.success(null);
@@ -931,6 +939,52 @@ public void mediaStreamTrackEnableSpeakerphone(final String id, boolean enabled)
931939
}
932940
}
933941

942+
public void mediaStreamAddTrack(final String streaemId, final String trackId, Result result) {
943+
MediaStream mediaStream = localStreams.get(streaemId);
944+
if (mediaStream != null) {
945+
MediaStreamTrack track = localTracks.get(trackId);
946+
if (track != null){
947+
if (track.kind().equals("audio")) {
948+
mediaStream.addTrack((AudioTrack) track);
949+
} else if (track.kind().equals("video")) {
950+
mediaStream.addTrack((VideoTrack) track);
951+
}
952+
} else {
953+
String errorMsg = "mediaStreamAddTrack() track [" + trackId + "] is null";
954+
Log.d(TAG, errorMsg);
955+
result.error("mediaStreamAddTrack", errorMsg, null);
956+
}
957+
} else {
958+
String errorMsg = "mediaStreamAddTrack() stream [" + trackId + "] is null";
959+
Log.d(TAG, errorMsg);
960+
result.error("mediaStreamAddTrack", errorMsg, null);
961+
}
962+
result.success(null);
963+
}
964+
965+
public void mediaStreamRemoveTrack(final String streaemId, final String trackId, Result result) {
966+
MediaStream mediaStream = localStreams.get(streaemId);
967+
if (mediaStream != null) {
968+
MediaStreamTrack track = localTracks.get(trackId);
969+
if (track != null) {
970+
if (track.kind().equals("audio")) {
971+
mediaStream.removeTrack((AudioTrack) track);
972+
} else if (track.kind().equals("video")) {
973+
mediaStream.removeTrack((VideoTrack) track);
974+
}
975+
} else {
976+
String errorMsg = "mediaStreamRemoveTrack() track [" + trackId + "] is null";
977+
Log.d(TAG, errorMsg);
978+
result.error("mediaStreamRemoveTrack", errorMsg, null);
979+
}
980+
} else {
981+
String errorMsg = "mediaStreamRemoveTrack() stream [" + trackId + "] is null";
982+
Log.d(TAG, errorMsg);
983+
result.error("mediaStreamRemoveTrack", errorMsg, null);
984+
}
985+
result.success(null);
986+
}
987+
934988
public void mediaStreamTrackRelease(final String streamId, final String _trackId) {
935989
MediaStream stream = localStreams.get(streamId);
936990
if (stream == null) {

ios/Classes/FlutterWebRTCPlugin.m

Lines changed: 46 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -300,7 +300,52 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult) result
300300
track.isEnabled = enabled.boolValue;
301301
}
302302
result(nil);
303-
}else if([@"trackDispose" isEqualToString:call.method]){
303+
}else if([@"mediaStreamAddTrack" isEqualToString:call.method]){
304+
NSDictionary* argsMap = call.arguments;
305+
E294 NSString* streamId = argsMap[@"streamId"];
306+
NSString* trackId = argsMap[@"trackId"];
307+
308+
RTCMediaStream *stream = self.localStreams[streamId];
309+
if (stream) {
310+
RTCMediaStreamTrack *track = self.localTracks[trackId];
311+
if(track != nil) {
312+
if([track isKindOfClass:[RTCAudioTrack class]]) {
313+
RTCAudioTrack *audioTrack = (RTCAudioTrack *)track;
314+
[stream addAudioTrack:audioTrack];
315+
} else if([track isKindOfClass:[RTCVideoTrack class]]){
316+
RTCVideoTrack *videoTrack = (RTCVideoTrack *)track;
317+
[stream addVideoTrack:videoTrack];
318+
}
319+
} else {
320+
result([FlutterError errorWithCode:@"mediaStreamAddTrack: Track is nil" message:nil details:nil]);
321+
}
322+
} else {
323+
result([FlutterError errorWithCode:@"mediaStreamAddTrack: Stream is nil" message:nil details:nil]);
324+
}
325+
result(nil);
326+
}else if([@"mediaStreamRemoveTrack" isEqualToString:call.method]){
327+
NSDictionary* argsMap = call.arguments;
328+
NSString* streamId = argsMap[@"streamId"];
329+
NSString* trackId = argsMap[@"trackId"];
330+
RTCMediaStream *stream = self.localStreams[streamId];
331+
if (stream) {
332+
RTCMediaStreamTrack *track = self.localTracks[trackId];
333+
if(track != nil) {
334+
if([track isKindOfClass:[RTCAudioTrack class]]) {
335+
RTCAudioTrack *audioTrack = (RTCAudioTrack *)track;
336+
[stream removeAudioTrack:audioTrack];
337+
} else if([track isKindOfClass:[RTCVideoTrack class]]){
338+
RTCVideoTrack *videoTrack = (RTCVideoTrack *)track;
339+
[stream removeVideoTrack:videoTrack];
340+
}
341+
} else {
342+
result([FlutterError errorWithCode:@"mediaStreamRemoveTrack: Track is nil" message:nil details:nil]);
343+
}
344+
} else {
345+
result([FlutterError errorWithCode:@"mediaStreamRemoveTrack: Stream is nil" message:nil details:nil]);
346+
}
347+
result(nil);
348+
} else if([@"trackDispose" isEqualToString:call.method]){
304349
NSDictionary* argsMap = call.arguments;
305350
NSString* trackId = argsMap[@"trackId"];
306351
[self.localTracks removeObjectForKey:trackId];

0 commit comments

Comments
 (0)
0