8000 Adding createLocalMediaStream method to PeerConnectionFactory · model-lib/flutter-webrtc@b995939 · GitHub
[go: up one dir, main page]

Skip to content

Commit b995939

Browse files
author
Leonid Liansky
committed
Adding createLocalMediaStream method to PeerConnectionFactory
1 parent 3183206 commit b995939

File tree

6 files changed

+45
-0
lines changed

6 files changed

+45
-0
lines changed

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,8 @@ public void onMethodCall(MethodCall call, Result notSafeResult) {
179179
Map<String, Object> constraints = call.argument("constraints");
180180
ConstraintsMap constraintsMap = new ConstraintsMap(constraints);
181181
getUserMedia(constraintsMap, result);
182+
} else if (call.method.equals("createLocalMediaStream")) {
183+
createLocalMediaStream(result);
182184
}else if (call.method.equals("getSources")) {
183185
getSources(result);
184186
}else if (call.method.equals("createOffer")) {
@@ -934,6 +936,20 @@ public void getSources(Result result) {
934936
result.success(array);
935937
}
936938

939+
private void createLocalMediaStream(Result result) {
940+
String streamId = getNextStreamUUID();
941+
MediaStream mediaStream = mFactory.createLocalMediaStream(streamId);
942+
localStreams.put(streamId, mediaStream);
943+
944+
if (mediaStream == null) {
945+
result.error(/* type */ "createLocalMediaStream", "Failed to create new media stream", null);
946+
return;
947+
}
948+
Map<String, Object> resultMap = new HashMap<>();
949+
resultMap.put("streamId", mediaStream.getId());
950+
result.success(resultMap);
951+
}
952+
937953
public void mediaStreamTrackStop(final String id) {
938954
// Is this functionality equivalent to `mediaStreamTrackRelease()` ?
939955
// if so, we should merge this two and remove track from stream as well.

ios/Classes/FlutterRTCMediaStream.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@
99
-(void)getDisplayMedia:(NSDictionary *)constraints
1010
result:(FlutterResult)result;
1111

12+
-(void)createLocalMediaStream:(FlutterResult)result;
13+
1214
-(void)getSources:(FlutterResult)result;
1315

1416
-(void)mediaStreamTrackHasTorch:(RTCMediaStreamTrack *)track

ios/Classes/FlutterRTCMediaStream.m

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -431,6 +431,14 @@ -(void)getDisplayMedia:(NSDictionary *)constraints
431431
result(@{@"streamId": mediaStreamId, @"audioTracks" : audioTracks, @"videoTracks" : videoTracks });
432432
}
433433

434+
-(void)createLocalMediaStream:(FlutterResult)result{
435+
NSString *mediaStreamId = [[NSUUID UUID] UUIDString];
436+
RTCMediaStream *mediaStream = [self.peerConnectionFactory mediaStreamWithStreamId:mediaStreamId];
437+
438+
self.localStreams[mediaStreamId] = mediaStream;
439+
result(@{@"streamId": [mediaStream streamId] });
440+
}
441+
434442
-(void)getSources:(FlutterResult)result{
435443
NSMutableArray *sources = [NSMutableArray array];
436444
NSArray *videoDevices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo];

ios/Classes/FlutterWebRTCPlugin.m

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,8 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult) result
120120
NSDictionary* argsMap = call.arguments;
121121
NSDictionary* constraints = argsMap[@"constraints"];
122122
[self getDisplayMedia:constraints result:result];
123+
} else if ([@"createLocalMediaStream" isEqualToString:call.method]) {
124+
[self createLocalMediaStream:result];
123125
} else if ([@"getSources" isEqualToString:call.method]) {
124126
[self getSources:result];
125127
} else if ([@"mediaStreamGetTracks" isEqualToString:call.method]) {

lib/rtc_peerconnection_factory.dart

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import 'dart:async';
22
import 'package:flutter/services.dart';
33
import 'rtc_peerconnection.dart';
4+
import 'media_stream.dart';
45
import 'utils.dart';
56

67
Future<RTCPeerConnection> createPeerConnection(
@@ -26,3 +27,13 @@ Future<RTCPeerConnection> createPeerConnection(
2627
String peerConnectionId = response['peerConnectionId'];
2728
return new RTCPeerConnection(peerConnectionId, configuration);
2829
}
30+
31+
Future<MediaStream> createLocalMediaStream(String label) async {
32+
MethodChannel _channel = WebRTC.methodChannel();
33+
34+
final Map<dynamic, dynamic> response = await _channel.invokeMethod(
35+
'createLocalMediaStream'
36+
);
37+
38+
return new MediaStream(response['streamId'], label);
39+
}

lib/web/rtc_peerconnection_factory.dart

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'dart:async';
22
import 'dart:html' as HTML;
33

44
import 'rtc_peerconnection.dart';
5+
import 'media_stream.dart';
56

67
Future<RTCPeerConnection> createPeerConnection(
78
Map<String, dynamic> configuration,
@@ -17,3 +18,8 @@ Future<RTCPeerConnection> createPeerConnection(
1718
final jsRtcPc = HTML.RtcPeerConnection(configuration, constr);
1819
return RTCPeerConnection(jsRtcPc);
1920
}
21+
22+
Future<MediaStream> createLocalMediaStream(String label) async {
23+
final jsMs = HTML.MediaStream();
24+
return new MediaStream(jsMs);
25+
}

0 commit comments

Comments
 (0)
0