🦔

jetson nano でSRTを有効にしたffmpegをビルドする

2022/05/25に公開

先日の記事に似ていますが、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