Skip to content

Commit 9623b9e

Browse files
authored
ios,android: handle internal audio media constraints (#46)
* android: handle media constraints for m137 * ios: handle audio media constraints * fixes
1 parent 6b07d2f commit 9623b9e

File tree

2 files changed

+42
-1
lines changed

2 files changed

+42
-1
lines changed

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

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -95,6 +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.
99+
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googAutoGainControl",
100+
audioConstraintsMap.hasKey("autoGainControl")
101+
? ReactBridgeUtil.getMapStrValue(audioConstraintsMap, "autoGainControl")
102+
: "true"));
103+
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googNoiseSuppression",
104+
audioConstraintsMap.hasKey("noiseSuppression")
105+
? ReactBridgeUtil.getMapStrValue(audioConstraintsMap, "noiseSuppression")
106+
: "true"));
107+
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googEchoCancellation",
108+
audioConstraintsMap.hasKey("echoCancellation")
109+
? ReactBridgeUtil.getMapStrValue(audioConstraintsMap, "echoCancellation")
110+
: "true"));
111+
peerConstraints.optional.add(new MediaConstraints.KeyValuePair("googHighpassFilter",
112+
audioConstraintsMap.hasKey("highpassFilter")
113+
? ReactBridgeUtil.getMapStrValue(audioConstraintsMap, "highpassFilter")
114+
: "true"));
115+
98116
// PeerConnectionFactory.createAudioSource will throw an error when mandatory constraints contain nulls.
99117
// so, let's check for nulls
100118
checkMandatoryConstraints(peerConstraints);

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+
: @"true";
49+
optionalConstraints[@"googNoiseSuppression"] =
50+
audioConstraints[@"noiseSuppression"] != nil ? [self convertBoolToString:audioConstraints[@"noiseSuppression"]]
51+
: @"true";
52+
optionalConstraints[@"googEchoCancellation"] =
53+
audioConstraints[@"echoCancellation"] != nil ? [self convertBoolToString:audioConstraints[@"echoCancellation"]]
54+
: @"true";
55+
optionalConstraints[@"googHighpassFilter"] = audioConstraints[@"highpassFilter"] != nil
56+
? [self convertBoolToString:audioConstraints[@"highpassFilter"]]
57+
: @"true";
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)