🦔
jetson nano でSRTを有効にしたffmpegをビルドする
先日の記事に似ていますが、libsrtの新しいもの(v1.4.4)をソースからビルドしてスタティックリンクしているところが異なります。
ffmpegのソースコードの準備
$ git clone https://git.ffmpeg.org/ffmpeg.git
$ cd ffmpeg/
$ git tag
$ git checkout -b w5.0.1 n5.0.1
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.4.4 v1.4.4
# apt-get install tclsh pkg-config cmake libssl-dev build-essential
# ./configure --disable-shared
# make -j`nproc`
# make install
ffmpegのコンフィグのときにエラーになるので、srt.pc
を以下のように修正しました。
# vi /usr/local/lib/pkgconfig/srt.pc
--- /usr/local/lib/pkgconfig/srt.pc.org 2022-05-24 23:47:24.298481445 +0900
+++ /usr/local/lib/pkgconfig/srt.pc 2022-05-24 23:48:08.855205313 +0900
@@ -6,7 +6,8 @@
Name: srt
Description: SRT library set
Version: 1.4.4
-Libs: -L${libdir} -lsrt
+Libs: -L${libdir} -lsrt -lpthread -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc
+Requires: openssl libcrypto
Libs.private: -lpthread -lstdc++ -lm -lgcc_s -lgcc -lc -lgcc_s -lgcc
Cflags: -I${includedir} -I${includedir}/srt
Requires.private: 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
conf.sh
./configure --prefix=/usr/local --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --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
(横スクロールしてみてください)
後から気がつきましたが、--extra-version=1ubuntu0.1
と--disable-stripping
は外しておくべきでした。
# sh conf.sh
# make -j`nproc`
conf.sh の中に--disable-stripping
が入っていまたので、stripされていませんでした。
なので、自分でstripします。
# strip ffmpeg
# strip ffplay
# strip ffprobe
_g
がついているものはstrip前のものです。このくらいサイズが違います。
# ls -l ffmpeg* ffplay* ffprobe*
-rwxr-xr-x 1 root root 19840304 5月 25 00:25 ffmpeg
-rwxr-xr-x 1 root root 114508128 5月 25 00:21 ffmpeg_g
-rwxr-xr-x 1 root root 19713312 5月 25 00:25 ffplay
-rwxr-xr-x 1 root root 113929448 5月 25 00:21 ffplay_g
-rwxr-xr-x 1 root root 19730224 5月 25 00:25 ffprobe
-rwxr-xr-x 1 root root 114057448 5月 25 00:21 ffprobe_g
ビルド環境を保存
docker run
から exit した後で
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6f72f534707b ubuntu:18.04 "/bin/bash" 2 hours ago Exited (1) 8 seconds ago modest_cori
$ docker commit 6f72f534707b koba/ffmpeg_build
sha256:88d688c5b0eb0c6f0db94ef11715ef13f39d71443828bc9c8493a7bd6f140d7a
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
koba/ffmpeg_build latest 88d688c5b0eb 11 seconds ago 1.03GB
インストール
$ sudo cp ffmpeg ffprobe ffplay /usr/local/bin
バージョンの確認。
$ ffmpeg -version
ffmpeg version 5.0.1-1ubuntu0.1 Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 7 (Ubuntu/Linaro 7.5.0-3ubuntu1~18.04)
configuration: --prefix=/usr/local --extra-version=1ubuntu0.1 --toolchain=hardened --libdir=/usr/lib/aarch64-linux-gnu --incdir=/usr/include/aarch64-linux-gnu --arch=arm64 --enable-gpl --disable-stripping --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 57. 17.100 / 57. 17.100
libavcodec 59. 18.100 / 59. 18.100
libavformat 59. 16.100 / 59. 16.100
libavdevice 59. 4.100 / 59. 4.100
libavfilter 8. 24.100 / 8. 24.100
libswscale 6. 4.100 / 6. 4.100
libswresample 4. 3.100 / 4. 3.100
libpostproc 56. 3.100 / 56. 3.100
プロトコルにsrtが入っていることを確認。
$ ffmpeg -protocols 2>/dev/null |grep srt
srtp
srt
srtp
srt
Discussion