Как получить аудио и видео из потока WebRTC с помощью ffmpeg на сервере

Я пытаюсь получить аудио и видео из потока WebRTC и обработать его (перекодировать или дамп) с помощью ffmpeg на сервере ubuntu. Я наивно ожидал, что он просто интерпретирует sdp, предлагаемый WebRTC, но ошибся. Я подозреваю, что ffmpeg не может сигнализировать ответ sdp, и это нужно делать вручную. Вот предложение sdp:

v=0
o=Mozilla-SIPUA-33.1 3662 0 IN IP4 0.0.0.0
s=SIP Call
t=0 0
a=ice-ufrag:5e0a74d1
a=ice-pwd:7446c0eb445117d0018ca2afc5f3ca54
a=fingerprint:sha-256 76:1B:19:CE:3F:41:C5:4D:64:E6:FD:72:D2:FC:42:E1:98:D4:0F:2B:73:AE:C7:F4:2C:73:2C:E7:9E:DC:6A:EB
m=audio 23063 RTP/SAVPF 109 0 8 101
c=IN IP4 188.253.146.208
a=rtpmap:109 opus/48000/2
a=ptime:20
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
a=rtpmap:101 telephone-event/8000
a=fmtp:101 0-15
a=sendrecv
a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level
a=setup:actpass
a=candidate:0 1 UDP 2128609535 192.168.1.100 4130 typ host
a=candidate:1 1 UDP 1692467199 188.253.146.208 23063 typ srflx raddr 192.168.1.100 rport 4130
a=candidate:0 2 UDP 2128609534 192.168.1.100 4131 typ host
a=candidate:1 2 UDP 1692467198 188.253.146.208 23064 typ srflx raddr 192.168.1.100 rport 4131
a=rtcp-mux
m=video 23065 RTP/SAVPF 120 126 97
c=IN IP4 188.253.146.208
a=rtpmap:120 VP8/90000
a=rtpmap:126 H264/90000
a=fmtp:126 profile-level-id=42e01f;packetization-mode=1
a=rtpmap:97 H264/90000
a=fmtp:97 profile-level-id=42e01f
a=sendrecv
a=rtcp-fb:120 nack
a=rtcp-fb:120 nack pli
a=rtcp-fb:120 ccm fir
a=rtcp-fb:126 nack
a=rtcp-fb:126 nack pli
a=rtcp-fb:126 ccm fir
a=rtcp-fb:97 nack
a=rtcp-fb:97 nack pli
a=rtcp-fb:97 ccm fir
a=setup:actpass
a=candidate:0 1 UDP 2128609535 192.168.1.100 4132 typ host
a=candidate:1 1 UDP 1692467199 188.253.146.208 23065 typ srflx raddr 192.168.1.100 rport 4132
a=candidate:0 2 UDP 2128609534 192.168.1.100 4133 typ host
a=candidate:1 2 UDP 1692467198 188.253.146.208 23066 typ srflx raddr 192.168.1.100 rport 4133
a=rtcp-mux

Кому-нибудь это удалось? Спасибо.


person elshnkhll    schedule 27.11.2014    source источник
comment
Вам понадобится какой-то шлюз для обработки настроенного webrtc, поскольку помимо обмена SDP есть еще много шагов.   -  person Benjamin Trent    schedule 01.12.2014
comment
Я понимаю. Что бы для этого ни потребовалось, я готов ввести параметры интерфейса командной строки ffmpeg, а затем выставить предложение вручную. Мне просто нужно доказать, что ffmpeg получает поток WebRTC.   -  person elshnkhll    schedule 05.12.2014
comment
Единственный способ, которым я мог бы узнать, как использовать шлюз для выполнения всего диалогового окна, а затем передать по конвейеру rtp для отправки на порт UDP, который затем будет прослушивать ваша команда FFMpeg. Я успешно сделал это с помощью Janus-gateway и элементов libav gstreamer. Таким образом, использование FFMPeg будет аналогичным процессом и должно работать.   -  person Benjamin Trent    schedule 05.12.2014


Ответы (1)


Невозможно без «чего-то» между источником потока (одноранговым узлом) и ffmpeg; до тех пор, пока ffmpeg не начнет работать с DTLS, и вы не знаете хэш-информацию для однорангового узла (очевидно, это может быть в SDP). Таким образом, ffmpeg потребуется поддержка DTLS и ICE. Альтернативой было бы использование GStreamer с плагинами.

person Paul Gregoire    schedule 25.12.2014