Требования к приложению для потоковой передачи видео с использованием GStreamer

Я хотел бы создать приложение для потоковой передачи видео по беспроводной сети с помощью GStreamer. Мои требования: кодек H.264, поток RTP/MPEG2-TS и протокол RTP по сети.
Может ли кто-нибудь объяснить, что мне нужно создать какой-либо плагин для этого или существующие плагины могут обеспечить все функции? Если да, то какие плагины мне следует использовать? Я хотел бы добавить еще один момент, что я буду снимать видео с помощью телефона и передавать с этого устройства по сети на один или несколько определенных адресов. Ответьте, пожалуйста . Заранее спасибо.


person ap2011    schedule 27.04.2011    source источник


Ответы (2)


gstrtpbin должен удовлетворить все ваши потребности в потоковой передаче. Это позволит вам передавать поток RTP на один или несколько адресов. Инструкции по его использованию см. в исходном коде gstreamer содержит несколько примеров на нескольких разных языках. Gstreamer также позволит вам кодировать видео в поток H.264, используя формат x264. Это входит в пакет "уродливых" плагинов.

person Myles Megyesi    schedule 28.04.2011

С учетом RTP (изменение хоста/IP по мере необходимости) должны помочь следующие конвейеры. По вашему требованию вы можете заменить ffenc_mpeg4 на x264enc pass=qual quantizer=20 tune=zerolatency, rtpmp4vpay на rtph264pay. Точно так же на стороне декодера вы можете заменить ffdec_mpeg4 на x264dec, rtpmp4vdepay на rtph264depay. Некоторые другие вещи также могут быть необходимы для настройки.

1) RTP отправляет веб-камеру и звук

gst-launch gstrtpbin name=rtpbin latency=0 v4l2src device=/dev/video0 ! typefind ! ffmpegcolorspace ! videoscale ! video/x-raw-yuv, width=640, height=480 ! videorate ! video/x-raw-yuv, framerate=30/1 ! ffenc_mpeg4 ! rtpmp4vpay send-config=true ! rtpbin.send_rtp_sink_0 rtpbin.send_rtp_src_0 ! udpsink port=5502 host=127.0.0.1 rtpbin.send_rtcp_src_0 ! udpsink port=5510 host=127.0.0.1 sync=false async=false udpsrc port=5510 ! rtpbin.recv_rtcp_sink_0 autoaudiosrc samplesperbuffer=1000 ! alawenc ! rtppcmapay ! rtpbin.send_rtp_sink_1 rtpbin.send_rtp_src_1 ! udpsink port=5504 host=127.0.0.1 rtpbin.send_rtcp_src_1 ! udpsink port=5512 host=127.0.0.1 sync=false async=false udpsrc port=5512 ! rtpbin.recv_rtcp_sink_1

2) RTP принимает веб-камеру и звук

gst-launch gstrtpbin name=rtpbin2 latency=0 udpsrc caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)MP4V-ES, profile-level-id=(string)1" port=5502 ! rtpbin2.recv_rtp_sink_0 rtpbin2. ! rtpmp4vdepay ! ffdec_mpeg4 ! videoscale ! video/x-raw-yuv, width=640, height=480 ! videorate ! video/x-raw-yuv, framerate=30/1 ! ffmpegcolorspace ! autovideosink udpsrc port=5510 ! rtpbin2.recv_rtcp_sink_0 rtpbin2.send_rtcp_src_0 ! udpsink host=127.0.0.1 port=5510 sync=false async=false udpsrc caps="application/x-rtp,media=(string)audio, clock-rate=(int)8000, encoding-name=(string)PCMA" port=5504 ! rtpbin2.recv_rtp_sink_1 rtpbin2. ! rtppcmadepay ! alawdec ! autoaudiosink buffer-time=10000 udpsrc port=5512 ! rtpbin2.recv_rtcp_sink_1 rtpbin2.send_rtcp_src_1 ! udpsink host=127.0.0.1 port=5512 sync=false async=false

person enthusiasticgeek    schedule 15.07.2012