LINUX.ORG.RU

Видеозвонки через WebRTC, Asterisk и Chromium

 , , , ,


1

4

Поделитесь историей успеха.

Сейчас имею Asterisk 16 с настроенным WebRTC и sipML5 в качестве клиента. Аудиозвонки работают нормально во все стороны. Видео работает как попало: эхо-тест работает в Firefox и CSipSimple, а в Chromium'е тупо не показывает входящий видеопоток.

Карта в SDP одинакова что для Firefox'а, что для Chromium'а. Пробовал тасовать кодеки без результата. Пробовал врубать direct_media, тоже без результата. В логах Asterisk'а вижу, что когда работает Firefox, то Strict RTP лочится на два потока (видео и аудио, соответственно), а когда Chromium — только на один (аудио). Выглядит так, как будто Chromium просто игнорит факт наличия видео.

Куда копать? Вниз не предлагать, вдоль тоже.

Скорее всего проблема всё же с кодеками. Могут быть проблемы с h264.

Попробуй оставить только vp8, убедится, чтобы выбирался только он, убедиться, что он проходит через Asterisk и тестить такую схему с chromium.

mono ★★★★★
()
Ответ на: комментарий от mono

Говорю же — тасовал кодеки. Да, SDP показывает, что выбирается именно тот кодек, который хочу. Но будь то VP8, VP9 или H.264 — всё одинаково. Проблема в каком-то согласовании медиапотока, что ли.

post-factum ★★★★★
() автор топика
Ответ на: комментарий от post-factum

Да, где-то что-то не согласовывается. Но это всё крутится вокруг SDP и кодеков/параметров кодеков.

Можешь показать INVITE, OK, с SDP.

mono ★★★★★
()
Ответ на: комментарий от mono

Инвайт:

tsk_utils.js?svn=252:116 State machine: x0000_Any_2_Any_X_i401_407_INVITE
tsk_utils.js?svn=252:116 SEND: INVITE sip:yyy@example.com SIP/2.0
Via: SIP/2.0/WSS df7jal23ls0d.invalid;branch=z9hG4bK01F5VNXHq3uLIR1WHkowJIOQnBzsxJFC;rport
From: "Ivan Ivanov"<sips:xxx@example.com>;tag=qTizfJEHUOoohCGyWAAv
To: <sip:yyy@example.com>
Contact: "Ivan Ivanov"<sips:xxx@df7jal23ls0d.invalid;rtcweb-breaker=no;click2call=no;transport=wss>;+g.oma.sip-im;language="en,fr"
Call-ID: a43e7693-39ae-df10-d79f-f85b781db7af
CSeq: 16375 INVITE
Content-Type: application/sdp
Content-Length: 5613
Max-Forwards: 70
Authorization: Digest username="someuser-webrtc",realm="asterisk",nonce="1539850114/2316d4cae9e9d902a61290ff6574cac1",uri="sip:yyy@example.com",response="07f1895bf220ec3825b562b83a3da6a5",algorithm=md5,cnonce="76ead21dd89340eb5f9d1bee48ceffef",opaque="666943725e5972b5",qop=auth,nc=00000001
User-Agent: IM-client/OMA1.0 sipML5-v1.2016.03.04
Organization: Doubango Telecom

