Video streaming 如何在Gstreamer中使用mpegtsmux进行网络摄像头流媒体

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”。但是,如果类

我是gstreamer的新手,我想用mpeg2-ts通过网络传输网络摄像头视频。我可以使用以下管道传输视频,但我不知道如何使用mpeg2-ts使用
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