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に配置されます。
このディレクトリには、すでにパスを通しているので今回は反映させるだけで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を有効化します。
# 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を使った検証はまた別の投稿で上げる予定です。
##おわりに
初投稿で読みにくいところもあったと思いますが、読んでいただきありがとうございました。