2016-04-12 79 views
3

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に おかげで、私は(下記参照)作業パイプラインを考え出しました。また、tsparsetsdemuxの前に置かれている場合、受信者にキャップを使用しなくてもよいということは当然です。より

// 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-tsを使用しているからですか?ストリーミングの品質を改善するためのヒントはありますか?あなたがしなければならない
+0

、正確にわからない、私は個人的にパース/給与/ depayのものの理解に大きなギャップを持っている..しかし、私は、パケットがすでに188のバイトが含まれていると思いますそれぞれ(MPEG TSパケットでありますサイズは)、それではdepayloadedする必要はありません(その1:1として)..私はあなたがどこにディポを置くことができないのか分かりません.. 'gst-inspect-1.0要素' .. 2、品質へ..何とか処理が違うと思います - 非常に低い品質がゼロ化されているので、おそらくこれが原因です。zerolatencyを削除していくつか素敵なスピードプリセットを追加するのはどうですか? – nayana

+0

あなたの説明をありがとう。品質に関しては、 'スピードプリセット'を '超高速'(zerolatencyと同じ品質です)よりも低い値に設定すると、私のデバイス上でストリーミングが非常に遅くなるので、今はゼロ化を使用します。 – j0e1in

+0

送信者の 'rtpmp2tpay'を削除することで、ビデオの品質がはるかに向上しました。それは重複しているようです。 – j0e1in

答えて

4

this答えで

x264enc ! mpegtsmux ! rtpmp2tpay ! udpsink 

同様..

tsdemuxしかしmpegtsdemux要素で、この要素を含むプラグインです。また、inspectのメッセージに記載されているようにtsparseが含まれています。tsparseの前にtsparseを使用すると、受信機の上限に関する追加情報が必要ない場合があります(これについては正確にはわかりません)。

別のヒント:zerolatencyを使用すると、スピードプリセットやその他の品質操作が破棄されます。

HTH更新、1へ

+0

ありがとう!私はこれを自分では決して見つけられません。私は作業パイプラインを持っています。あなたが気にしないなら、ちょっとだけ質問してください。 (質問のEDITをご覧ください) – j0e1in

関連する問題