使用gstreamer通过rtp流式传输H.264视频

abi*_*bir 15 rtp video-streaming gstreamer h.264

我是gstreamer的新手,我正在尝试使用它.我的第一个目标是在两个设备之间创建一个简单的rtp h2p视频流.我正在使用这两个管道:

发件人: gst-launch-1.0 -v filesrc location=c:\\tmp\\sample_h264.mov ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5000

接收器: gst-launch-1.0 -v udpsrc port=5000 ! rtpmp2tdepay ! decodebin ! autovideosink

但是对于第一个(发件人),我收到以下错误:

Setting pipeline to PAUSED ...
Pipeline is PE*R*O L(LgIsNtG- l.a.u.n
h-1.0:5788): CRITICAL **: gst_adapter_map: assertion `size > 0' failed
ERROR: from element /GstPipeline:pipeline0/GstFileSrc:filesrc0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2812): gst_base_src_loop (): /GstPipeline:pipeline0/GstFileSrc:filesrc0:
streaming task paused, reason not-negotiated (-4)
ERROR: pipeline doesn't want to preroll.
Setting pipeline to NULL ...
Freeing pipeline ...
Run Code Online (Sandbox Code Playgroud)

我尝试了很多其他配置,但我找不到合适的管道.

其他一些信息:Gstreamer版本:1.0.7操作系统:Windows 7

有什么想法/建议吗?谢谢,

uml*_*ute 10

filesrc将从给定文件中读取数据作为原始字节; 你不能只用这些原始字节编码x264enc,你需要视频数据才能工作.尝试在重新编码流之前添加解复用器/解码器),例如:

发件人:

gst-launch-1.0 -v \
   filesrc location=/tmp/sample_h264.mov
   ! qtdemux \
   ! h264parse \
   ! ffdec_h264 \
   ! ffmpegcolorspace \
   ! x264enc \
   ! rtph264pay \
   ! udpsink host=127.0.0.1 port=5000
Run Code Online (Sandbox Code Playgroud)

您应该使用测试视频源快速检查这是否有效:

gst-launch-1.0 -v \
   videotestsrc 
   ! x264enc \
   ! rtph264pay \
   ! udpsink host=127.0.0.1 port=5000
Run Code Online (Sandbox Code Playgroud)

  • 最后,我认为这个问题与Windows有关.以下两个管道在两个不同的Ubuntu VM之间正常工作,但在Windows上不能正常工作:Sender:`gst-launch-1.0 -v filesrc location =/home/... /sample_h264.mov!decodebin!x264enc!rtph264pay!udpsink host = 192.168.52.129 port = 9001`接收器:`gst-launch-1.0 -v udpsrc port = 9001 caps ="application/x-rtp,media =(string)video,clock-rate =(int)90000,encoding -name =(string)H264,payload =(int)96"!rtph264depay!decodebin!视频转换!autovideosink` (2认同)