我是gstreamer的新手,我想通过网络使用mpeg2-ts来播放网络摄像头视频。我可以使用以下管道流式传输视频,但我不知道如何使用mpegmux
使用mpeg2-ts对其进行流式传输。任何帮助都会很棒!感谢。
我的工作pipline(没有mpegmux
):
// Sender
gst-launch-1.0 -ve v4l2src \
! video/x-raw, framerate=30/1 \
! videoconvert \
! x264enc noise-reduction=10000 speed-preset=fast tune=zerolatency byte-stream=true threads=4 key-int-max=15 intra-refresh=true \
! rtph264pay pt=96 \
! udpsink host=localhost port=5000
// Receiver
gst-launch-1.0 -ve udpsrc port=5000 \
! application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96 \
! rtph264depay \
! h264parse \
! avdec_h264 \
! videoconvert \
! ximagesink sync=false
我尝试了一些像下面这样的方法,但仍然无法让它发挥作用。发件人给出了错误"无法将mux与rtph264pay"和接收器给出"无法将多路复用器与udpsrc"。
连接起来// Sender
gst-launch-1.0 -ve v4l2src \
! video/x-raw, framerate=30/1 \
! videoconvert \
! x264enc noise-reduction=10000 speed-preset=fast tune=zerolatency byte-stream=true threads=4 key-int-max=15 intra-refresh=true \
! rtph264pay pt=96 \
! mpegtsmux name=mux mux. \
! udpsink host=localhost port=5000
// Reveiver
gst-launch-1.0 -ve udpsrc port=5000 \
! application/x-rtp, media=video, clock-rate=90000, encoding-name=H264, payload=96 \
! tsdemux name=demux demux.video_00 \
! rtph264depay \
! h264parse \
! avdec_h264 \
! videoconvert \
! ximagesink sync=false
请注意,我在接收器中使用tsdemux
而不是mpegtsdemux
,因为它会输出'没有元素" mpegtsdemux" &#39 ;.但是,如果输入$ 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
。
修改
感谢@otopolsky,我找到了一条工作流程(见下文)。而且,如果在tsparse
之前放置tsdemux
,他/她就不必在接收器中使用大写字母。
// 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吗?有没有提高流媒体质量的技巧?答案 0 :(得分:6)
你必须这样做:
x264enc ! mpegtsmux ! rtpmp2tpay ! udpsink
喜欢this回答..
tsdemux是元素,但mpegtsdemux是包含此元素的插件。它还包含在inspect的消息中提到的tsparse。也许如果你在tsdemux之前使用tsparse你不需要关于接收器中的大写的额外信息(我不完全确定这一点)。
另一个提示:如果您使用zerolatency
,它将丢弃速度预设或任何其他质量处理。
HTH