Video streaming 如何在Gstreamer中使用mpegtsmux进行网络摄像头流媒体
我是gstreamer的新手,我想用mpeg2-ts通过网络传输网络摄像头视频。我可以使用以下管道传输视频,但我不知道如何使用mpeg2-ts使用Video streaming 如何在Gstreamer中使用mpegtsmux进行网络摄像头流媒体,video-streaming,gstreamer,mpeg2-ts,Video Streaming,Gstreamer,Mpeg2 Ts,我是gstreamer的新手,我想用mpeg2-ts通过网络传输网络摄像头视频。我可以使用以下管道传输视频,但我不知道如何使用mpeg2-ts使用mpegmux传输视频。任何帮助都会很好!谢谢 我的工作管道(不带mpegmux): 我尝试过下面的一些方法,但仍然无法让它工作。发送方给出错误“无法将mux与RTPH264连接”,接收方给出“无法将mux与udpsrc连接” 注意,我在接收器中使用tsdemux而不是mpegtsdemux,因为它将输出“无元素”mpegtsdemux”。但是,如果类
mpegmux
传输视频。任何帮助都会很好!谢谢
我的工作管道(不带mpegmux
):
我尝试过下面的一些方法,但仍然无法让它工作。发送方给出错误“无法将mux与RTPH264连接”,接收方给出“无法将mux与udpsrc连接”
注意,我在接收器中使用tsdemux
而不是mpegtsdemux
,因为它将输出“无元素”mpegtsdemux”。但是,如果类型$gst-inspect-1.0 mpegtsdemux
打印:
Plugin Details:
Name mpegtsdemux
Description MPEG TS demuxer
Filename /usr/lib/x86_64-linux-gnu/gstreamer-1.0/libgstmpegtsdemux.so
Version 1.2.4
License unknown
Source module gst-plugins-bad
Source release date 2014-04-18
Binary package GStreamer Bad Plugins (Ubuntu)
Origin URL https://launchpad.net/distros/ubuntu/+source/gst-plugins-bad1.0
tsdemux: MPEG transport stream demuxer
tsparse: MPEG transport stream parser
2 features:
+-- 2 elements
我不知道为什么gst-launch-1.0找不到mpegtsdemux
// Sender
gst-launch-1.0 -ve v4l2src \
! video/x-raw, framerate=30/1 \
! videoconvert \
! x264enc noise-reduction=10000 tune=zerolatency byte-stream=true threads=4 key-int-max=15 intra-refresh=true \
! mpegtsmux \
! udpsink host=localhost port=5000
// Receiver
gst-launch-1.0 -ve udpsrc port=5000 \
! tsparse \
! tsdemux \
! h264parse \
! avdec_h264 \
! videoconvert \
! ximagesink sync=false
编辑: 多亏了@otopolsky,我找到了一条可行的管道(见下文)。而且,如果将
tsparse
放在tsdemux
之前,他/她不必在接收器中使用caps,这也是正确的
// Sender
gst-launch-1.0 -ve v4l2src \
! video/x-raw, framerate=30/1 \
! videoconvert \
! x264enc noise-reduction=10000 tune=zerolatency byte-stream=true threads=4 key-int-max=15 intra-refresh=true \
! mpegtsmux \
! udpsink host=localhost port=5000
// Receiver
gst-launch-1.0 -ve udpsrc port=5000 \
! tsparse \
! tsdemux \
! h264parse \
! avdec_h264 \
! videoconvert \
! ximagesink sync=false
还有几个问题:
rtpmp2tdepay
?(如果我将其添加到管道中的任何位置,将生成“无法将rtpmp2tdepay与xx链接”mpegtsmux
的视频质量差。为什么呢?是因为它使用mpeg2 ts吗?有没有提高流媒体质量的技巧x264enc ! mpegtsmux ! rtpmp2tpay ! udpsink
我喜欢你的回答
tsdemux是元素,而mpegtsdemux是包含此元素的插件。它还包含tsparse,如inspect消息中所述。。也许如果您在tsdemux之前使用tsparse,您不需要关于receiver中caps的额外信息(我对此不太确定)
另一个提示是:如果使用zerolatency
,它将放弃速度预设或任何其他质量处理
HTH谢谢!我自己永远也不会发现这一点。我有一条工作管道。如果你不介意的话,再问几个问题。(请参见问题中的编辑)对于更新,1,不完全确定,我个人在理解parse/pay/depay方面有很大差距。。但是我猜每个包已经包含188个字节(这是mpeg ts包的大小),因此不需要卸载(因为它是1:1)。。我不知道你怎么能把行李放在任何地方。。使用
gst-inspect-1.0元件检查src/水槽盖。。2.为了质量。。我认为处理在某种程度上是不同的-零延迟实现了非常低的质量,所以这可能是造成这种情况的原因。。删除zerolatency并添加一些不错的速度预设怎么样?谢谢您的解释。至于质量,将speed preset
设置为任何低于ultrafast
(与zerolatency具有相同质量)的值都会使流媒体在我的设备上非常滞后,因此我现在会使用zerolatency。通过删除sender中的rtpmp2tpay
,视频质量现在要好得多。这似乎是多余的。有趣的是,它不再是RTP流,而是IP上的普通ts-你失去了RTP的一些功能(但也许你不需要它们)。。有时我会遇到tsoverip的问题,它会在接收端的视频中出现小故障,但rtp并没有这样做。。我不知道你怎么说质量更好。。
x264enc ! mpegtsmux ! rtpmp2tpay ! udpsink