2014-02-14 2 views
6

Можно ли использовать тот же SDP в нескольких одноранговых соединениях?WebRTC: используйте тот же 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, но это создаст ненужный объект соединения со сверстниками (согласно моей идее, одноранговые объекты должны быть созданы после получения ответа от других пользователей).

+0

a = recvonly in above SDP, как я могу сделать это = sendrecv. – hanu

+0

@hanu, используя некоторые функции замены строк или регулярные выражения, я думаю. – SET

+0

получил его .. его pc.addstream, затем pc.createoffer – hanu

ответ

5

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

+0

Я собираюсь создать отдельный PeerConnection для каждого однорангового узла. Вопрос в том, можно ли использовать тот же SDP для этих соединений? – SET

+0

Каждый PeerConnection будет иметь свой собственный локальный и удаленный SDP, они не могут быть одинаковыми. –

+0

ICE, DTLS, информация о портах ВСЕ НЕ используются повторно; все эти элементы должны быть уникальными для одноранговых пар. –

1

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

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

Таким образом, приведенная выше информация распространена, если вы хотите сообщить другому партнеру (потому что ваш общедоступный IP-адрес, порт, кодек), то есть так, что его можно разделить с несколькими одноранговыми узлами sdp (ПРИМЕЧАНИЕ: вы открываете новый одноранговый узел для каждого пользователя)

+0

Кроме того, в SDP есть несколько вещей, которые отличаются друг от друга при использовании двух одноранговых соединений, поэтому наилучшим способом перехода является ** не ** повторное использование sdp и просто создать новый. – MarijnS95

+0

так можно, но лучше не использовать его повторно? – SET

+0

В моем случае максимальный номер пользователя может быть 9. Поэтому в этом максимальном случае это будет означать 32 одноранговых соединения. Если я могу отправить один SDP каждому пользователю, мне потребуется только 9 (широковещательных) сообщений для завершения обмена SDP. В противном случае у меня будет 72 сообщения (32 предложения и 32 ответа) и проблема, определяющая, какой из них должен отправить предложение, и который должен ждать, пока он отправит ответ. – SET

1

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

+1

Как это будет работать? Как я понимаю, кандидаты ICE создаются после создания SDP (предложение или ответ). Поэтому, если мы повторно используем предложение SDP для существующего клиента, но кандидаты ICE будут отличаться для нового партнера, как мы создаем новых кандидатов ICE для отправки новому партнеру? –

Смежные вопросы