WebRTC: использовать один и тот же SDP для нескольких одноранговых соединений?

можно ли использовать один и тот же SDP в нескольких одноранговых соединениях?

Я строю видеоконференцию с помощью WebRTC. Идея состоит в том, что вызывающий абонент, используя какой-то механизм сигнализации, отправляет широковещательное сообщение всем другим пользователям с помощью SDP (тот же SDP для каждого пользователя), а затем пользователи будут отвечать своим SDP.

когда пользователь получает чей-то SDP, он использует его для установки удаленного описания, например:

connection = new RTCPeerConnection()
desc = RTCSessionDescription({sdp: SDP, type: "offer"});
connection = setRemoteDescription(desc);

вот пример SDP:

v=0
o=- 6843023960119608301 2 IN IP4 127.0.0.1
s=-
t=0 0
a=group:BUNDLE audio
a=msid-semantic: WMS
m=audio 1 RTP/SAVPF 111 103 104 0 8 106 105 13 126
c=IN IP4 0.0.0.0
a=rtcp:1 IN IP4 0.0.0.0
a=ice-ufrag:q36dZRVoaS4ixPYP
a=ice-pwd:K5yAm4A+zGoIKIgsX9o4VgDA
a=ice-options:google-ice
a=fingerprint:sha-256 62:3E:99:2F:FF:D4:58:7C:F0:A1:02:3F:09:2B:D1:F3:71:D7:F6:59:62:12:E4:1B:4A:68:01:4C:43:E0:D1:75
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=recvonly
a=rtcp-mux
a=crypto:0 AES_CM_128_HMAC_SHA1_32 inline:Tdz5Z3KHB3Xosqr5D53WZfi7Zndz+932X3H46Qvf
a=crypto:1 AES_CM_128_HMAC_SHA1_80 inline:NJO4XhhHUgiJRCfyYzDgajkCJAF/9BX8QeU+FKQs
a=rtpmap:111 opus/48000/2
a=fmtp:111 minptime=10
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:106 CN/32000
a=rtpmap:105 CN/16000
a=rtpmap:13 CN/8000
a=rtpmap:126 telephone-event/8000
a=maxptime:60

Я не смотрите здесь что-нибудь уникальное, поэтому, если B и D будут использовать его как удаленное описание, это сработает? Если да - как я могу создать этот SDP? Единственный способ, который я знаю сейчас, - это использовать RTCPeerConnection.createOffer но это создаст ненужный объект однорангового соединения (согласно моей идее, одноранговые объекты должны быть созданы после получения ответа от других пользователей).

4 ответов


нет, WebRTC не разработан таким образом. Вам нужно создать отдельный PeerConnection для одного однорангового узла.


Я думаю, что вы пытаетесь разработать несколько широковещательных (из диаграммы выше), его можно создать несколько одноранговых в webrtc(например, если вы хотите транслировать видео два браузера, вам нужно два одноранговых соединения)

SDP: этот протокол содержит информацию о вашем браузере, такую как ваш публичный ip,порт,кодек и средства связи(только Аудио,Видео,канал данных и т. д.)

таким образом, приведенная выше информация является общей, Если вы хотите общаться с другим сверстником(потому что ваш публичный ip, порт, кодек) так же, как и его возможность поделиться вами sdp несколькими одноранговыми (Примечание: Вы открываете новый одноранговый узел для каждого пользователя)


вы можете использовать тот же SDP, если он не содержит полей кандидата! Эти поля-кандидаты привязаны к локальному Порту RTP, который не используется повторно.


нет, и если вы найдете способ обойти это, это очень плохая идея. Концепция "соединения" между двумя конечными точками в интернете действительно может быть разбита на сессию, согласованную между двумя точками. Этот сеанс может иметь поля, которые будут одинаковыми для каждого "соединения", но другие поля уникальны для каждого однорангового узла. TCP был разработан с созданием базовых сеансов подключения в рамках его спецификации. WebRTC всегда связывается через UDP (даже в случае туннелирования TCP) и UDP не имеет понятия о соединениях. WebRTC использует SDP в процессе создания сеансов подключения, а SDP обнаруживает / определяет все необходимые поля для подключения.