🏉

ffmpeg 6.0 + libsrt 1.5.1 のビルド

2023/03/01に公開

ここでの手順をなぞっただけです。
https://zenn.dev/tetsu_koba/articles/a3a5343a3a1f0d

ubuntu 18.04のJetson nanoでやりました。

ffmpegのソースコードの準備

$ git clone https://git.ffmpeg.org/ffmpeg.git
$ cd ffmpeg/
$ git tag |grep 6.0
n6.0
$ git checkout -b w6.0 n6.0

docker環境の作成

$ docker run -it -v $PWD:/root/ffmpeg ubuntu:18.04 /bin/bash

docker環境の中で

# cd /root/ffmpeg/
# apt update
# apt upgrade
# apt install vim
# vi /etc/apt/sources.list
# apt update
# apt build-dep ffmpeg

libsrtのスタティックリンクライブラリをビルド

# cd ..
# apt install git
# git clone https://github.com/Haivision/srt.git
# cd srt
# git tag
# git checkout -b w1.5.1 v1.5.1
# apt-get install tclsh pkg-config cmake libssl-dev build-essential
# ./configure --disable-shared
# make -j`nproc`
# make install

ffmpegのコンフィグのときにエラーになるので、srt.pcを以下のように修正しました。

# diff -u /usr/local/lib/pkgconfig/srt.pc{.org,}
--- /usr/local/lib/pkgconfig/srt.pc.org	2023-03-01 10:49:57.679637700 +0900
+++ /usr/local/lib/pkgconfig/srt.pc	2023-03-01 10:51:57.757358974 +0900
@@ -6,7 +6,6 @@
 Name: srt
 Description: SRT library set
 Version: 1.5.1
-Libs: -L${libdir} -lsrt   
-Libs.private:  -lpthread -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc
+Libs: -L${libdir} -lsrt -lpthread -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc
 Cflags: -I${includedir} -I${includedir}/srt
-Requires.private: openssl libcrypto
+Requires: openssl libcrypto

pkg-config --libs srtが以下のようになればOK。

# pkg-config --libs srt
-L/usr/local/lib -lsrt -lpthread -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc -lssl -lcrypto

ffmpegのビルド

# cd ../ffmpeg

./configure に与えるオプションが長いのでファイルに書いておきます。

conf.sh
./configure --prefix=/usr/local --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --disable-shared --enable-static --enable-libsrt

#--enable-avresample
#--enable-libwavpack
#--enable-libwebp
#--enable-avisynth
#--disable-filter=resample
#--enable-libaom
#--enable-lv2
#--enable-libcodec2 
#--enable-libmysofa
#--enable-libvidstab
#--enable-opencl

(横スクロールしてみてください)

# sh conf.sh
# make -j`nproc`

jetson nanoでのビルドは2時間くらいかかりました。

_gがついているものはstrip前のものです。このくらいサイズが違います。

# ls -l ffmpeg* ffplay* ffprobe*
-rwxr-xr-x 1 root root  20219104 Mar  1 11:34 ffmpeg
-rwxr-xr-x 1 root root 115168904 Mar  1 11:34 ffmpeg_g
-rwxr-xr-x 1 root root  20083936 Mar  1 11:34 ffplay
-rwxr-xr-x 1 root root 114350800 Mar  1 11:34 ffplay_g
-rwxr-xr-x 1 root root  20104944 Mar  1 11:34 ffprobe
-rwxr-xr-x 1 root root 114476584 Mar  1 11:34 ffprobe_g

ビルド環境を保存

docker runから exit した後で

$ docker ps -a
CONTAINER ID   IMAGE          COMMAND                  CREATED        STATUS                      PORTS           NAMES
9aa70a980e47   ubuntu:18.04   "/bin/bash"              2 hours ago    Exited (0) 22 seconds ago                   romantic_almeida
$ docker commit 9aa70a980e47 koba/ffmpeg_build
sha256:093482a8033a085e1a37b847ea097224ae3eae801adcea7b6e535a5d0dc8f620
$ docker images
REPOSITORY                            TAG             IMAGE ID       CREATED          SIZE
koba/ffmpeg_build                     latest          093482a8033a   40 seconds ago   1.06GB

インストール

$ sudo cp ffmpeg ffprobe ffplay /usr/local/bin

バージョンの確認。

$ ffmpeg -version
ffmpeg version 6.0 Copyright (c) 2000-2023 the FFmpeg developers
built with gcc 7 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)
configuration: --prefix=/usr/local --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --disable-shared --enable-static --enable-libsrt
libavutil      58.  2.100 / 58.  2.100
libavcodec     60.  3.100 / 60.  3.100
libavformat    60.  3.100 / 60.  3.100
libavdevice    60.  1.100 / 60.  1.100
libavfilter     9.  3.100 /  9.  3.100
libswscale      7.  1.100 /  7.  1.100
libswresample   4. 10.100 /  4. 10.100
libpostproc    57.  1.100 / 57.  1.100

プロトコルにsrtが入っていることを確認。

$ ffmpeg -protocols 2>/dev/null |grep srt
  srtp
  srt
  srtp
  srt

ちなみにここでのsrtp は  Secure RTP のことでSRTとは無関係です。

Discussion