GStreamerを使ったデータの送受信の確認

はじめに

GStreamer を使って動画の送受信を行うことを確認する。 テスト用の動画が送受信できるところまでを確認する

環境

  • Ubuntu 20.04.1
  • GStreamer 1.16.3

環境構築と確認

環境構築

GStreamerのインストール

gstreamer.freedesktop.org

上記を参考に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を確認すると同様の動画を確認できた

参考

gstreamer.freedesktop.org

GStreamer Pipeline Samples · GitHub