1

我正在使用最新的原生 iOS GoogleWebRTC pod 版本 1.1.29400

我正在尝试按照此处的 WebRTC 规范中的规定按需禁用/启用音轨。在目标 c 中,我的理解是我们称之为isEnabledsetter:

RTCMediaStreamTrack *track = self.localTracks[trackId];
track.isEnabled = YES/NO;

在我的 iOS 13.1.3 应用中,这对远程音频流没有影响。它继续播放。

这是我基于多个示例的理解:

我在官方 WebRTC iOS 示例中找不到他们调用isEnabled.RTCMediaStreamTrack

但是,我确实看到他们RTCAudioSession.isAudioEnabled从视图控制器调用,here。但是,当我构建该应用程序并弄乱了RTCAudioSession,设置isAudioEnabled为 false 静音麦克风输入和扬声器输出。我只想在保持麦克风发热的同时禁用扬声器输出。

任何指导或提示将不胜感激:)

4

3 回答 3

1

WebRTC M80 发行说明中,他们声明他们将弃用移动库。

为了及时了解本地移动库(iOS 和 Android)的最新错误修复和功能,我们需要从源代码构建

在我使用从源代码构建的 AppRTCMobile 示例应用程序后WebRTC.framework,我进行了一些更改并验证我能够按需静音远程音轨。

在我为遥控器ARDAppClient.h添加一个RTCMediaStream指针引用和一个用于切换流静音的方法头:

@property(nonatomic, strong) RTCMediaStream *remoteAudioStream;
// ...
- (void)setRemoteAudioEnabled:(BOOL)enabled;

ARDAppClient.mRTCPeerConnectionDelegate部分中,我听取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];
}
于 2020-01-29T19:36:51.413 回答
0

适用于当前的 GoogleWebRTC。分别静音/取消静音本地麦克风和远程流:

func setMic(enabled: Bool) {
    for sender in peerConnection.senders {
        if sender.track?.kind == "audio" {
            sender.track?.isEnabled = enabled
        }
    }
}

func setRemoteTrack(enabled: Bool) {
    for receiver in peerConnection.receivers {
        if receiver.track?.kind == "audio" {
            receiver.track?.isEnabled = enabled
        }
    }
}
于 2021-11-02T12:44:59.250 回答
0

我在Android中遇到了类似的问题。由于 iOS 和 Android 的 Webrtc SDK 非常相似,您可以使用AudioTrack.setVolume(0.0)静音和AudioTrack.setVolume({value more than zero})取消静音远程音轨。但是isEnabled由于某种原因,属性没有静音/取消静音。

于 2021-03-26T05:32:43.733 回答