v=0
o=- 5066930746868462000 2 IN IP4 127.0.0.1
s=Doubango Telecom - chrome
t=0 0
a=group:BUNDLE audio video
a=msid-semantic: WMS hENrWc0mM34Wd1HyuP0wetaN091WgRQyKNjk
m=audio 13042 UDP/TLS/RTP/SAVPF 111 103 104 9 0 8 106 105 13 110 112 113 126
c=IN IP4 a.b.c.d
a=rtcp:27906 IN IP4 a.b.c.d
a=candidate:1525968581 1 udp 2122260223 x.y.z.t 9273 typ host generation 0 network-id 1
a=candidate:1525968581 2 udp 2122260222 x.y.z.t 48990 typ host generation 0 network-id 1
a=candidate:343380533 1 tcp 1518280447 x.y.z.t 9 typ host tcptype active generation 0 network-id 1
a=candidate:343380533 2 tcp 1518280446 x.y.z.t 9 typ host tcptype active generation 0 network-id 1
a=candidate:4088127760 1 udp 1686052607 a.b.c.d 13042 typ srflx raddr x.y.z.t rport 9273 generation 0 network-id 1
a=candidate:4088127760 2 udp 1686052606 a.b.c.d 27906 typ srflx raddr x.y.z.t rport 48990 generation 0 network-id 1
a=ice-ufrag:Y//z
a=ice-pwd:me7NNd2KjJJw53rJRFwJA99E
a=ice-options:trickle
a=fingerprint:sha-256 98:91:90:31:B4:DB:97:7D:07:49:D3:55:90:79:9A:AC:9E:3E:04:4E:F8:67:89:F5:07:64:C8:90:94:13:AD:EC
a=setup:actpass
a=mid:audio
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=sendrecv
a=rtcp-mux
a=rtpmap:111 opus/48000/2
a=rtcp-fb:111 transport-cc
a=fmtp:111 minptime=10;useinbandfec=1
a=rtpmap:103 ISAC/16000
a=rtpmap:104 ISAC/32000
a=rtpmap:9 G722/8000
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:110 telephone-event/48000
a=rtpmap:112 telephone-event/32000
a=rtpmap:113 telephone-event/16000
a=rtpmap:126 telephone-event/8000
a=ssrc:322767836 cname:5YsOMPjUEEDw9KjE
a=ssrc:322767836 msid:hENrWc0mM34Wd1HyuP0wetaN091WgRQyKNjk 2ba0ca3c-c807-4c57-99dd-66f484606d10
a=ssrc:322767836 mslabel:hENrWc0mM34Wd1HyuP0wetaN091WgRQyKNjk
a=ssrc:322767836 label:2ba0ca3c-c807-4c57-99dd-66f484606d10
m=video 30630 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 123 127 122 125 107 108 109 124
c=IN IP4 a.b.c.d
a=rtcp:23192 IN IP4 a.b.c.d
a=candidate:1525968581 1 udp 2122260223 x.y.z.t 42124 typ host generation 0 network-id 1
a=candidate:1525968581 2 udp 2122260222 x.y.z.t 56283 typ host generation 0 network-id 1
a=candidate:343380533 1 tcp 1518280447 x.y.z.t 9 typ host tcptype active generation 0 network-id 1
a=candidate:343380533 2 tcp 1518280446 x.y.z.t 9 typ host tcptype active generation 0 network-id 1
a=candidate:4088127760 1 udp 1686052607 a.b.c.d 30630 typ srflx raddr x.y.z.t rport 42124 generation 0 network-id 1
a=candidate:4088127760 2 udp 1686052606 a.b.c.d 23192 typ srflx raddr x.y.z.t rport 56283 generation 0 network-id 1
a=ice-ufrag:Y//z
a=ice-pwd:me7NNd2KjJJw53rJRFwJA99E
a=ice-options:trickle
a=fingerprint:sha-256 98:91:90:31:B4:DB:97:7D:07:49:D3:55:90:79:9A:AC:9E:3E:04:4E:F8:67:89:F5:07:64:C8:90:94:13:AD:EC
a=setup:actpass
a=mid:video
a=extmap:2 urn:ietf:params:rtp-hdrext:toffset
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=extmap:4 urn:3gpp:video-orientation
a=extmap:5 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01
a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay
a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type
a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/video-timing
a=sendrecv
a=rtcp-mux
a=rtcp-rsize
a=rtpmap:96 VP8/90000
a=rtcp-fb:96 goog-remb
a=rtcp-fb:96 transport-cc
a=rtcp-fb:96 ccm fir
a=rtcp-fb:96 nack
a=rtcp-fb:96 nack pli
a=rtpmap:97 rtx/90000
a=fmtp:97 apt=96
a=rtpmap:98 VP9/90000
a=rtcp-fb:98 goog-remb
a=rtcp-fb:98 transport-cc
a=rtcp-fb:98 ccm fir
a=rtcp-fb:98 nack
a=rtcp-fb:98 nack pli
a=fmtp:98 x-google-profile-id=0
a=rtpmap:99 rtx/90000
a=fmtp:99 apt=98
a=rtpmap:100 H264/90000
a=rtcp-fb:100 goog-remb
a=rtcp-fb:100 transport-cc
a=rtcp-fb:100 ccm fir
a=rtcp-fb:100 nack
a=rtcp-fb:100 nack pli
a=fmtp:100 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f
a=rtpmap:101 rtx/90000
a=fmtp:101 apt=100
a=rtpmap:102 H264/90000
a=rtcp-fb:102 goog-remb
a=rtcp-fb:102 transport-cc
a=rtcp-fb:102 ccm fir
a=rtcp-fb:102 nack
a=rtcp-fb:102 nack pli
a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f
a=rtpmap:123 rtx/90000
a=fmtp:123 apt=102
a=rtpmap:127 H264/90000
a=rtcp-fb:127 goog-remb
a=rtcp-fb:127 transport-cc
a=rtcp-fb:127 ccm fir
a=rtcp-fb:127 nack
a=rtcp-fb:127 nack pli
a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f
a=rtpmap:122 rtx/90000
a=fmtp:122 apt=127
a=rtpmap:125 H264/90000
a=rtcp-fb:125 goog-remb
a=rtcp-fb:125 transport-cc
a=rtcp-fb:125 ccm fir
a=rtcp-fb:125 nack
a=rtcp-fb:125 nack pli
a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f
a=rtpmap:107 rtx/90000
a=fmtp:107 apt=125
a=rtpmap:108 red/90000
a=rtpmap:109 rtx/90000
a=fmtp:109 apt=108
a=rtpmap:124 ulpfec/90000
a=ssrc-group:FID 2977368466 1996539776
a=ssrc:2977368466 cname:5YsOMPjUEEDw9KjE
a=ssrc:2977368466 msid:hENrWc0mM34Wd1HyuP0wetaN091WgRQyKNjk 28e48dbc-5d3c-416b-984a-0a31452a2958
a=ssrc:2977368466 mslabel:hENrWc0mM34Wd1HyuP0wetaN091WgRQyKNjk
a=ssrc:2977368466 label:28e48dbc-5d3c-416b-984a-0a31452a2958
a=ssrc:1996539776 cname:5YsOMPjUEEDw9KjE
a=ssrc:1996539776 msid:hENrWc0mM34Wd1HyuP0wetaN091WgRQyKNjk 28e48dbc-5d3c-416b-984a-0a31452a2958
a=ssrc:1996539776 mslabel:hENrWc0mM34Wd1HyuP0wetaN091WgRQyKNjk
a=ssrc:1996539776 label:28e48dbc-5d3c-416b-984a-0a31452a2958
post-factum ★★★★★
() автор топика
Ответ на: комментарий от mono

