Skip to content

Commit d49a038

Browse files
committed
ios: handle audio media constraints
1 parent 71d10c1 commit d49a038

File tree

3 files changed

+41
-33
lines changed

3 files changed

+41
-33
lines changed

android/src/main/java/com/oney/WebRTCModule/GetUserMediaImpl.java

Lines changed: 17 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -95,12 +95,24 @@ private AudioTrack createAudioTrack(ReadableMap constraints) {
9595
PeerConnectionFactory pcFactory = webRTCModule.mFactory;
9696
MediaConstraints peerConstraints = webRTCModule.constraintsForOptions(audioConstraintsMap);
9797

98+
// Convert given constraints into the internal webrtc media constraints.
9899
// Default to on if not specified.
99-
// MediaConstraints uses first value it finds.
100-
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googAutoGainControl", "true"));
101-
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googNoiseSuppression", "true"));
102-
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googEchoCancellation", "true"));
103-
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googHighpassFilter", "true"));
100+
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googAutoGainControl",
101+
audioConstraintsMap.hasKey("audioGainControl")
102+
? audioConstraintsMap.getDynamic("autoGainControl").asString()
103+
: "true"));
104+
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googNoiseSuppression",
105+
audioConstraintsMap.hasKey("noiseSuppression")
106+
? audioConstraintsMap.getDynamic("noiseSuppression").asString()
107+
: "true"));
108+
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googEchoCancellation",
109+
audioConstraintsMap.hasKey("echoCancellation")
110+
? audioConstraintsMap.getDynamic("echoCancellation").asString()
111+
: "true"));
112+
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googHighpassFilter",
113+
audioConstraintsMap.hasKey("highpassFilter")
114+
? audioConstraintsMap.getDynamic("highpassFilter").asString()
115+
: "true"));
104116

105117
// PeerConnectionFactory.createAudioSource will throw an error when mandatory constraints contain nulls.
106118
// so, let's check for nulls

android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java

Lines changed: 0 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -512,33 +512,6 @@ MediaConstraints constraintsForOptions(ReadableMap options) {
512512
mediaConstraints.mandatory.add(new MediaConstraints.KeyValuePair(key, value));
513513
}
514514

515-
ReadableMapKeySetIterator audioKeyIterator = options.keySetIterator();
516-
517-
while (audioKeyIterator.hasNextKey()) {
518-
String key = audioKeyIterator.nextKey();
519-
String value = ReactBridgeUtil.getMapStrValue(options, key);
520-
String googKey = null;
521-
switch (key) {
522-
case "autoGainControl":
523-
googKey = "googAutoGainControl";
524-
break;
525-
case "noiseSuppression":
526-
case "voiceIsolation":
527-
googKey = "googNoiseSuppression";
528-
break;
529-
case "echoCancellation":
530-
googKey = "googEchoCancellation";
531-
break;
532-
case "highpassFilter":
533-
googKey = "googHighpassFilter";
534-
break;
535-
default:
536-
break;
537-
}
538-
if (googKey != null) {
539-
mediaConstraints.optional.add(new MediaConstraints.KeyValuePair(googKey, value));
540-
}
541-
}
542515
return mediaConstraints;
543516
}
544517

ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,10 @@ - (void)setVideoEffectProcessor:(VideoEffectProcessor *)videoEffectProcessor {
2929

3030
#pragma mark - getUserMedia
3131

32+
- (NSString *)convertBoolToString:(id)value {
33+
return value ? @"true" : @"false";
34+
}
35+
3236
/**
3337
* Initializes a new {@link RTCAudioTrack} which satisfies the given constraints.
3438
*
@@ -37,7 +41,26 @@ - (void)setVideoEffectProcessor:(VideoEffectProcessor *)videoEffectProcessor {
3741
*/
3842
- (RTCAudioTrack *)createAudioTrack:(NSDictionary *)constraints {
3943
NSString *trackId = [[NSUUID UUID] UUIDString];
40-
RTCAudioTrack *audioTrack = [self.peerConnectionFactory audioTrackWithTrackId:trackId];
44+
NSDictionary *audioConstraints = constraints[@"audio"];
45+
NSMutableDictionary *optionalConstraints = [NSMutableDictionary dictionary];
46+
optionalConstraints[@"googAutoGainControl"] = audioConstraints[@"autoGainControl"] != nil
47+
? [self convertBoolToString:audioConstraints[@"autoGainControl"]]
48+
: @"false";
49+
optionalConstraints[@"googNoiseSuppression"] =
50+
audioConstraints[@"noiseSuppression"] != nil ? [self convertBoolToString:audioConstraints[@"noiseSuppression"]]
51+
: @"false";
52+
optionalConstraints[@"googEchoCancellation"] =
53+
audioConstraints[@"echoCancellation"] != nil ? [self convertBoolToString:audioConstraints[@"echoCancellation"]]
54+
: @"false";
55+
optionalConstraints[@"googHighpassFilter"] = audioConstraints[@"highpassFilter"] != nil
56+
? [self convertBoolToString:audioConstraints[@"highpassFilter"]]
57+
: @"false";
58+
59+
RTCMediaConstraints *mediaConstraints =
60+
[[RTCMediaConstraints alloc] initWithMandatoryConstraints:nil optionalConstraints:optionalConstraints];
61+
62+
RTCAudioSource *audioSource = [self.peerConnectionFactory audioSourceWithConstraints:mediaConstraints];
63+
RTCAudioTrack *audioTrack = [self.peerConnectionFactory audioTrackWithSource:audioSource trackId:trackId];
4164
return audioTrack;
4265
}
4366
/**

0 commit comments

Comments
 (0)