ffmpeg-4.2.3 with SRT on CentOS 7.8

# ffmpeg-4.2.3/SRTをインストール
CentOS 7.8にffmpeg-4.2.3をソースからインストールします。ffmpegでSRTプロトコルを使いたいのでパッケージからではなくソースからにしました。ちなみにSRTとは高品質で低遅延な配信用のプロトコルで、Haivision社が発表してその後オープンソース化されてます。
https://www.srtalliance.org/

SRT自体の検証はまた別の機会に取り上げるつもりです。

それでは作業開始！

##準備作業
前提としてOS環境はインストール後に`yum update`をかけた状態です。なおインストール時に選ぶ「ソフトウェアの選択」では「サーバー（GUI使用）」を選んでいます。

まずは開発環境を補強します。
rootユーザーでログインしていくつかパッケージをインストールします。

```
# yum install gcc git open-ssl-devel
```

##SRTのインストール
ffmpegのインストールに先立って、srtとx264,x265を導入します。srtから始めます。

githubからソースコードを入手します。

```
# cd
# mkdir app
# cd app
# git clone https://github.com/Haivision/srt.git
# cd srt
```
ffmpegではsrtのバージョンが1.3以上であることが求められるので、取ってきたソースコードのバージョンを念のため確認しました。どこに書いてあるか漁ってみると、srt/CMakeLists.txtに記載を見つけました。

`SRT_VERSION 1.4.1`

これなら問題ないので、チェックアウトします。

```
# git checkout -b v1.4.1 v1.4.1
```
インストールに先立ち、srt/README.mdを読んでみると、いくつかのOSごとに分かれてインストール方法が書かれていました。今回はCentOS7系なので、その部分を読むといくつかパッケージが求められていました。私の環境ではすでに導入済みのものもあったので、以下のパッケージだけ追加しています。

```
yum install tcl cmake gcc-c++ automake
```
これでsrtをインストールする用意が整いました。

```
# ./configure
# make
# make install
```
インストール完了！
srtのライブラリは`/usr/local/lib64`にインストールされますが、このディレクトリはデフォルト設定のままのCentOS7.8では共有ライブラリにパスが通っていません。そこで以下の方法でパスを通します。
現時点でパスが通っていないことを確認するには

```
# ldconfig -p |grep srt
```
表示されないですよね。srtpとは違うのでご注意を。

`/etc/ld.so.conf.d`に`usr-local-lib64.conf`という名前でファイルを作りました。
その中にライブラリのディレクトリを一行だけ書きます。

```
# cat /etc/ld.so.conf.d/usr-local-lib64.conf
/usr/local/lib64
```
設定を反映させます。

```
# ldconfig
```
これでsrtに関する作業はおしまいです。
##x264のインストール
次にx264をインストールしましょう。その前にx264が必要とするnasmというアセンブラを導入します。
###nasmのインストール
nasmはパッケージとしてyumでインストールできるのですが、この方法で導入したnasmのバージョンでは、古くてx264の要件に合いませんでした。そこでnasmもソースからインストールします。
コードはCentOS上でブラウザ立ち上げて、以下のサイトから直接入手しました。
https://www.nasm.us/
バージョンは2.14.02です。

```
# cd
# cd app
# mkdir nasm
# cd nasm
```
ここに`nasm-2.14.02.tar.gz`を配置してインストールします。

```
# ls
nasm-2.14.02.tar.gz
# tar xvf nasm-2.14.02.tar.gz
# cd nasm-2.14.02
# ./configure
# make
# make install
```
###本体(x264)のインストール
それではx264に取り掛かります。ソースコードを取ってきてインストールしましょう。

```
# cd /root/app
# git clone https://code.videolan.org/videolan/x264.git
# cd x264
# ./configure --enable-shared
# make
# make instal
```
共有ライブラリにしたかったので`--enable-shared`オプションを付けています。
インストールが終わると、ライブラリは/usr/local/libに作成されるので、srtの時と同じ手法でパスを通してやります。

`/etc/ld.so.conf.d/`に`usr-local-lib.conf`という名前でファイルを作ります。ファイルには下記の一行だけを記載します。
`/usr/local/lib`

設定を反映させて、パスが通ったことも確認します。

```
# ldconfig
# ldconfig -p |grep x264
```
動作確認も兼ねてインストールされたバージョンを確認してみましょう。

```
# x264 -v
x264 0.160.3000 33f9e14
```
##x265のインストール
x265をインストールしようと思って公式さんのサイトを見てみました。そしたらソースコードはGithubではなくhg repositoryだという。。。hg(Mercurial)って恥ずかしながら知りませんでした。このレポジトリ使うにはhgというユーティリティが必要なので、まずはそれを用意します。

