Воспроизведение входящего видеопотока RTP с помощью gstreamer

Я нашел рабочие примеры на основе gst-launch для отправки и получения видеопотока через RTP. Я переписал их на C. Отправитель работает нормально, а получатель - нет. У меня есть 2 компьютера, A и B. При потоковой передаче B->A он работает нормально, но когда A->B, B не показывает поток. Поток идет на B (проверено wireshark). Можете ли вы взглянуть на код и посмотреть, есть ли какая-то ошибка, которую я не нашел?

Вот приложение gst-launch:

VIDEO_CAPS="application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)H263-1998"
gst-launch-0.10 -v gstrtpbin name=rtpbin latency=100 \
    udpsrc caps=$VIDEO_CAPS port=5000 \
    ! rtpbin.recv_rtp_sink_0 rtpbin. \
    ! rtph263pdepay \
    ! ffdec_h263 \
    ! ffmpegcolorspace \
    ! autovideosink
    udpsrc port=5001 \
    ! rtpbin.recv_rtcp_sink_0 rtpbin.send_rtcp_src_0 \
    ! udpsink host=$1 port=5005 sync=false async=false

Соответствующий код C находится в [1], так как он довольно длинный.

[1] http://pastebin.com/54eHvZWH


person aleek    schedule 15.08.2012    source источник


Ответы (1)


Вы не подключаетесь к сигналу request-pt-map в rtpbin, а вместо этого устанавливаете шапки на udpsrc. Общая идея заключается в том, что rtpbin говорит вам: «Эй, я получил новый номер полезной нагрузки, какие заглавные буквы я должен назначить для этого?». Затем вы указываете ограничения (за вычетом номера полезной нагрузки), которые вы теперь устанавливаете непосредственно в файле udpsrc. Я не уверен, что это поможет, но именно так вы должны это делать. Запуск приемника с GST_DEBUG=*rtp*:5 также может дать некоторые подсказки.

person Havard Graff    schedule 26.06.2013