Elsaの技術日記(徒然なるままに)

主に自分で作ったアプリとかの報告・日記を記載

MENU

gstreamerでrtp経由でストリーミング

今回はgstreamerでrtp(udp)でストリーミングする方法についてまとめておこうと思います!!
コマンド1つで動画配信できるようなので少しまとめておこうと思います!!


■環境

・OS:Ubuntu16.04(VirtualBox上)
・カメラ:UCAM-C520FBBK

エレコム WEBカメラ マイク内蔵 200万画素 高精細ガラスレンズ ブラック UCAM-C520FBBK

新品価格
¥2,300から
(2020/12/5 22:39時点)

カメラですが、ちょっと興味があって別のカメラ買って見ましたww
結構こちらのカメラも写りよかった。

■セッティング

今回gstreamerはインストール済みでしたが、ちょっと足りないライブラリもあったのでインストールします。

sudo apt-get install gstreamer1.0-plugins-ugly
sudo apt-get install gstreamer1.0-libav

■テスト動作確認

ではテスト動画を再生させてみたいと思います!!
こちらを実行してテスト動画確認できます。

gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink

問題がなければこちらの動画が画面上に表示されるかと思います。
f:id:Elsammit:20201205214138g:plain

次にカメラから取得した映像を画面上に表示させてみます。
こちらのコマンドを実行します。

gst-launch-1.0 -v v4l2src  ! videoconvert ! autovideosink

これでカメラから取得した映像が表示されればOKです。

■カメラ映像について

先ほどのコマンドですが、それぞれ
テスト動画:テスト動画を受信 ! エンコード/デコード ! ビデオ表示用ドライバにデータ格納
カメラ動画:カメラからの動画受信 ! エンコード/デコード ! ビデオ表示用ドライバにデータ格納
の意味になっています。

gst-launch-1.0では上記のように、
何等かのデバイスやテストデータから~~srcで取得。
取得したデータをエンコード/デコードして加工。
最後に~~sinkで指定したドライバにデータを格納。
するように指定します。

要するに、
・v4l2src:カメラ映像取得
・videotestsrc :テスト動画取得
・autovideosink:モニタへの動画表示
といった形です。

■gstreamerを用いたrtpストリーミング

まずは配信側です。
こちらのコマンドで配信可能です。

gst-launch-1.0 -v v4l2src ! videoscale ! video/x-raw,width=320,height=240 ! videorate ! video/x-raw,framerate=100/1 ! x264enc ! rtph264pay ! udpsink host=127.0.0.1 port=5005 sync=false

こちらのコマンドの意味ですが、

v4l2src 

でカメラ映像を取得し、

videoscale ! video/x-raw,width=320,height=240 ! videorate ! video/x-raw,framerate=100/1

で映像サイズやフレームレートを指定。

 x264enc ! rtph264pay

で映像をrtp用にデータをエンコード

最後に、

udpsink host=127.0.0.1 port=5005 sync=false

IPアドレスとポート番号を指定してrtp配信用のドライバにデータを格納します。
今回はローカルへの配信としています。

次に配信されているデータを受信します。
こちらのコマンドで実行可能です。

gst-launch-1.0 -v udpsrc port=5005 ! application/x-rtp,media=video,encoding-name=H264 ! queue ! rtph264depay ! avdec_h264 ! videoconverter ! autovideosink

まず、

udpsrc port=5005

で配信された動画を取得。

そして、こちらでH.264形式のフォーマットに変換。

application/x-rtp,media=video,encoding-name=H264 ! queue ! rtph264depay ! avdec_h264 ! videoconverter

最後に、

autovideosink

で映像表示用のドライバにデータを格納。

といった流れになります。

■最後に

今回はgstreamerを用いてコマンドではありますがrtp経由で動画ストリーミングを行いました。
。。。用語間違っていたらすいません。