Introduction

前回 の補足。

前回は、ffmepg にリンクする多くのライブラリが動的リンクだったため、コンパクト性に欠けたのでその対策。

  • 必要なものは可能な限り静的リンク
  • libopenh264 だけは絶対に動的リンク

以上の条件を満たすものを作る。

How to build?

前回と必要なものは変わらない。
変更点からある個所 4. libopenh264 のインストール から説明。

1. libopenh264 のビルド

git からクローンしてビルドするだけ。

1
2
3
4
$ git clone -b v2.3.1 https://github.com/cisco/openh264
$ cd openh264
$ make
$ make install-shared

make install-shared で動的ライブラリが /usr/local/lib/ にインストールされる。

1
2
3
4
5
6
7
8
9
10
11
12
$ ls -la /usr/local/lib/pkgconfig
total 1
drwxr-xr-x 1 XXXXXX なし 0 Dec 29 20:03 .
drwxr-xr-x 1 XXXXXX なし 0 Dec 29 20:03 ..
-rw-r--r-- 1 XXXXXX なし 327 Dec 29 20:03 openh264.pc

$ ls -la /usr/local/lib
total 1500
drwxr-xr-x 1 XXXXXX なし 0 Dec 29 20:03 .
drwxr-xr-x 1 XXXXXX なし 0 Dec 29 00:45 ..
-rw-r--r-- 1 XXXXXX なし 1533308 Dec 29 20:03 libopenh264.dll.a
drwxr-xr-x 1 XXXXXX なし 0 Dec 29 20:03 pkgconfig

2. FFMPEG のビルド

configure に渡す引数の変更と環境変数の設定が必要になった。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
$ export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
$ ./configure \
--prefix=/home/ffmpeg-build-static \
--disable-bzlib \
--disable-cuda \
--disable-cuvid \
--disable-debug \
--disable-doc \
--disable-gpl \
--disable-htmlpages \
--disable-iconv \
--disable-logging \
--disable-manpages \
--disable-podpages \
--disable-postproc \
--disable-txtpages \
--enable-avdevice \
--enable-d3d11va \
--enable-dxva2 \
--enable-hwaccel=h264_dxva2 \
--enable-libopenh264 \
--enable-optimizations \
--enable-static \
--enable-version3 \
--enable-optimizations \
--extra-ldflags='-static-libgcc -static-libstdc++'
$ make
$ make install

--enable-static がなくなっただけ。
出力先も /home/ffmpeg-build-static に変更。

build

この状態でも、

  • libopenh264.dll
  • C:\msys64\mingw64\bin\libwinpthread-1.dll
  • C:\msys64\mingw64\bin\zlib1.dll
  • C:\msys64\mingw64\bin\liblzma-5.dll
    • これが必要になる環境があったが原因は不明

は必要になるが、avcodec-58.dll 等の余計なものがなくなったので随分とすっきりした。