はじめに
GStreamer を使って動画の送受信を行うことを確認する。 テスト用の動画が送受信できるところまでを確認する
環境
- Ubuntu 20.04.1
- GStreamer 1.16.3
環境構築と確認
環境構築
GStreamerのインストール
上記を参考にGStreamerのインストールを行う。
# インストールできるバージョンの確認 $ apt-cache policy libgstreamer1.0-dev libgstreamer1.0-dev: Candidate: 1.16.3-0ubuntu1.1 Version table: *** 1.16.3-0ubuntu1.1 500 500 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages 500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages 100 /var/lib/dpkg/status 1.16.2-2 500 500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages $ apt-cache policy libgstreamer-plugins-base1.0-dev libgstreamer-plugins-base1.0-dev: Candidate: 1.16.3-0ubuntu1.2 Version table: *** 1.16.3-0ubuntu1.2 500 500 http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages 500 http://security.ubuntu.com/ubuntu focal-security/main amd64 Packages 100 /var/lib/dpkg/status 1.16.2-4 500 500 http://archive.ubuntu.com/ubuntu focal/main amd64 Packages # インストール $ sudo apt install libgstreamer1.0-dev=1.16.3-0ubuntu1.1 libgstreamer-plugins-base1.0-dev=1.16.3-0ubuntu1.2
プラグインのインストール
必要なプラグインをインストールする。
$ sudo apt install gstreamer1.0-nice gstreamer1.0-opencv gstreamer1.0-plugins-base gstreamer1.0-plugins-bad gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly gstreamer1.0-rtsp gstreamer1.0-tools gstreamer1.0-libav libgstrtspserver-1.0-dev gstreamer1.0-rtsp gtk-doc-tools libglib2.0-dev libgstreamer1.0-dev libgstreamer-plugins-base1.0-dev
動作確認
ローカルでテスト用データの保存
10秒のテスト用データを作成し、保存する。30fpsなので、10秒の場合はnum-buffers=30*10=300となる
$ gst-launch-1.0 videotestsrc num-buffers=300 ! 'video/x-raw, format=(string)I420, width=(int)640, height=(int)480, framerate=(fraction)30/1' ! x264enc ! mp4mux ! filesink location=test.mp4 $ ls test.mp4
動画を見ると以下のテスト用データが流れる
送受信の実行
送信側、受信側を同じマシンで実行してみる。この実行には2つのターミナルが必要であることに留意する。
GStreamer Pipeline Samples · GitHub
上記のGitHubを参考に実施する。
Real-time Transport Protocolを使用した送受信例を記載する。
最初に、受信側のターミナルで実行する。
$ gst-launch-1.0 -v udpsrc port=5000 ! "application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264, payload=(int)96" ! rtph264depay ! h264parse ! queue ! mp4mux ! filesink location=xyz.mp4 -e
次に、送信側のターミナルで実行する。
# 2秒のテストデータを送信 $ gst-launch-1.0 -v videotestsrc num-buffers=60 ! x264enc tune=zerolatency bitrate=500 speed-preset=superfast ! rtph264pay ! udpsink port=5000 host=127.0.0.1
保存したxyz.mp4を確認すると同様の動画を確認できた