ubuntu22.04にGStreamerをインストールしてSRTを使えるように設定します。GStreamerは、オーディオやビデオなどのマルチメディアデータを処理するためのマルチメディアフレームワークです。SRTは、信頼性の高いローレイテンシーのビデオストリーミングを実現するためのオープンソースのトランスポートプロトコルです。

簡単にいえば、FFMPEGとRTMPと同じような仕組みです。個人的な意見として、どちらでも同じような機能がありますがライブストリーミングならFFMPEGよりGStreamerって感じです。GStreamerはパイプラインが難解で嫌われがちです。こちらも読んでおくと良いでしょう。

https://github.com/Haivision/srt.git

 

ubuntu22.04にSRTをインストールする方法

Gstremerの中にSRTを入れる方法とシステム全体にSRTを入れる方法があるようですが、システム全体にSRTを入れる方が簡単そうなので、そのようにします。まずSRTのインストールから。まずは、定番のubuntu更新です。

sudo apt update
sudo apt upgrade

SRTをビルドするために必要な依存パッケージをインストールします。これにはビルドツール、ライブラリ、スクリプトエンジン、パッケージ構成管理ツールが含まれます。定型のインストールです。そしてgitをインストールします。

sudo apt install tclsh pkg-config cmake libssl-dev build-essential
sudo apt install git

GitHubからSRTのリポジトリをクローンして、ビルドディレクトリを作成し、そのディレクトリに移動します。CMakeを使ってビルドシステムを構成します。..は親ディレクトリです。

git clone https://github.com/Haivision/srt.git
cd srt
mkdir build
cd build
cmake ..
make
sudo make install

環境変数を設定して、システムが/usr/local/libディレクトリにある共有ライブラリを見つけられるようにします。.bashrcファイルに設定を追加してシェルに適用します。

echo 'export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH' >> ~/.bashrc
source ~/.bashrc
sudo ldconfig

SRTのインストール完了です。

 

ubuntu22.04にGStreamerのインストール

GStreamerをインストールします。いろいろなツールやプラグインをまとめてインストールします。これで多様なメディアフォーマットの再生、エンコード、ストリーミングが可能になります。ちなみにSRTはgstreamer1.0-plugins-badが対応しています。

sudo apt-get install gstreamer1.0-tools gstreamer1.0-plugins-base gstreamer1.0-plugins-good gstreamer1.0-plugins-bad gstreamer1.0-plugins-ugly

ldconfigでシステムのキャッシュを更新します。これにより、新しくインストールされたライブラリが正しく認識されるようになります。正しくsrtが入ったかコマンドで確認します。

sudo ldconfig
gst-inspect-1.0 srtsrc
gst-inspect-1.0 srtsink

今回は適当なUSBカメラを接続しました。以下コマンドで HD USB Cameraを調べて設定に反映しています。接続するカメラによって異なるでしょうから参考までにどうぞ。

lsusb
Bus 001 Device 002: ID 32e4:9230 HD USB Camera HD USB Camera
lsusb -v -d 32e4:9230
udevadm info -q all -n /dev/bus/usb/001/002
dmesg | grep -i usb

SRTの受信側を設定します。別のパソコンでOBSを用意しました。ソースメディアでSRTの受信設定をします。PCのIPは192.168.10.17です。OBSを起動してメディアソースでSRTを受信できるようにします。

srt://192.168.10.17:10000?mode=listener
mpegts

 

セキュリティが疎通を邪魔することがあるので、いったんWindowsガードを全部切りましょう。

 

ubuntu22.04側に戻り以下コマンドをテストします。USBカメラは/dev/video0として認識しています。192.168.10.17のポート10000へ送信します。受信が確認できるでしょう。

gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1920,height=1080,framerate=30/1 ! jpegdec ! videoconvert ! x264enc bitrate=10000 speed-preset=ultrafast tune=zerolatency ! mpegtsmux ! srtsink uri="srt://192.168.10.17:10000?mode=caller"

 

受信を確認できたのでちょっとカスタマイズします。現在の時間やカメラを180度反転を設定しました。

gst-launch-1.0 v4l2src device=/dev/video0 ! image/jpeg,width=1920,height=1080,framerate=30/1 ! jpegdec ! videoconvert ! videoflip method=rotate-180 ! clockoverlay halignment=left valignment=top font-desc="Sans, 12" time-format="%Y-%m-%d %H:%M:%S" ! x264enc bitrate=10000 speed-preset=ultrafast tune=zerolatency ! mpegtsmux ! srtsink uri="srt://192.168.10.17:10000?mode=caller"

 

以上でGStreamerでSRTを送受信できるようになりました。めでたしめでした。