このページでは、以下の記事でご紹介した 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 を使用することで、デコードした画像データをアプリ側で取得できるようになります。

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 を間に挟むことで、遅延出力することができます。

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 にパッチを当てると、
rtpmp2tdepay に tts のオプションを付与することができるようになります。
こちらもCHECK
-
-
MPEG2-TTSをOSSでデコードする方法
はじめに MPEG-2(Moving Picture Experts Group)は、映像や音声を多重化する ISO/IEC の標準規格です。 DVD や放送で主に使用されており、ごく一部の公共インフ ...
続きを見る