2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

ffmpeg-4.2.3 with SRT on CentOS 7.8

Last updated at Posted at 2020-06-10

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.dusr-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を使った検証はまた別の投稿で上げる予定です。

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

2
2
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?