gstreamerが新しく、mpeg2-tsでネットワーク経由でウェブカメラのビデオをストリーミングしたいと思っています。私は次のパイプラインを使用してビデオをストリーミングすることができますが、mpegmux
を使用してmpeg2-tでストリーミングする方法はわかりません。どんな助けも素晴らしいだろう!ありがとう。Gstreamerでmpegtsmuxでウェブカメラストリーミングを行う方法
(mpegmux
なし)私の作業pipline:
// 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とリンクできませんでした」と表示します。
// 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
それは出力「ノー要素 『mpegtsdemux』」意志ので、私は受信機でtsdemux
代わりの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-打ち上げ-1.0はmpegtsdemux
を見つけることができない理由はわかりません。
EDIT:@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を使用しているからですか?ストリーミングの品質を改善するためのヒントはありますか?あなたがしなければならない
、正確にわからない、私は個人的にパース/給与/ depayのものの理解に大きなギャップを持っている..しかし、私は、パケットがすでに188のバイトが含まれていると思いますそれぞれ(MPEG TSパケットでありますサイズは)、それではdepayloadedする必要はありません(その1:1として)..私はあなたがどこにディポを置くことができないのか分かりません.. 'gst-inspect-1.0要素' .. 2、品質へ..何とか処理が違うと思います - 非常に低い品質がゼロ化されているので、おそらくこれが原因です。zerolatencyを削除していくつか素敵なスピードプリセットを追加するのはどうですか? – nayana
あなたの説明をありがとう。品質に関しては、 'スピードプリセット'を '超高速'(zerolatencyと同じ品質です)よりも低い値に設定すると、私のデバイス上でストリーミングが非常に遅くなるので、今はゼロ化を使用します。 – j0e1in
送信者の 'rtpmp2tpay'を削除することで、ビデオの品質がはるかに向上しました。それは重複しているようです。 – j0e1in