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再生は需要のある処理なので,次回以降はスムーズに作業を進めたい。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です