OK:

tsk_utils.js?svn=252:116 State machine: x0000_Any_2_Any_X_i1xx
tsk_utils.js?svn=252:116 __tsip_transport_ws_onmessage
tsk_utils.js?svn=252:116 recv=SIP/2.0 200 OK
Via: SIP/2.0/WSS df7jal23ls0d.invalid;rport=28488;received=127.0.0.1;branch=z9hG4bK01F5VNXHq3uLIR1WHkowJIOQnBzsxJFC
From: "Ivan Ivanov"<sips:xxx@example.com>;tag=qTizfJEHUOoohCGyWAAv
To: <sip:yyy@example.com>;tag=b7afd529-11e1-44d8-8fb9-127938d58b27
Contact: <sips:127.0.0.1:7892;transport=ws>
Call-ID: a43e7693-39ae-df10-d79f-f85b781db7af
CSeq: 16375 INVITE
Content-Type: application/sdp
Content-Length: 2091
Server: Asterisk PBX 16.0.0
Allow: OPTIONS,REGISTER,SUBSCRIBE,NOTIFY,PUBLISH,INVITE,ACK,BYE,CANCEL,UPDATE,PRACK,MESSAGE,REFER
Supported: 100rel,timer,replaces,norefersub

v=0
o=- 614035888 4 IN IP6 2001:dead:beef::1
s=Asterisk
c=IN IP6 2001:dead:beef::1
t=0 0
a=msid-semantic:WMS *
a=group:BUNDLE audio video
m=audio 62926 UDP/TLS/RTP/SAVPF 111 126
a=connection:new
a=setup:active
a=fingerprint:SHA-256 16:65:33:91:E3:3E:09:84:BB:0E:24:85:A6:7C:58:8C:98:69:C9:57:A2:1C:9E:B3:05:67:68:F4:C6:FC:08:79
a=ice-ufrag:6d3ed40773762a0034d360fb7c112f47
a=ice-pwd:2f32b09b261dcea24d5d250715b3252c
a=candidate:H9ac5f340 1 UDP 2130706431 2001:dead:beef::1 62926 typ host
a=candidate:H589e50ba 1 UDP 2130706431 fe80:dead:beef::1 62926 typ host
a=candidate:Hd0f54806 1 UDP 2130706431 fe80:dead:beef::2 62926 typ host
a=candidate:H79d447bf 1 UDP 2130706431 fe80:dead:beef::3 62926 typ host
a=candidate:H8b430385 1 UDP 2130706431 fe80:dead:beef::4 62926 typ host
a=candidate:H68cf8388 1 UDP 2130706431 104.x.x.x 62926 typ host
a=candidate:Hac112604 1 UDP 2130706431 172.x.x.x 62926 typ host
a=candidate:Hac818101 1 UDP 2130706431 172.x.x.y 62926 typ host
a=rtpmap:111 opus/48000/2
a=fmtp:111 useinbandfec=1;usedtx=1
a=rtpmap:126 telephone-event/8000
a=fmtp:126 0-16
a=ptime:20
a=maxptime:20
a=sendrecv
a=rtcp-mux
a=ssrc:588705255 cname:822986d4-28fb-4171-96e8-1cd0125f75f6
a=msid:2240d1a7-a546-443b-bcb7-8f6438aedbec a7d70d18-2580-4ffc-9306-c2ac8d46443a
a=mid:audio
m=video 62926 UDP/TLS/RTP/SAVPF 100
a=connection:new
a=setup:active
a=fingerprint:SHA-256 16:65:33:91:E3:3E:09:84:BB:0E:24:85:A6:7C:58:8C:98:69:C9:57:A2:1C:9E:B3:05:67:68:F4:C6:FC:08:79
a=ice-ufrag:6d3ed40773762a0034d360fb7c112f47
a=ice-pwd:2f32b09b261dcea24d5d250715b3252c
a=rtpmap:100 H264/90000
a=fmtp:100 packetization-mode=1;level-asymmetry-allowed=1
a=sendrecv
a=rtcp-mux
a=ssrc:2145112484 cname:20b8aedd-2e91-41c3-895d-ce828ae112ae
a=msid:2240d1a7-a546-443b-bcb7-8f6438aedbec b459df88-d0e0-4b87-bc43-ff9a74441695
a=rtcp-fb:* ccm fir
a=rtcp-fb:* goog-remb
a=rtcp-fb:* nack
a=extmap:3 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time
a=mid:video
post-factum ★★★★★
() автор топика
Ответ на: комментарий от post-factum

