LoginSignup
7
5

More than 3 years have passed since last update.

GPL ライセンス違反で FFmpeg 4.1 系以降から削除された NDI ライブラリを最新のソースツリーに組み込んでビルドする手順

Posted at

はじめに

FFmpeg 3.4 で NDI がサポートされましたが、その後 NewTek 社が GPL ライセンス違反で適切な対応が取られなかったことで、FFmpeg 4.1系以降から NDI のサポートが削除されました。

スクリーンショット 2020-04-29 0.32.46.png

(参考)
https://trac.ffmpeg.org/ticket/7589
https://patchwork.ffmpeg.org/project/ffmpeg/patch/CAB0OVGpkpyFzmkuC+kO3-Er3iNYH9hpO4zDTQZbRpEyFu=fjuQ@mail.gmail.com/

FFmepg 4.0 系でビルドする手順

FFmpeg 4.0 系 (4.0 系の最終 4.0.5) であれば適切な NDI SDK ライブラリを組み込めば問題なくビルドできます。

(参考)
https://qiita.com/kitazaki/items/eeb710a78c657024f844
https://qiita.com/kitazaki/items/8b1f730903d3a62025e9

FFmpeg 4.1 系以降でビルドする方法

FFmpeg 4.2 系 (2020 年 4 月 29 日時点の最終 4.2.2) で NDI SDK ライブラリを組み込んでビルドする手順です。
手掛かりは FFmpeg 4.1 で NDI に関連するソースコードが削除された履歴 (Patch) です。
hints.png

削除されたコードを最新のソースツリーに反映することで NDI SDK ライブラリを組み込めば問題なくビルドできました。

最初に FFmpeg 4.2 系 (2020 年 4 月 29 日時点の最終 4.2.2) のソースコードをダウンロードします。

$ git clone git://source.ffmpeg.org/ffmpeg.git -b release/4.2 --depth=1
$ cd ffmpeg

1. configure ファイルを修正する
以下はパッチファイルです。先頭が '-' で始まる赤字の部分を configure ファイルに追加します。

@@ -297,7 +297,6 @@  External library support:
   --enable-lv2             enable LV2 audio filtering [no]
   --disable-lzma           disable lzma [autodetect]
   --enable-decklink        enable Blackmagic DeckLink I/O support [no]
-  --enable-libndi_newtek   enable Newteck NDI I/O support [no]</font>
   --enable-mbedtls         enable mbedTLS, needed for https support
                            if openssl, gnutls or libtls is not used [no]
   --enable-mediacodec      enable Android MediaCodec support [no]
@@ -1675,7 +1674,6 @@  EXTERNAL_LIBRARY_GPL_LIST="

 EXTERNAL_LIBRARY_NONFREE_LIST="
     decklink
-    libndi_newtek
     libfdk_aac
     openssl
     libtls
@@ -3256,10 +3254,6 @@  decklink_indev_extralibs="-lstdc++"
 decklink_outdev_deps="decklink threads"
 decklink_outdev_suggest="libklvanc"
 decklink_outdev_extralibs="-lstdc++"
-libndi_newtek_indev_deps="libndi_newtek"
-libndi_newtek_indev_extralibs="-lndi"
-libndi_newtek_outdev_deps="libndi_newtek"
-libndi_newtek_outdev_extralibs="-lndi"
 dshow_indev_deps="IBaseFilter"
 dshow_indev_extralibs="-lpsapi -lole32 -lstrmiids -luuid -loleaut32 -lshlwapi"
 fbdev_indev_deps="linux_fb_h"
@@ -6064,7 +6058,6 @@  enabled cuda_sdk          && require cuda_sdk cuda.h cuCtxCreate -lcuda
 enabled chromaprint       && require chromaprint chromaprint.h chromaprint_get_version -lchromaprint
 enabled decklink          && { require_headers DeckLinkAPI.h &&
                                { test_cpp_condition DeckLinkAPIVersion.h "BLACKMAGIC_DECKLINK_API_VERSION >= 0x0a090500" || die "ERROR: Decklink API version must be >= 10.9.5."; } }
