ios - iOS WebRTC RTCMediaStreamTrack 静音取消静音远程音轨
问题描述
我正在使用最新的原生 iOS GoogleWebRTC pod 版本 1.1.29400
我正在尝试按照此处的 WebRTC 规范中的规定按需禁用/启用音轨。在目标 c 中,我的理解是我们称之为isEnabled
setter:
RTCMediaStreamTrack *track = self.localTracks[trackId];
track.isEnabled = YES/NO;
在我的 iOS 13.1.3 应用中,这对远程音频流没有影响。它继续播放。
这是我基于多个示例的理解:
我在官方 WebRTC iOS 示例中找不到他们调用isEnabled
.RTCMediaStreamTrack
但是,我确实看到他们RTCAudioSession.isAudioEnabled
从视图控制器调用,here。但是,当我构建该应用程序并弄乱了RTCAudioSession
,设置isAudioEnabled
为 false 静音麦克风输入和扬声器输出。我只想在保持麦克风发热的同时禁用扬声器输出。
任何指导或提示将不胜感激:)
解决方案
在WebRTC M80 发行说明中,他们声明他们将弃用移动库。
为了及时了解本地移动库(iOS 和 Android)的最新错误修复和功能,我们需要从源代码构建。
在我使用从源代码构建的 AppRTCMobile 示例应用程序后WebRTC.framework
,我进行了一些更改并验证我能够按需静音远程音轨。
在我为遥控器ARDAppClient.h
添加一个强RTCMediaStream
指针引用和一个用于切换流静音的方法头:
@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];
}
推荐阅读
- ios - 具有右对齐详细文本标签的自定义 NSMenuItem
- html - Blogger B:if 用于评论和 b:loop 标记用于显示 commnets
- flexbox - CSS网格:子项目不延伸到全高
- spring-integration - Spring SPEL:setRemoteDirecotoryExpression 问题
- python - Python:2个暗淡形状(1,1024)的数组被读取为3个暗淡数组
- rest - 如何通过 REST API 在锯齿组中创建地址
- php - 我的 Joomla 网站显示 PHP 错误:无法打开流
- sql - 为什么要将整个记录存储在审计表中?
- xaml - 无法在传递参数的 XAML 命令中绑定我的 Converter 类
- java - 如何在大型 SQL 数据库上实现实时搜索/搜索视图