Skip to content

Commit 8f5b6db

Browse files
authored
Merge pull request flutter-webrtc#203 from yonatann/unified-plan
enabled addTrack API for android and ios
2 parents 49751f6 + 3bf9998 commit 8f5b6db

File tree

6 files changed

+66
-11
lines changed

6 files changed

+66
-11
lines changed

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

Lines changed: 20 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -540,11 +540,21 @@ private Map<String, Object> rtpParametersToMap(RtpParameters rtpParameters){
540540
for(RtpParameters.Encoding encoding : rtpParameters.encodings){
541541
ConstraintsMap map = new ConstraintsMap();
542542
map.putBoolean("active",encoding.active);
543-
map.putInt("maxBitrateBps", encoding.maxBitrateBps);
544-
map.putInt("minBitrateBps", encoding.minBitrateBps);
545-
map.putInt("maxFramerate", encoding.maxFramerate);
546-
map.putInt("numTemporalLayers", encoding.numTemporalLayers);
547-
map.putDouble("scaleResolutionDownBy", encoding.scaleResolutionDownBy);
543+
if (encoding.maxBitrateBps != null) {
544+
map.putInt("maxBitrateBps", encoding.maxBitrateBps);
545+
}
546+
if (encoding.minBitrateBps != null) {
547+
map.putInt("minBitrateBps", encoding.minBitrateBps);
548+
}
549+
if (encoding.maxFramerate != null) {
550+
map.putInt("maxFramerate", encoding.maxFramerate);
551+
}
552+
if (encoding.numTemporalLayers != null) {
553+
map.putInt("numTemporalLayers", encoding.numTemporalLayers);
554+
}
555+
if (encoding.scaleResolutionDownBy != null) {
556+
map.putDouble("scaleResolutionDownBy", encoding.scaleResolutionDownBy);
557+
}
548558
map.putLong("ssrc", encoding.ssrc);
549559
encodings.pushMap(map);
550560
}
@@ -581,8 +591,10 @@ private Map<String, Object> mediaTrackToMap(MediaStreamTrack track){
581591
private Map<String, Object> dtmfSenderToMap(DtmfSender dtmfSender, String id){
582592
ConstraintsMap info = new ConstraintsMap();
583593
info.putString("dtmfSenderId",id);
584-
info.putInt("interToneGap", dtmfSender.interToneGap());
585-
info.putInt("duration",dtmfSender.duration());
594+
if (dtmfSender != null) {
595+
info.putInt("interToneGap", dtmfSender.interToneGap());
596+
info.putInt("duration", dtmfSender.duration());
597+
}
586598
return info.toMap();
587599
}
588600

@@ -599,6 +611,7 @@ private Map<String, Object> rtpSenderToMap(RtpSender sender){
599611
private Map<String, Object> rtpReceiverToMap(RtpReceiver receiver){
600612
ConstraintsMap info = new ConstraintsMap();
601613
info.putString("receiverId", receiver.id());
614+
info.putMap("rtpParameters", rtpParametersToMap(receiver.getParameters()));
602615
info.putMap("track", mediaTrackToMap(receiver.track()));
603616
return info.toMap();
604617
}

ios/Classes/FlutterWebRTCPlugin.m

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -149,6 +149,48 @@ - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult) result
149149
message:[NSString stringWithFormat:@"Error: peerConnection or mediaStream not found!"]
150150
details:nil]);
151151
}
152+
} else if ([@"addTrack" isEqualToString:call.method]) {
153+
NSDictionary* argsMap = call.arguments;
154+
155+
NSString* peerConnectionId = ((NSString*)argsMap[@"peerConnectionId"]);
156+
NSString* trackId = ((NSString*)argsMap[@"trackId"]);
157+
NSArray<NSString *> *streamIds = ((NSArray<NSString *>*)argsMap[@"streamIds"]);
158+
159+
RTCPeerConnection *peerConnection = self.peerConnections[peerConnectionId];
160+
RTCMediaStreamTrack *track = self.localTracks[trackId];
161+
162+
if (peerConnection && track) {
163+
RTCRtpSender* sender = [peerConnection addTrack:track streamIds:streamIds];
164+
165+
// TODO: properly map sender
166+
result(@{
167+
@"senderId": sender.senderId,
168+
@"ownsTrack": @(YES),
169+
@"dtmfSender": @{
170+
@"dtmfSenderId": sender.senderId,
171+
},
172+
@"rtpParameters": @{
173+
@"encodings": @[],
174+
@"headerExtensions": @[],
175+
@"codecs": @[],
176+
@"rtcp": @{
177+
178+
},
179+
},
180+
@"track": @{
181+
@"id": sender.track.trackId,
182+
@"kind": sender.track.kind,
183+
@"label": sender.track.trackId,
184+
@"enabled": @(sender.track.isEnabled),
185+
@"remote": @(YES),
186+
@"readyState": @"live"
187+
}
188+
});
189+
} else {
190+
result([FlutterError errorWithCode:[NSString stringWithFormat:@"%@Failed",call.method]
191+
message:[NSString stringWithFormat:@"Error: peerConnection or track not found!"]
192+
details:nil]);
193+
}
152194
} else if ([@"removeStream" isEqualToString:call.method]) {
153195
NSDictionary* argsMap = call.arguments;
154196

ios/flutter_webrtc.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ A new flutter plugin project.
1616
s.public_header_files = 'Classes/**/*.h'
1717
s.dependency 'Flutter'
1818
s.dependency 'libyuv-iOS'
19-
s.dependency 'GoogleWebRTC', '1.1.27299'
19+
s.dependency 'GoogleWebRTC', '1.1.29229'
2020
s.ios.deployment_target = '9.0'
2121
s.static_framework = true
2222
end

lib/media_stream_track.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class MediaStreamTrack {
1414
/// public:
1515
factory MediaStreamTrack.fromMap(Map<dynamic, dynamic> map) {
1616
return new MediaStreamTrack(
17-
map['trackId'], map['label'], map['kind'], map['enabled']);
17+
map['id'], map['label'], map['kind'], map['enabled']);
1818
}
1919

2020
MediaStreamTrack(this._trackId, this._label, this._kind, this._enabled);

lib/rtc_rtp_receiver.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ class RTCRtpReceiver {
3939
OnFirstPacketReceivedCallback onFirstPacketReceived;
4040

4141
factory RTCRtpReceiver.fromMap(Map<dynamic, dynamic> map) {
42-
MediaStreamTrack track = MediaStreamTrack.fromMap(map['trackInfo']);
42+
MediaStreamTrack track = MediaStreamTrack.fromMap(map['track']);
4343
RTCRtpParameters parameters =
4444
RTCRtpParameters.fromMap(map['rtpParameters']);
4545
return RTCRtpReceiver(map['receiverId'], track, parameters);

lib/rtc_rtp_sender.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ class RTCRtpSender {
1919
return new RTCRtpSender(
2020
map['senderId'],
2121
MediaStreamTrack.fromMap(map['track']),
22-
RTCDTMFSender.fromMap(map['dtmfSender']),
22+
RTCDTMFSender.fromMap(Map<String, dynamic>.from(map['dtmfSender'])),
2323
RTCRtpParameters.fromMap(map['rtpParameters']),
2424
map['ownsTrack']);
2525
}

0 commit comments

Comments
 (0)