便利ツール

gstreamer の pipeline 集

このページでは、以下の記事でご紹介した gstreamer の pipeline について、
いくつかのサンプルを記載していきます。(適宜更新)

こちらもCHECK

【C++】gstreamerを使ってRTSP(Video+Audio)を再生するサンプル

はじめに gstreamer をコマンドベースで利用する場合の記事はいくつかあるのですが、 C++ でライブラリとして利用する場合のサンプルが少なく、どのようなものなのかと使ってみた記録です。 今回は ...

続きを見る

 

RTSP/H.264

RTSP は最初にネゴシエーションが行われるため、MP4/MPEG2 などは自動で識別されます。

Video Only

 pipeline
"rtspsrc location=rtsp://127.0.0.1:554/stream"
" ! rtph264depay"
" ! h264parse"
" ! avdec_h264"
" ! videoconvert"
" ! appsink name=sink"

ポイント

appsink を使用することで、デコードした画像データをアプリ側で取得できるようになります。

SANACHAN
SANACHAN
一般的な IP カメラは、これでOK。

Video+Audio

 command
"rtspsrc location=rtsp://127.0.0.1:554/stream name=src"
" src. ! queue"
" ! rtph264depay"
" ! h264parse"
" ! avdec_h264"
" ! videoconvert"
" ! appsink name=sink"
" src. ! queue leaky=1"
" ! decodebin"
" ! audioconvert"
" ! audioresample"
" ! autoaudiosink sync=false"

ポイント

受信したストリームを queue に繋げることで、映像と音声を別々の経路でデコードします。
映像データはアプリ側で使用でき、音声データは gstreamer が自動再生する例です。

 

RTP/MPEG2-TS/H.264

Video Only

 pipeline
"udpsrc address=127.0.0.1 port=45000"
" caps=\"application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T\""
" ! .recv_rtp_sink_0 rtpbin"
" ! rtpmp2tdepay"
" ! tsdemux"
" ! h264parse"
" ! avdec_h264"
" ! videoconvert"
" ! appsink name=sink"

ポイント

MPEG2-TS の場合、caps が必要になることは稀ですが上手くいかない場合は試す価値あり。

Audio Only

 pipeline
"udpsrc address=127.0.0.1 port=45000"
" ! tsparse"
" ! decodebin"
" ! audioconvert"
" ! audioresample"
" ! volume volume=0.3"
" ! autoaudiosink sync=false"

ポイント

volume エレメントを使用することで、出力音声のボリュームを制御することができます。

Video+Audio

 pipeline
"udpsrc address=127.0.0.1 port=45000"
" ! tsparse"
" ! decodebin name=dec"
" dec. ! queue"
" ! videoconvert"
" ! video/x-raw, format=BGR"
" ! appsink name = sink"
" dec. ! queue leaky=1"
" ! audioconvert"
" ! audioresample"
" ! volume volume=0.3"
" ! queue max-size-buffers=1000"
" ! autoaudiosink sync=false"

ポイント

デコードした画素データのフォーマットが YUV になっていることがありますが、
video/x-raw, format=BGR でデータの並びを指定することができます。

ポイント

映像と音声を別経路でデコードしているため、リップシンクしない場合があります。
その場合、queue max-size-buffers=XXXX を間に挟むことで、遅延出力することができます。

SANACHAN
SANACHAN
本例では、音声の方が早く再生されていたため、音声を遅延再生しています。

 

RTP/MPEG2-TTS/H.264

Video Only

 pipeline
"udpsrc address=127.0.0.1 port=45000"
" caps=\"application/x-rtp,media=(string)video,clock-rate=(int)90000,encoding-name=(string)MP2T\""
" ! .recv_rtp_sink_0 rtpbin"
" ! rtpmp2tdepay tts=true"
" ! tsdemux"
" ! h264parse"
" ! avdec_h264"
" ! videoconvert"
" ! video/x-raw, format=BGR"
" ! appsink name=sink"

ポイント

以下の記事を参考に gst-plugin-good にパッチを当てると、
rtpmp2tdepaytts のオプションを付与することができるようになります。

こちらもCHECK

MPEG2-TTSをOSSでデコードする方法

はじめに MPEG-2(Moving Picture Experts Group)は、映像や音声を多重化する ISO/IEC の標準規格です。 DVD や放送で主に使用されており、ごく一部の公共インフ ...

続きを見る

 

こちらの記事もよく読まれています

  • この記事を書いた人
  • 最新記事
SANACHAN

SANACHAN

「生涯一エンジニア」を掲げ、大手グローバル企業でSE/PGとして8年勤め、キャリアアップ転職した現役のエンジニアです。世にあるメジャーな全プログラム言語(コボル除く)を自由に扱えます。一児の父。自分のため、家族のため、日々勉強してます。システムエンジニア、プログラミングに関する情報を蓄積している雑記帳です。

-便利ツール
-,