GStreamerでの映像+音声RTP/RTSPの再生
業務でIPカメラの撮影動画をGStreamerで表示させる業務を行っている。
その際に,IPカメラの撮影動画をRTP/RTSPを経由して再生するのだが,RTPに映像と音声を両方含む場合のパイプラインがうまくいかなかった。
試行錯誤した結果,うまくパイプラインを構築して再生できたのでパイプラインを記す。
結論としては,以下のようなパイプラインで再生できた。
gst-launch-1.0 \
rtspsrc location="rtsp://URL" name=src \
src. ! capsfilter caps="application/x-rtp, media=video" ! decodebin ! autovideosink \
src. ! capsfilter caps="application/x-rtp, media=audio" ! decodebin ! autoaudiosink \
問題は,入力が映像+音声のデータの場合,decodebin
で映像を認知できなかったことだった。
映像のみ,音声のみデータストリームの場合,問題なかった。また,映像+音声のデータでも,音声だけの再生は問題なかった。
エラー発生時のパイプライン図 (error.dot) を眺めると,decodebin
がメディア種別 (video/audio) をaudioと誤認したのがエラーの原因だと判明した。
decodebin
の直前に,capsfilter
でメディア種別を明示することで,問題なく再生できた。なお,2段目のaudioストリームに関してはcapsfilter
がなくても大丈夫だった。書式統一のため明示的に指定した。
当初は,decodebin
の直前にrtph264depay
のような,コーデック特有のエレメントを指定することで対応していた。しかし,パイプラインの汎用性が落ちるため避けたかった。
継続調査した結果,うまく再生できた。GStreamerを使ったRTP再生は需要のある処理なので,次回以降はスムーズに作業を進めたい。