最終更新日:2022/01/16 原本2020-06-11

CentOS
ffmpeg
streaming
SRT

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 openssl-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.4

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

# git checkout -b v1.4.4 v1.4.4

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

yum install tcl cmake gcc-c++ automake
yum install tcl pkgconfig cmake gcc-c++ make automake

これでsrtをインストールする用意が整いました。

# ./configure
# make
# make install

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

# ldconfig -p |grep srt

表示されないですよね。srtpとは違うのでご注意を。

/etc/ld.so.conf.dusr-local-lib64.confという名前でファイルを作りました。

# touch /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.15.05です。

# cd
# cd app
# mkdir nasm
# cd nasm

ここにnasm-2.15.05.tar.gzを配置してインストールします。


# wget https://www.nasm.us/pub/nasm/releasebuilds/2.15.05/nasm-2.15.05.tar.gz
# ls
nasm-2.15.05.tar.gz
# tar xvf nasm-2.15.05.tar.gz
# cd nasm-2.15.05
# ./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という名前でファイルを作ります。ファイルには下記の一行だけを記載します。

# touch /etc/ld.so.conf.d/usr-local-lib.conf

/usr/local/lib

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

# ldconfig
# ldconfig -p |grep x264

動作確認も兼ねてインストールされたバージョンを確認してみましょう。

# x264 --version
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/build/linux

x265をインストールします。

# ./make-Makefiles.bash
[c][g]
# make
# make install

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

# 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を有効化します。

# pkg-config --list-all

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

pkg-configが使うPKG_CONFIG_PATHに、srtをインストールしたときに作られた srt.pc や haisrt.pc へのパスを指定する必要がありました。pkg-config が扱える対象は以下のコマンドで確認できます。詳しくはman pkg-configを見てみてください。

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

# 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

これでエラーなく、インストールできます。


# yum install http://rpmfind.net/linux/epel/7/x86_64/Packages/s/SDL2-2.0.14-2.el7.x86_64.rpm 
# yum --enablerepo=eple install SDL2-devel 
# export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib64/pkgconfig:/usr/local/lib/pkgconfig
# cd /root/app
# git clone https://git.ffmpeg.org/ffmpeg.git ffmpeg
# cd ffmpeg
# ./configure --enable-libsrt --enable-libx264 --enable-libx265 --enable-ffplay --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-ffplay --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を使った検証はまた別の投稿で上げる予定です。

おわりに

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