Требования к приложению потокового видео с использованием GStreamer - PullRequest
0 голосов
/ 27 апреля 2011

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

Ответы [ 2 ]

3 голосов
/ 28 апреля 2011

gstrtpbin должен обрабатывать все ваши потоковые потребности.Это позволит вам передавать поток RTP на один или несколько адресов.Чтобы узнать, как его использовать, в исходном коде gstreamer есть несколько примеров на нескольких разных языках.Gstreamer также позволит вам кодировать видео в поток H.264, используя x264.Это входит в пакет «некрасивых» плагинов.

1 голос
/ 15 июля 2012

Учитывая RTP (при необходимости измените host / 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

...