```
# yum install hg
```
これでソースコードを持ってこれる。

```
# cd /root/app
# hg clone http://hg.videolan.org/x265
# cd x265
```
x265をインストールします。

```
# ./make-Makefiles.bash
# make
# make install
```
x265のライブラリもx264と同じで、/usr/local/libに配置されます。
このディレクトリには、すでにパスを通しているので今回は反映させるだけでＯＫ。

```
# ldconfig
# ldconfig -p |grep x265
```
ここでも動作確認を兼ねたバージョンの確認します。

```
# x265 --version
x265 [info]: HEVC encoder version 3.4+2-73ca1d7be377
x265 [info]: build info [Linux][GCC 4.8.5][64 bit] 8bit
x265 [info]: using cpu capabilities: MMX2 SSE2Fast LZCNT SSSE3 SSE4.2 AVX FMA3 BMI2 AVX2
```
##ffmpegのインストール
ようやくffmpegです。ソースコードを取ってきて、インストールしてみます。
configureを実行するときにlibsrt, libx264, libx265を有効化します。

```
# cd /root/app
# git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
# cd ffmpeg
# ./configure --enable-libsrt --enable-libx264 --enable-libx265 --enable-nonfree --enable-gpl
ERROR: srt >= 1.3.0 not found using pkg-config
```
エラーが返ってきました。srtはインストールしているのですが。。。調べてみ結果、`pkg-config`が使う`PKG_CONFIG_PATH`に、srtをインストールしたときに作られたsrt.pcやhaisrt.pcへのパスを指定する必要がありました。pkg-configが扱える対象は以下のコマンドで確認できます。詳しくは`man pkg-config`を見てみてください。

```
# pkg-config --list-all
```

パスを指定していないとsrtが含まれていません。ちなみにx264やx265もないです。

取り急ぎパスを通してみます。

```
# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig
# pkg-config --list-all |grep srt
srt                       srt - SRT library set
haisrt                    srt - SRT library set
# pkg-config --list-all |grep x265
x265                      x265 - H.265/HEVC video encoder
# pkg-config --list-all |grep x264
x264                      x264 - H.264 (MPEG4 AVC) encoder library
```
これでエラーなく、インストールできました。

```
# ./configure --enable-libsrt --enable-libx264 --enable-libx265 --enable-nonfree --enable-gpl
# make
# make install
```
srtがプロトコルに含まれていることを確認してみます。

```
[root@storn7-8 ffmpeg]# ffmpeg -protocols
ffmpeg version N-98094-gf66f3ca Copyright (c) 2000-2020 the FFmpeg developers
  built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-39)
  configuration: --enable-libsrt --enable-libx264 --enable-libx265 --enable-nonfree --enable-gpl
  libavutil      56. 52.100 / 56. 52.100
  libavcodec     58. 92.100 / 58. 92.100
  libavformat    58. 46.101 / 58. 46.101
  libavdevice    58. 11.100 / 58. 11.100
  libavfilter     7. 86.100 /  7. 86.100
  libswscale      5.  8.100 /  5.  8.100
  libswresample   3.  8.100 /  3.  8.100
  libpostproc    55.  8.100 / 55.  8.100
Supported file protocols:
Input:
  async
  cache
  concat
  crypto
  data
  ffrtmphttp
  file
  ftp
  gopher
  hls
  http
  httpproxy
  mmsh
  mmst
  pipe
  rtmp
  rtmpt
  rtp
  srtp
  subfile
  tcp
  udp
  udplite
  unix
  srt
Output:
  crypto
  ffrtmphttp
  file
  ftp
  gopher
  http
  httpproxy
  icecast
  md5
  pipe
  prompeg
  rtmp
  rtmpt
  rtp
  srtp
  tee
  tcp
  udp
  udplite
  unix
  srt
```
しっかり入っていました！！

しかし、、、`ffplay`がインストールされていませんでした。
configureのオプションに`--enable-ffplay`を付けてもダメでした。`--enable-libsrt`が影響してるかと思い、外してみてもダメでした。
configureのhelp見てみると、オプションの中に`--enable-ffplay`がなかった。それが原因ですかねぇ。
`ffmpeg/fftools`の中に、`ffplay.c`はあったのですが。まぁ仕方ないです。

このffmpegを使った検証はまた別の投稿で上げる予定です。

##おわりに
初投稿で読みにくいところもあったと思いますが、読んでいただきありがとうございました。