FFmpeg を SRT stream 付きでビルドする

FFmpeg のビルドメモです。SRT stream のテストを行うために作成しました。現在の FFmpeg4.2 では標準で入っていないため、自前でビルドしなければいけません。使っている環境によっては別途必要なものが出ると思います。

# Windows bash編
Windows は bash を使いました。[プログラムと機能]-[機能の有効化] で Windows Subsystem for Linux を有効にしてコマンドプロンプトで bash と打ち込んでください。Windows の exe での使用はできません。

```bash:Windows-bash
# srt
git clone https://github.com/Haivision/srt.git
cd srt
git checkout -b v1.3.4 v1.3.4
sudo apt-get update
sudo apt-get install tclsh pkg-config cmake libssl-dev build-essential
./configure 
make
sudo make install
sudo ldconfig
cd ../

# x264
git clone --depth 1 git://git.videolan.org/x264 
cd x264
./configure --enable-static --disable-opencl --disable-asm
make
sudo make install
sudo ldconfig
cd ../

# x265
git clone https://github.com/videolan/x265
cd x265/build/linux
./make-Makefiles.bash
make
sudo make install
sudo ldconfig
cd ../

# ffmpeg
curl -L https://ffmpeg.org/releases/ffmpeg-4.2.tar.bz2 > ffmpeg-4.2.tar.bz2
tar xf ffmpeg-4.2.tar.bz2
cd ffmpeg-4.2/
sudo apt-get install libsdl2-dev　←ffplayに必要
./configure --enable-libsrt --enable-libx264 --enable-libx265 --enable-gpl --disable-x86asm
make　←15分
./ffmpeg -protocols　←srtがあるのを確認（srtpではない）
```

# MAC編

```bash:MAC
# openssl
git clone https://github.com/openssl/openssl
cd openssl
./config
make
sudo make install
cd ../

# srt
git clone https://github.com/Haivision/srt.git
cd srt
git checkout -b v1.3.4 v1.3.4
brew install cmake libssl-dev build-essential
export OPENSSL_ROOT_DIR=$(brew --prefix openssl)
export OPENSSL_LIB_DIR=$(brew --prefix openssl)"/lib"
export OPENSSL_INCLUDE_DIR=$(brew --prefix openssl)"/include"
./configure 
make
sudo make install
cd ../

# x264
git clone --depth 1 git://git.videolan.org/x264 
cd x264
./configure --enable-static --disable-opencl --disable-asm
make
sudo make install
sudo ldconfig
cd ../

# x265
git clone https://github.com/videolan/x265
cd x265/build/linux
./make-Makefiles.bash　←[c] configure、[g] generate など選択
make
sudo make install
cd ../

# ffmpeg
curl -L https://ffmpeg.org/releases/ffmpeg-4.2.tar.bz2 > ffmpeg-4.2.tar.bz2
tar xf ffmpeg-4.2.tar.bz2
cd ffmpeg-4.2/
brew install sdl2　←ffplayに必要
./configure --enable-libsrt --enable-libx264 --enable-libx265 --enable-gpl 
make　←15分
./ffmpeg -protocols　←srtがあるのを確認（srtpではない）
```

# 注意点
```bash
ERROR: srt >= 1.3.0 not found using pkg-config
```
--enable-libsrtを外してconfigureが成功するならlibsrtが問題です。libsrtにopensslが入っていないのが原因でした。

```bash
nasm yasm error --disable-x86asm
```
--disable-x86asmを付けてもよいのですが、brew install nasm, brew install yasm でも回避できました。

```bash
sudo ldconfig
```
MACはldconfigが不要です。

# 実験
どちらも自分自身に送受信します。表示する場合は再生側をffplayに置き換えてオプションも消してください。

```bash
# 映像を待ち受けるサーバー
./ffmpeg -re -y -i "srt://localhost:3000?mode=listener" -movflags faststart -c copy ../zzz.mp4

# 映像を送るエンコーダー
./ffmpeg -re -f lavfi -i testsrc=s=320x180:r=25 -vcodec h264 -pix_fmt yuv420p -f mpegts srt://localhost:3000
```
```bash
# 映像を送るサーバー
./ffmpeg -re -f lavfi -i testsrc=s=320x180:r=25 -vcodec h264 -pix_fmt yuv420p -f mpegts srt://localhost:3000?mode=listener

# 映像を取りに行くデコーダー
./ffmpeg -re -y -i "srt://localhost:3000" -movflags faststart -c copy ../xxx.mp4
```
- -re 等倍速で再生します。これを付けないと可能な限りの速さで再生するためlocalhost同士だとCPU100%になります。
- mode=listener 待ち受けモードです。
- testsrc FFmpeg内蔵のテストソースです。カメラや動画ファイルなしで使えます。

# まとめ
自作アプリ It’s my Live（iOSのみ）を作っています。このアプリが SRT に対応しました。これからの開発に向けてテスト環境がいくつも必要になるため、今回の記事に至ります。
5G時代はもうすぐです。小さな監視カメラと機械学習の組み合わせが流行るでしょう。すでに監視カメラが入っているところはもちろんですが、iPhoneとクラウドを組み合わせるとインフラの設備投資なしで導入できます。業者が入り込んでいないITと無縁だった場所に大きなビジネスチャンスがあると思います。