🌊
SRTの入ったラズパイ用ffmpegをdockerでクロスビルドする
RaspberryPi OS armhf のdockerイメージの作成
officialなdockerイメージが見つからなかったので、以下のページを参考にして自分で作りました。
x86_64の仮想マシン上で
$ sudo apt install qemu-user-static
ラズパイのrootfsをダウンロードして、そこからdockerイメージを作成。
$ mkdir raspios_lite_armhf
$ cd raspios_lite_armhf/
$ wget https://downloads.raspberrypi.org/raspios_lite_armhf/root.tar.xz
$ docker image import root.tar.xz koba/raspios_lite_armhf:bullseye
$ docker images |head -n 2
REPOSITORY TAG IMAGE ID CREATED SIZE
koba/raspios_lite_armhf bullseye 01cc763cbd22 20 seconds ago 1.16GB
uname
でアーキテクチャがarmv7であることを確認する。
$ docker run --rm -it koba/raspios_lite_armhf:bullseye uname -a
Linux a37097e5727f 5.13.0-1028-oracle #33~20.04.1-Ubuntu SMP Mon May 2 03:53:18 UTC 2022 armv7l GNU/Linux
dockerコンテナ内でビルド
成果物をコピーするためにカレントディレクトリを/mnt
にマウントして、コンテナ内に入る。
$ docker run -it -v $PWD:/mnt koba/raspios_lite_armhf:bullseye bash
まずSRTのスタティックリンクライブラリをビルド。
# cd /root
# apt update; apt upgrade -y
# apt install -y git tclsh pkg-config cmake libssl-dev build-essential
# git clone https://github.com/Haivision/srt.git
# cd srt/
# git checkout -b w1.4.4 v1.4.4
# ./configure --disable-shared
# make -j`nproc`
# make install
# vi /usr/local/lib/arm-linux-gnueabihf/pkgconfig/srt.pc
ffmpegのconfigureでエラーになるので、srt.pc
を以下のように修正する。
--- srt.pc.org 2022-06-15 02:53:44.710927553 +0100
+++ srt.pc 2022-06-15 02:54:01.971116779 +0100
@@ -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 -latomic
+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
ffmpegのビルド。
# cd /root/
# git clone https://git.ffmpeg.org/ffmpeg.git
# cd ffmpeg/
# git tag
# git checkout -b w5.0.1 n5.0.1
# vi /etc/apt/sources.list
# vi /etc/apt/sourece.list.d/raspi.list
それぞれ deb-src
の行をアンコメント。
# apt update
# apt build-dep ffmpeg
./configure
のオプションは以下の通り。
conf.sh
./configure --prefix=/usr/local --extra-version=with_libsrt --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --enable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-mmal --enable-neon --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libsrt --disable-shared --libdir=/usr/lib/arm-linux-gnueabihf --cpu=arm1176jzf-s --arch=arm
# --enable-avresample
# --enable-libwavpack
# --enable-rpi
# --enable-v4l2-request
# --enable-libudev
# --enable-epoxy
# --enable-vout-drm
# --disable-filter=resample
ビルドして、成果物を /mnt/
にコピー。
# sh conf.sh
# make -j`nproc`
# cp ffmpeg ffprobe ffplay /mnt/
# exit
修正ビルドをするときのためにコンテナをcommit
しておく。
$ docker ps -a |head -n 2
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6aa2b2e42db6 koba/raspios_lite_armhf:bullseye "bash" 5 hours ago Exited (0) 38 seconds ago tender_bartik
$ docker commit 6aa2b2e42db6 koba/raspi_armhf_ffmpeg
ラズパイで動作確認
ビルドできたffmpeg
, ffplay
, ffprobe
をラズパイの/usr/local/bin
にコピーする。
$ ffmpeg -version
ffmpeg version n5.0.1-with_libsrt Copyright (c) 2000-2022 the FFmpeg developers
built with gcc 10 (Raspbian 10.2.1-6+rpi1)
configuration: --prefix=/usr/local --extra-version=with_libsrt --toolchain=hardened --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --enable-stripping --enable-gnutls --enable-ladspa --enable-libaom --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libcodec2 --enable-libdav1d --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libjack --enable-libmp3lame --enable-libmysofa --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librabbitmq --enable-librsvg --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libsrt --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx265 --enable-libxml2 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-lv2 --enable-omx --enable-openal --enable-opencl --enable-opengl --enable-sdl2 --enable-mmal --enable-neon --enable-pocketsphinx --enable-libdc1394 --enable-libdrm --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libx264 --enable-libsrt --disable-shared --libdir=/usr/lib/arm-linux-gnueabihf --cpu=arm1176jzf-s --arch=arm
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