-enabled libndi_newtek     && require_headers Processing.NDI.Lib.h
 enabled frei0r            && require_headers frei0r.h
 enabled gmp               && require gmp gmp.h mpz_export -lgmp
 enabled gnutls            && require_pkg_config gnutls gnutls gnutls/gnutls.h gnutls_global_init

次に libavdevice ディレクトリへ移動します。

$ cd libavdevice

2. libavdevice/Makefile ファイルを修正する
以下はパッチファイルです。先頭が '-' で始まる赤字の部分を Makefile ファイルに追加します。

@@ -20,8 +20,6 @@  OBJS-$(CONFIG_BKTR_INDEV)                += bktr.o
 OBJS-$(CONFIG_CACA_OUTDEV)               += caca.o
 OBJS-$(CONFIG_DECKLINK_OUTDEV)           += decklink_enc.o decklink_enc_c.o decklink_common.o
 OBJS-$(CONFIG_DECKLINK_INDEV)            += decklink_dec.o decklink_dec_c.o decklink_common.o
-OBJS-$(CONFIG_LIBNDI_NEWTEK_OUTDEV)      += libndi_newtek_enc.o
-OBJS-$(CONFIG_LIBNDI_NEWTEK_INDEV)       += libndi_newtek_dec.o
 OBJS-$(CONFIG_DSHOW_INDEV)               += dshow_crossbar.o dshow.o dshow_enummediatypes.o \
                                             dshow_enumpins.o dshow_filter.o \
                                             dshow_pin.o dshow_common.o

3. libavdevice/libndi_newtek_common.h、libndi_newtek_dec.c、libndi_newtek_enc.cファイルを追加する
ファイルをダウンロードします。

$ wget https://raw.githubusercontent.com/kitazaki/ffmpeg_NDI/master/libndi_newtek_common.h
$ wget https://raw.githubusercontent.com/kitazaki/ffmpeg_NDI/master/libndi_newtek_dec.c
$ wget https://raw.githubusercontent.com/kitazaki/ffmpeg_NDI/master/libndi_newtek_enc.c

4. libavdevice/alldevices.c ファイルを修正する
以下はパッチファイルです。先頭が '-' で始まる赤字の部分を alldevices.c ファイルに追加します。

@@ -32,8 +32,6 @@ extern AVInputFormat  ff_bktr_demuxer;
 extern AVOutputFormat ff_caca_muxer;
 extern AVInputFormat  ff_decklink_demuxer;
 extern AVOutputFormat ff_decklink_muxer;
-extern AVInputFormat  ff_libndi_newtek_demuxer;
-extern AVOutputFormat ff_libndi_newtek_muxer;
 extern AVInputFormat  ff_dshow_demuxer;
 extern AVInputFormat  ff_fbdev_demuxer;
 extern AVOutputFormat ff_fbdev_muxer;

以上で NDI に関連するソースコードの反映は完了です。

$ cd ..

別途、NDI SDK ライブラリをダウンロード、インストールしてビルドします。

(参考: NDI SDK ライブラリをダウンロード、インストール)
https://qiita.com/kitazaki/items/eeb710a78c657024f844
https://qiita.com/kitazaki/items/8b1f730903d3a62025e9

$ ./configure --enable-nonfree --enable-libndi_newtek --extra-cflags="-I/usr/include/ndi/" --extra-ldflags="-L/usr/include/ndi/" --enable-libx264 --enable-gpl

Jetson Nano で NVMPI の有効化と合わせて NDI を組み込むことも可能です。

(参考: Jetson Nano で NVMPI を有効化する場合)
https://qiita.com/kitazaki/items/02298356703418450dcc

$ ./configure --enable-nvmpi --enable-nonfree --enable-libndi_newtek --extra-cflags="-I/usr/include/ndi/" --extra-ldflags="-L/usr/include/ndi/" --enable-libx264 --enable-gpl

JetsonNano_FFmpeg+NDI.png

7
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
5