今配信界隈で話題のSRT(字幕じゃない方)をffmpegで動かせるようにビルドする話です。
残念ながらWindows版はありません。この手の新技術を試す場合はLinuxが定石ですので。
それでは早速SRTとffmpegをビルドしていきましょう。
なお、今回の実行環境はRaspberryPi3&4のBタイプです。
SRTをビルドしてインストール
git clone https://github.com/Haivision/srt.git cd srt/ git checkout -b v1.4.1 v1.4.1 sudo apt-get install tclsh pkg-config cmake libssl-dev build-essential ./configure make sudo make install
とりあえず上から順番に叩いてください。
ささっと終わると思うので、問題無くインストールまでされたら次はffmpegです。
ffmpegをビルドしてインストール
ffplayでSRTを再生したいぞ!という方は、事前にこちらもインストールしておくと良いでしょう。
sudo apt install libsdl2-dev
ffplayについて環境が整ったら以下を実行しましょう。
git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg cd ffmpeg/ git checkout -b n4.1 n4.1 ./configure --enable-libsrt --enable-omx-rpi --enable-mmal --enable-gpl make sudo make install
ffmpegではSRTの他にはRaspberryPiのHWエンコも使いたいのでomxとmmalも有効にしています。それぞれが何であるかについては別途検索してください。
ffmpegについてはライブラリが多いので、ビルドが完了するまで40分以上かかると思います。
気長に待ちましょう。
SRTによる通信のテスト
Raspi4とRaspi3にそれぞれ同じffmpeg環境を用意して通信の遅延のチェックを行いました。
環境としては以下の通りです。
PC(Windows)→SRTでPush→Raspi4(SRT受信してRaspi3へPush)→Raspi3(SRTを受信してHDMIモニターに出力)
この構成をローカルでテストして約6秒の遅延。正直使えない・・・。
Windows側のエンコーダーの遅延なのか、そもそもRaspiを通すと処理が遅くて遅延してるのか。
ffmpegのlibsrtのオプションからlibsrtのlatency設定とか設定してみても全く効果が無いような感じなので、やはりffmpegに実装されているSRTはまだまだテスト段階の品物なのかもしれない。
【補足】
ちなみにomxでHWエンコした場合はこの遅延が6秒から12秒に増えました。
実施した処理については以下の通り。
PC→1920×1080/6MbpsでSRT送り込み→Raspi4でSRT受信して1280×720/2MbpsへダウンスケールしてRaspi3へSRT送り込み→Raspi3でSRT受信してHDMIモニターに出力
やはりRaspi上で処理するのが重いような気がする。
なお、昔GStreamerでもSRTをテストしましたが、あっちの方がまだマシだった気がする。どうやってビルドしたか忘れてしまったので、次回やったらまたメモとして残そうと思う。