🏉
ffmpeg 6.0 + libsrt 1.5.1 のビルド
ここでの手順をなぞっただけです。
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