Добавить / удалить MediaStream в одноранговом соединении WebRTC в android

Я использую библиотеку libjingle: 11139 @ aar для создания приложения чата на платформе Android.

Проблема динамического добавления / удаления медиапотока из RTCPeerConnection объясняется во многих потоках stackoverflow, но все они, похоже, связаны с JavaScript. Я не смог найти ни одного потока, который подробно объяснял бы использование / последовательность выполнения в приложении Java / Android.

Я читал во многих местах, что после добавления медиапотока новый sdp должен быть передан партнеру о добавлении потока. Но когда создается новое предложение sdp, текущее одноранговое соединение теряется. Я получаю onIceConnectionChange (ЗАКРЫТО) на узле, который инициирует предложение sdp (после добавления медиапотока). Это ожидаемое поведение?

Другое наблюдение заключается в том, что после добавления медиапотока к одноранговому соединению уведомление RenogotiationNeeded () получено на одноранговом узле, который только что добавил поток. В этом уведомлении, если отправляется createOffer (), соединение peerConnection теряется.

Любая помощь высоко ценится.


person Mohanan R    schedule 23.02.2018    source источник
comment
Есть некоторые проблемы при обновлении потока в webrtc в браузерах, не уверен, с помощью Chrome или Firefox, но решение состоит в том, чтобы убить текущее соединение и создать новое.   -  person Keyne Viana    schedule 27.02.2018


Ответы (1)


Наконец, я нашел решение, когда вернулся к WebRTC, здесь вы можете отключить локальное видео только для потоковой передачи только одной стороны однорангового узла: в классе PeerConnectionClient (я говорю в проекте Java-Android) напишите функцию ниже и вызовите ее при вызове видео:

 //Hieu: disabled receive peer video for aircraft streaming only
  public void setMyVideoEnabled(final boolean enable) {
    executor.execute(() -> {
      renderVideo = enable;
      if (remoteVideoTrack != null) {
        remoteVideoTrack.setEnabled(renderVideo);
      }
    });
  }

Я не пробовал со звуком, но думаю, что мы можем сделать то же самое, что и эта функция. Например, я вызываю эту функцию на кнопочном переключателе камеры в примере кода WebRTC: CallActivity.java

@Override
  public void onCameraSwitch() {
    if (peerConnectionClient != null) {
      //peerConnectionClient.switchCamera();
      peerConnectionClient.setMyVideoEnabled(false);
    }
  }

Ссылка на пример Google: https://webrtc.org/native-code/android/ Путь: src / examples / androidapp Удачи :)

person nobjta_9x_tq    schedule 16.07.2018