У терминатора в OK заялвяется только H264 в качестве видео-кодека, у оригинатора и VP8 и VP9 и целая вереница H264. Теоретически, все должно быть окей, я не вижу каких-то проблем, но по моему опыту именно у chrome/chromium часто какие-то проблемы.

Я советую попробовать включить VP8 (VP9) везде и попробовать. Если прокатит с этим кодеком, то дальше уже копать в сторону согласования H264, если и с VP8 (VP9) не сработает, значит проблема в чём-то другом. У орингинатора тоже стоит вырубить H264.

Но вроде всё выглядит окей. Единственное что меня волнует, это то что в OK нет указания профиля для H264, хотя в обоих случаях «level-asymmetry-allowed=1», но хз насколько это реально срабатывает. Может быть ожидание совсем разных потоков.

Ещё нужно проверить, а действительно ли в chromium стоит поддержка проприетарных кодеков. Я помню, что там были какие-то косяки с этим в сравнении с проприетарным chorme.

mono ★★★★★
()
Ответ на: комментарий от mono

советую попробовать включить VP8 (VP9) везде и попробовать

Да говорю же, пробовал и VP8, и VP9.

в OK нет указания профиля для H264

В ФФ, кстати, profile-level-id есть в OK, если ты об этом.

действительно ли в chromium стоит поддержка проприетарных кодеков

https://html5test.com/ говорит, что есть.

post-factum ★★★★★
() автор топика
Ответ на: комментарий от post-factum

Похоже на ограничение по размеру SDP. Попробуй оттуда повыкидывать все лишнее, чтобы в полтора килобайта влезло.

AEP ★★★★★
()
Последнее исправление: AEP (всего исправлений: 1)
Ответ на: комментарий от AEP

Интересно. А с чего это, и как это сделать? Допустим, аудиокодеки выброшу все, кроме Opus'а, а ещё?

post-factum ★★★★★
() автор топика
Ответ на: комментарий от AEP

Короче, выкинул лишние кодеки и IPv6, размер ужался, но ничего не поменялось.

post-factum ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.