Можно ли установить соединение WebRTC между двумя приложениями на одном клиенте и в одном окне?

avatar
verified_tinker
1 июля 2021 в 17:42
174
2
0

Хотя WebRTC предназначен для конференц-связи, можно захватить MediaStream и использовать его в качестве источника для RTCPeerConnection. Как оказалось, это может быть решением проблемы, с которой я столкнулся: отображение прямой трансляции в приложении WebGL, которое их не поддерживает.

(Идея состоит в том, чтобы использовать такую ​​библиотеку, как HLS.js, для обработки сборки и повторного мультиплексирования потокового видео, а затем передавать это видео в мое приложение WebGL. Приложение встроено в Unity, игровой движок, который имеет представил пакет для WebRTC, поэтому я смогу его отобразить.)

Согласно документам, сервер должен действовать как посредник между клиентами. Однако, насколько я понял, это, по сути, помогает им найти друг друга и договориться о подключении через сеть P2P. Поскольку два приложения — приложение WebGL и приложение Node/JS-скрипт — работают на одном клиенте и даже в одном окне браузера, может быть, я мог бы опустить посредника и подключиться напрямую?

К сожалению, мне не удалось найти ничего об этом методе — вероятно, потому, что это такой необычный вариант использования. Является ли это возможным? Если да, то возможно ли это и как это можно сделать?

Источник

Ответы (2)

avatar
RooterTooter
2 июля 2021 в 19:04
0

Возможно, это возможно... Сигнальный сервер выступает в качестве промежуточного звена, поэтому вы можете обмениваться SDP и IceCandidates. Если оба ваших одноранговых соединения находятся в одном и том же приложении (javascript?), вы должны иметь возможность передавать эти объекты напрямую.

Например

conn1 = new RTCPeerConnection();
conn2 = new RTCPeerConnection();

conn1.onicecandidate = (event) => {
  if (event.candidate) {
     conn2.addIceCandidate(event.candidate);
  }
}

conn2.onicecandidate = (event) => {
  if (event.candidate) {
     conn1.addIceCandidate(event.candidate);
  }
}

conn1.createOffer()
    .then(offer => conn1.setLocalDescription(offer))
    .then(() => conn2.setRemoteDescription(conn1.localDescription))
    .then(() => conn2.createAnswer())
    .then(answer => conn2.setLocalDescription(answer))
    .then(() => conn1.setRemoteDescription(conn2.localDescription))
    .catch(handleCreateDescriptionError);

РЕДАКТИРОВАТЬ: я только что прочитал, что они в разных приложениях. Вам придется найти другой способ передачи этой информации между приложениями, но пока вы можете обмениваться этими данными, соединение должно работать.

verified_tinker
2 июля 2021 в 19:10
0

Передача информации не является проблемой: Unity позволяет вам взаимодействовать со сценариями браузера из собственных сценариев C#. Я попробую это, когда смогу. Спасибо!

avatar
Velexior
2 июля 2021 в 00:59
0

Если я правильно понял ваш вопрос, вы хотите установить соединение WebRTC без фактического сигнального сервера.

Сам WebRTC не волнует, как вы предоставляете ему предложения, ответы и лед-кандидаты, но я не вижу "нормального" способа обмена этой информацией без использования сигнального сервера.