今回はgstreamerでrtp(udp)でストリーミングする方法についてまとめておこうと思います!!
コマンド1つで動画配信できるようなので少しまとめておこうと思います!!
■環境
・OS:Ubuntu16.04(VirtualBox上)
・カメラ:UCAM-C520FBBK
エレコム WEBカメラ マイク内蔵 200万画素 高精細ガラスレンズ ブラック UCAM-C520FBBK 新品価格 |
カメラですが、ちょっと興味があって別のカメラ買って見ましたww
結構こちらのカメラも写りよかった。
■セッティング
今回gstreamerはインストール済みでしたが、ちょっと足りないライブラリもあったのでインストールします。
sudo apt-get install gstreamer1.0-plugins-ugly sudo apt-get install gstreamer1.0-libav
■テスト動作確認
ではテスト動画を再生させてみたいと思います!!
こちらを実行してテスト動画確認できます。
gst-launch-1.0 videotestsrc ! videoconvert ! autovideosink
問題がなければこちらの動画が画面上に表示されるかと思います。
次にカメラから取得した映像を画面上に表示させてみます。
こちらのコマンドを実行します。
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経由で動画ストリーミングを行いました。
。。。用語間違っていたらすいません。