8000 Feat/support scalability mode (#1442) · liliBestCoder/flutter-webrtc@b55f919 · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit b55f919

Browse files
authored
Feat/support scalability mode (flutter-webrtc#1442)
* scalability-mode for android. * for darwin. * wip. * bump version for dart-webrtc/webrtc-interface. * add win/linux so. * update. * win/linux. * scalabilityMode for cpp. * fix SVC codecs sending. * remove framecryptor changes. * fix compile.
1 parent 9ce386e commit b55f919

File tree

12 files changed

+79
-11
lines changed

12 files changed

+79
-11
lines changed

android/build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ android {
5252
}
5353

5454
dependencies {
55-
implementation 'io.github.webrtc-sdk:android:114.5735.02'
55+
implementation 'io.github.webrtc-sdk:android:114.5735.03'
5656
implementation 'com.github.davidliu:audioswitch:d18e3e31d427c27f1593030e024b370bf24480fd'
5757
implementation 'androidx.annotation:annotation:1.1.0'
5858
implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"

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

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -659,6 +659,10 @@ private RtpParameters.Encoding mapToEncoding(Map<String, Object> parameters) {
659659
encoding.scaleResolutionDownBy = (Double) parameters.get("scaleResolutionDownBy");
660660
}
661661

662+
if (parameters.get("scalabilityMode") != null) {
663+
encoding.scalabilityMode = (String) parameters.get("scalabilityMode");
664+
}
665+
662666
return encoding;
663667
}
664668

@@ -680,7 +684,7 @@ private RtpTransceiver.RtpTransceiverInit mapToRtpTransceiverInit(Map<String, Ob
680684
if (encodingsParams != null) {
681685
for (int i = 0; i < encodingsParams.size(); i++) {
682686
Map<String, Object> params = encodingsParams.get(i);
683-
sendEncodings.add(0, mapToEncoding(params));
687+
sendEncodings.add(mapToEncoding(params));
684688
}
685689
init = new RtpTransceiver.RtpTransceiverInit(stringToTransceiverDirection(direction), streamIds, sendEncodings);
686690
} else {

common/cpp/src/flutter_peerconnection.cc

Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -148,6 +148,8 @@ EncodableMap rtpParametersToMap(
148148
EncodableValue(static_cast<int>(encoding->max_framerate()));
149149
map[EncodableValue("scaleResolutionDownBy")] =
150150
EncodableValue(encoding->scale_resolution_down_by());
151+
map[EncodableValue("scalabilityMode")] =
152+
EncodableValue(encoding->scalability_mode().std_string());
151153
map[EncodableValue("ssrc")] =
152154
EncodableValue(static_cast<int>(encoding->ssrc()));
153155
encodings_info.push_back(EncodableValue(map));
@@ -554,6 +556,11 @@ FlutterPeerConnection::mapToEncoding(const EncodableMap& params) {
554556
encoding->set_scale_resolution_down_by(GetValue<double>(value));
555557
}
556558

559+
value = findEncodableValue(params, "scalabilityMode");
560+
if (!value.IsNull()) {
561+
encoding->set_scalability_mode(GetValue<std::string>(value));
562+
}
563+
557564
return encoding;
558565
}
559566

@@ -692,7 +699,14 @@ scoped_refptr<RTCRtpParameters> FlutterPeerConnection::updateRtpParameters(
692699
if (!value.IsNull()) {
693700
param->set_active(GetValue<bool>(value));
694701
}
695-
702+
value = findEncodableValue(map, "rid");
703+
if (!value.IsNull()) {
704+
param->set_rid(GetValue<std::string>(value));
705+
}
706+
value = findEncodableValue(map, "ssrc");
707+
if (!value.IsNull()) {
708+
param->set_ssrc(GetValue<int>(value));
709+
}
696710
value = findEncodableValue(map, "maxBitrate");
697711
if (!value.IsNull()) {
698712
param->set_max_bitrate_bps(GetValue<int>(value));
@@ -715,7 +729,10 @@ scoped_refptr<RTCRtpParameters> FlutterPeerConnection::updateRtpParameters(
715729
if (!value.IsNull()) {
716730
param->set_scale_resolution_down_by(GetValue<double>(value));
717731
}
718-
732+
value = findEncodableValue(map, "scalabilityMode");
733+
if (!value.IsNull()) {
734+
param->set_scalability_mode(GetValue<std::string>(value));
735+
}
719736
encoding++;
720737
}
721738
}

common/darwin/Classes/FlutterWebRTCPlugin.m

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1936,6 +1936,11 @@ - (RTCRtpEncodingParameters*)mapToEncoding:(NSDictionary*)map {
19361936
if (map[@"scaleResolutionDownBy"] != nil) {
19371937
[encoding setScaleResolutionDownBy:(NSNumber*)map[@"scaleResolutionDownBy"]];
19381938
}
1939+
1940+
if (map[@"scalabilityMode"] != nil) {
1941+
[encoding setScalabilityMode:(NSString*)map[@"scalabilityMode"]];
1942+
}
1943+
19391944
return encoding;
19401945
}
19411946

@@ -1957,7 +1962,7 @@ - (RTCRtpTransceiverInit*)mapToTransceiverInit:(NSDictionary*)map {
19571962
if (encodingsParams != nil) {
19581963
NSMutableArray<RTCRtpEncodingParameters*>* sendEncodings = [[NSMutableArray alloc] init];
19591964
for (NSDictionary* map in encodingsParams) {
1960-
[sendEncodings insertObject:[self mapToEncoding:map] atIndex:0];
1965+
[sendEncodings addObject:[self mapToEncoding:map]];
19611966
}
19621967
[init setSendEncodings:sendEncodings];
19631968
}

ios/flutter_webrtc.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ A new flutter plugin project.
1515
s.source_files = 'Classes/**/*'
1616
s.public_header_files = 'Classes/**/*.h'
1717
s.dependency 'Flutter'
18-
s.dependency 'WebRTC-SDK', '114.5735.02'
18+
s.dependency 'WebRTC-SDK', '114.5735.06'
1919
s.ios.deployment_target = '11.0'
2020
s.static_framework = true
2121
end

lib/src/native/frame_cryptor_impl.dart

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,37 @@ class KeyProviderImpl implements KeyProvider {
6363
throw 'Unable to KeyProviderImpl::dispose: ${e.message}';
6464
}
6565
}
66+
67+
@override
68+
Future<Uint8List> exportKey(
69+
{required String participantId, required int index}) {
70+
// TODO: implement exportKey
71+
throw UnimplementedError();
72+
}
73+
74+
@override
75+
Future<Uint8List> exportSharedKey({int index = 0}) {
76+
// TODO: implement exportSharedKey
77+
throw UnimplementedError();
78+
}
79+
80+
@override
81+
Future<Uint8List> ratchetSharedKey({int index = 0}) {
82+
// TODO: implement ratchetSharedKey
83+
throw UnimplementedError();
84+
}
85+
86+
@override
87+
Future<void> setSharedKey({required Uint8List key, int index = 0}) {
88+
// TODO: implement setSharedKey
89+
throw UnimplementedError();
90+
}
91+
92+
@override
93+
Future<void> setSifTrailer({required Uint8List trailer}) {
94+
// TODO: implement setSifTrailer
95+
throw UnimplementedError();
96+
}
6697
}
6798

6899
class FrameCryptorFactoryImpl implements FrameCryptorFactory {

macos/flutter_webrtc.podspec

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,6 @@ A new flutter plugin project.
1515
s.source_files = ['Classes/**/*']
1616

1717
s.dependency 'FlutterMacOS'
18-
s.dependency 'WebRTC-SDK', '114.5735.02'
18+
s.dependency 'WebRTC-SDK', '114.5735.06'
1919
s.osx.deployment_target = '10.13'
2020
end

pubspec.yaml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,11 +8,11 @@ environment:
88

99
dependencies:
1010
collection: ^1.17.1
11-
dart_webrtc: 1.1.2
11+
dart_webrtc: 1.1.3
1212
flutter:
1313
sdk: flutter
1414
path_provider: ^2.0.2
15-
webrtc_interface: 1.1.1
15+
webrtc_interface: 1.1.2
1616

1717
dev_dependencies:
1818
flutter_test:

third_party/libwebrtc/include/rtc_frame_cryptor.h

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,29 @@ struct KeyProviderOptions {
1818
vector<uint8_t> ratchet_salt;
1919
vector<uint8_t> uncrypted_magic_bytes;
2020
int ratchet_window_size;
21+
int failure_tolerance;
2122
KeyProviderOptions()
2223
: shared_key(false),
2324
ratchet_salt(vector<uint8_t>()),
24-
ratchet_window_size(0) {}
25+
ratchet_window_size(0),
26+
failure_tolerance(-1) {}
2527
KeyProviderOptions(KeyProviderOptions& copy)
2628
: shared_key(copy.shared_key),
2729
ratchet_salt(copy.ratchet_salt),
28-
ratchet_window_size(copy.ratchet_window_size) {}
30+
ratchet_window_size(copy.ratchet_window_size),
31+
failure_tolerance(copy.failure_tolerance) {}
2932
};
3033

3134
/// Shared secret key for frame encryption.
3235
class KeyProvider : public RefCountInterface {
3336
public:
3437
LIB_WEBRTC_API static scoped_refptr<KeyProvider> Create(KeyProviderOptions*);
38+
39+
virtual bool SetSharedKey(int index, vector<uint8_t> key) = 0;
40+
41+
virtual vector<uint8_t> RatchetSharedKey(int key_index) = 0;
42+
43+
virtual vector<uint8_t> ExportSharedKey(int key_index) = 0;
3544

3645
/// Set the key at the given index.
3746
virtual bool SetKey(const string participant_id,
@@ -44,6 +53,8 @@ class KeyProvider : public RefCountInterface {
4453
virtual vector<uint8_t> ExportKey(const string participant_id,
4554
int key_index) = 0;
4655

56+
virtual void SetSifTrailer(vector<uint8_t> trailer) = 0;
57+
4758
protected:
4859
virtual ~KeyProvider() {}
4960
};
Binary file not shown.
Binary file not shown.
-17 KB
Binary file not shown.

0 commit comments

Comments
 (0)
0