首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用mpegtsmux在Gstreamer中实现网络摄像头流

如何用mpegtsmux在Gstreamer中实现网络摄像头流
EN

Stack Overflow用户
提问于 2016-04-12 05:34:30
回答 1查看 12K关注 0票数 6

我是gstreamer的新手,我想通过mpeg2 2-ts网络传输网络摄像头视频。我能够使用下面的管道流视频,但我不知道如何使用mpegmux与mpeg2 2-ts进行流。任何帮助都会很好!谢谢。

我的工作直线(不含mpegmux):

代码语言:javascript
复制
// 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”,而接收方给出“无法将mux链接到udpsrc”。

代码语言:javascript
复制
// 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元素“mpegtsdemux’。但是,如果输入$ gst-inspect-1.0 mpegtsdemux,它会打印:

代码语言:javascript
复制
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-Laune-1.0为什么找不到mpegtsdemux

编辑:感谢@otopolsky,我已经找到了一个工作管道(见下文)。而且,如果tsparse放在tsdemux之前,他/她就不需要在接收器中使用帽子,这是正确的。

代码语言:javascript
复制
// 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

再问几个问题:

  1. 为什么我不需要在接收端添加rtpmp2tdepay?(如果我将其添加到管道中的任何位置,就会生成“未能将rtpmp2tdepay链接到xx”。)
  2. 流媒体视频的质量会比不使用mpegtsmux的视频质量差。为什么会这样呢?是因为它使用mpeg2 2-ts吗?有没有提高流媒体质量的建议?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-04-12 06:57:06

你必须做:

代码语言:javascript
复制
x264enc ! mpegtsmux ! rtpmp2tpay ! udpsink

就像this的答案..。

tsdemux是元素,而mpegtsdemux是包含此元素的插件。它还包含also解析,正如检查消息中所指出的那样。也许,如果您在tsdemux之前使用tsparse,您就不需要额外的信息来了解接收端的上限(我对此不太确定)。

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

HTH

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36564386

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档