gpt4 book ai didi

video-streaming - 如何在 Gstreamer 中使用 mpegtsmux 进行网络摄像头流式传输

转载 作者:行者123 更新时间:2023-12-04 18:33:44 28 4
gpt4 key购买 nike

我是 gstreamer 的新手,我想使用 mpeg2-ts 通过网络流式传输网络摄像头视频。我可以使用以下管道流式传输视频,但我不知道如何使用 mpegmux 使用 mpeg2-ts 流式传输视频.任何帮助都会很棒!谢谢。

我的工作管道(没有 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

我已经尝试了一些像下面这样的方法,但仍然无法让它工作。发送方给出错误“无法将多路复用器与 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在接收器中,因为它将输出 ' no element "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 .

编辑:
感谢@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 吗?是否有任何提高流媒体质量的技巧?
  • 最佳答案

    你必须要做:

    x264enc ! mpegtsmux ! rtpmp2tpay ! udpsink

    喜欢在 this回答..

    tsdemux 是元素,但 mpegtsdemux 是包含此元素的插件。它还包含 tsparse,如inspect 的消息中所述。也许如果您在 tsdemux 之前使用 tsparse,您就不需要有关接收器中大写的额外信息(我对此不太确定)。

    给你的另一个提示:如果你使用 zerolatency它将丢弃速度预设或任何其他质量处理。

    HTH

    关于video-streaming - 如何在 Gstreamer 中使用 mpegtsmux 进行网络摄像头流式传输,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36564386/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com