iOS WebRT C RTCMediaStreamTrack отключение звука удаленной звуковой дорожки - PullRequest
1 голос
/ 25 января 2020

Я использую последний собственный iOS GoogleWebRT C версия pod 1.1.29400

Я пытаюсь отключить / включить звуковую дорожку по требованию, как указано в WebRT C spe c здесь . В цели c, насколько я понимаю, мы называем установщик isEnabled:

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

В моем приложении на iOS 13.1.3 это не влияет на удаленный аудиопоток. Это продолжает играть.

Это мое понимание, основанное на нескольких примерах:

Я не могу найти нигде в официальном WebRT C iOS пример , где они вызывают isEnabled на RTCMediaStreamTrack.

Но я вижу, что они вызывают RTCAudioSession.isAudioEnabled из контроллера представления, здесь . Но когда я собрал это приложение и поиграл с RTCAudioSession, установка isAudioEnabled на false отключила и вход микрофона, и выход динамика. Я только хочу отключить выход динамика, поддерживая mi c hot.

Будем благодарны за любые советы и рекомендации:)

1 Ответ

1 голос
/ 29 января 2020

В примечаниях к выпуску WebRT C M80 они заявляют, что собираются отказаться от мобильных библиотек.

Чтобы быть в курсе последних исправлений и функций для нативного мобильные библиотеки (iOS и Android), нам нужно собрать из источника .

После того, как я построил пример приложения AppRTCMobile с использованием WebRTC.framework, построенного из источника, я сделал несколько Изменения и проверки я смог отключить звуковую дорожку по требованию.

В ARDAppClient.h Я добавляю ссылку указателя strong для удаленного 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];
}
...