Skip to content

Commit 7e53f47

Browse files
authored
Merge pull request #14 from flutter-webrtc/feat/rtp-capabilities-api
feat: Add RTCRtpCapabilities interface.
2 parents 798a57c + b5b1994 commit 7e53f47

File tree

7 files changed

+95
-1
lines changed

7 files changed

+95
-1
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+
[1.0.11] - 2023-01-30
5+
6+
* Add RTCRtpCapabilities interface.
7+
48
[1.0.10] - 2022-11-12
59

610
* Change MediaStream.clone to async.

lib/src/factory.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import 'media_recorder.dart';
22
import 'media_stream.dart';
33
import 'navigator.dart';
44
import 'rtc_peerconnection.dart';
5+
import 'rtc_rtp_capabilities.dart';
56
import 'rtc_video_renderer.dart';
67

78
abstract class RTCFactory {
@@ -11,6 +12,10 @@ abstract class RTCFactory {
1112

1213
Future<MediaStream> createLocalMediaStream(String label);
1314

15+
Future<RTCRtpCapabilities> getRtpSenderCapabilities(String kind);
16+
17+
Future<RTCRtpCapabilities> getRtpReceiverCapabilities(String kind);
18+
1419
MediaRecorder mediaRecorder();
1520

1621
VideoRenderer videoRenderer();

lib/src/rtc_rtp_capabilities.dart

Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
class RTCRtpCodecCapability {
2+
RTCRtpCodecCapability(
3+
{this.channels,
4+
required this.clockRate,
5+
required this.mimeType,
6+
this.sdpFmtpLine});
7+
factory RTCRtpCodecCapability.fromMap(Map<dynamic, dynamic> map) {
8+
return RTCRtpCodecCapability(
9+
channels: map['channels'],
10+
clockRate: map['clockRate'],
11+
mimeType: map['mimeType'],
12+
sdpFmtpLine: map['sdpFmtpLine'],
13+
);
14+
}
15+
num? channels;
16+
num clockRate;
17+
String mimeType;
18+
String? sdpFmtpLine;
19+
Map<String, dynamic> toMap() {
20+
return {
21+
if (channels != null) 'channels': channels,
22+
'clockRate': clockRate,
23+
'mimeType': mimeType,
24+
if (sdpFmtpLine != null) 'sdpFmtpLine': sdpFmtpLine,
25+
};
26+
}
27+
}
28+
29+
class RTCRtpHeaderExtensionCapability {
30+
RTCRtpHeaderExtensionCapability(this.uri);
31+
factory RTCRtpHeaderExtensionCapability.fromMap(Map<dynamic, dynamic> map) {
32+
return RTCRtpHeaderExtensionCapability(map['uri']);
33+
}
34+
String uri;
35+
Map<dynamic, dynamic> toMap() {
36+
return {
37+
'uri': uri,
38+
};
39+
}
40+
}
41+
42+
class RTCRtpCapabilities {
43+
RTCRtpCapabilities({this.codecs, this.headerExtensions, this.fecMechanisms});
44+
factory RTCRtpCapabilities.fromMap(Map<dynamic, dynamic> map) {
45+
var codecs = <RTCRtpCodecCapability>[];
46+
dynamic codecsMap = map['codecs'];
47+
codecsMap.forEach((params) {
48+
codecs.add(RTCRtpCodecCapability.fromMap(params));
49+
});
50+
var headerExtensions = <RTCRtpHeaderExtensionCapability>[];
51+
dynamic headerExtensionsMap = map['headerExtensions'];
52+
headerExtensionsMap.forEach((params) {
53+
headerExtensions.add(RTCRtpHeaderExtensionCapability.fromMap(params));
54+
});
55+
var fecMechanisms = <String>[];
56+
dynamic fecMechanismsMap = map['fecMechanisms'];
57+
fecMechanismsMap.forEach((params) {
58+
fecMechanisms.add(params);
59+
});
60+
return RTCRtpCapabilities(
61+
codecs: codecs,
62+
headerExtensions: headerExtensions,
63+
fecMechanisms: fecMechanisms);
64+
}
65+
List<RTCRtpCodecCapability>? codecs;
66+
List<RTCRtpHeaderExtensionCapability>? headerExtensions;
67+
List<String>? fecMechanisms;
68+
69+
Map<String, dynamic> toMap() {
70+
return {
71+
'codecs': codecs?.map((e) => e.toMap()).toList(),
72+
'headerExtensions': headerExtensions?.map((e) => e.toMap()).toList(),
73+
if (fecMechanisms != null) 'fecMechanisms': fecMechanisms,
74+
};
75+
}
76+
}

lib/src/rtc_rtp_parameters.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,7 @@ class RTCRtpEncoding {
5858
this.numTemporalLayers = 1,
5959
this.scaleResolutionDownBy = 1.0,
6060
this.ssrc,
61+
this.scalabilityMode,
6162
});
6263

6364
factory RTCRtpEncoding.fromMap(Map<dynamic, dynamic> map) => RTCRtpEncoding(
@@ -69,6 +70,7 @@ class RTCRtpEncoding {
6970
numTemporalLayers: map['numTemporalLayers'],
7071
scaleResolutionDownBy: map['scaleResolutionDownBy'],
7172
ssrc: map['ssrc'],
73+
scalabilityMode: map['scalabilityMode'],
7274
);
7375

7476
/// If non-null, this represents the RID that identifies this encoding layer.
@@ -101,6 +103,8 @@ class RTCRtpEncoding {
101103
/// Can't be changed between getParameters/setParameters.
102104
int? ssrc;
103105

106+
String? scalabilityMode;
107+
104108
Map<String, dynamic> toMap() => {
105109
'active': active,
106110
if (rid != null) 'rid': rid,
@@ -110,6 +114,7 @@ class RTCRtpEncoding {
110114
if (numTemporalLayers != null) 'numTemporalLayers': numTemporalLayers,
111115
if (scaleResolutionDownBy != null)
112116
'scaleResolutionDownBy': scaleResolutionDownBy,
117+
if (scalabilityMode != null) 'scalabilityMode': scalabilityMode,
113118
if (ssrc != null) 'ssrc': ssrc,
114119
};
115120
}

lib/src/rtc_rtp_transceiver.dart

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

33
import 'enums.dart';
44
import 'media_stream.dart';
5+
import 'rtc_rtp_capabilities.dart';
56
import 'rtc_rtp_parameters.dart';
67
import 'rtc_rtp_receiver.dart';
78
import 'rtc_rtp_sender.dart';
@@ -30,6 +31,8 @@ abstract class RTCRtpTransceiver {
3031

3132
Future<TransceiverDirection> getDirection();
3233

34+
Future<void> setCodecPreferences(List<RTCRtpCodecCapability> codecs);
35+
3336
String get mid;
3437

3538
RTCRtpSender get sender;

lib/webrtc_interface.dart

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ export 'src/rtc_dtmf_sender.dart';
1212
export 'src/rtc_ice_candidate.dart';
1313
export 'src/rtc_peerconnection.dart';
1414
export 'src/rtc_rtcp_parameters.dart';
15+
export 'src/rtc_rtp_capabilities.dart';
1516
export 'src/rtc_rtp_parameters.dart';
1617
export 'src/rtc_rtp_receiver.dart';
1718
export 'src/rtc_rtp_sender.dart';

pubspec.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
name: webrtc_interface
22
description: WebRTC Interface for Dart-Web/Flutter.
3-
version: 1.0.10
3+
version: 1.0.11
44
homepage: https://flutter-webrtc.org
55

66
environment:

0 commit comments

Comments
 (0)