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を送受信できるようになりました。めでたしめでした。