我正在使用latest本机iOS GoogleWebRTC pod版本1.1.29400
我正在尝试按WebRTC规范here中的要求禁用/启用音频轨道。在目标c中,根据我的理解,我们将其称为isEnabled
设置器:
RTCMediaStreamTrack *track = self.localTracks[trackId];
track.isEnabled = YES/NO;
在iOS 13.1.3上的我的应用中,这对远程音频流没有影响。它继续播放。
这是我基于多个示例的理解:
我在the official WebRTC iOS example中找不到他们在isEnabled
上叫RTCMediaStreamTrack
的任何地方。
但是,我确实看到它们从视图控制器here调用RTCAudioSession.isAudioEnabled
。但是,当我构建该应用程序并弄乱RTCAudioSession
时,将isAudioEnabled
设置为false会使麦克风输入和扬声器输出静音。我只想在保持麦克风高温的同时禁用扬声器输出。
任何指导或技巧将不胜感激:)
答案 0 :(得分:1)
他们在WebRTC M80 Release Notes中声明他们将淘汰移动图书馆。
要了解本机移动库(iOS和Android)的最新错误修正和功能,我们需要build from source。
在使用从源代码构建的WebRTC.framework
构建AppRTCMobile示例应用程序之后,我进行了一些更改并确认我能够按需静音远程音轨。
在ARDAppClient.h
中,我为远程RTCMediaStream
添加了一个 strong 指针引用和一个用于切换流静音的方法头:
@property(nonatomic, strong) RTCMediaStream *remoteAudioStream;
// ...
- (void)setRemoteAudioEnabled:(BOOL)enabled;
在ARDAppClient.m
部分的RTCPeerConnectionDelegate
中,我收听didAddStream
委托并保存对远程流的引用:
- (void)peerConnection:(RTCPeerConnection *)peerConnection
didAddStream:(RTCMediaStream *)stream {
RTCLog(@"Stream with %lu video tracks and %lu audio tracks was added.",
(unsigned long)stream.videoTracks.count,
(unsigned long)stream.audioTracks.count);
_remoteAudioStream = stream;
}
在ARDAppClient.m
中,我还添加了一个用于静音/取消静音流的函数,现在我们对其进行引用:
- (void)setRemoteAudioEnabled:(BOOL)enabled {
if (_state == kARDAppClientStateDisconnected) {
return;
}
RTCLog(@"Setting remote stream to be %s", enabled ? "Enabled" : "Not Enabled");
RTCLog(@"Number of remote audio tracks = %lu", (unsigned long)_remoteAudioStream.audioTracks.count);
if (_remoteAudioStream.audioTracks.count == 0) {
RTCLog(@"ERROR no audio tracks to disable!");
return;
}
_remoteAudioTrack = _remoteAudioStream.audioTracks[0];
[_remoteAudioTrack setIsEnabled:enabled];
}
最后,在ARDVideoCallViewController.m
中,我将覆盖切换摄像头按钮以切换远程音轨静音:
- (void)videoCallViewDidSwitchCamera:(ARDVideoCallView *)view {
// [_captureController switchCamera];
self.audioEnabled = !self.audioEnabled;
[_client setRemoteAudioEnabled:self.audioEnabled];
}
答案 1 :(得分:0)
我在 Android 中遇到过类似的问题。
由于适用于 iOS 和 Android 的 Webrtc SDK 非常相似,您可以使用 AudioTrack.setVolume(0.0)
静音和 AudioTrack.setVolume({value more than zero})
取消静音远程音轨。
但是 isEnabled
属性由于某种原因没有静音/取消静音。