はじめに
ラズパイ (ARM デバイス) で NDI 受信ができるようになったので、OBS Studio 向け NDI プラグイン obs-ndi を試してみました。
※ obs-ndi は Windows、macOS、Linux (x86、x64) 向けのため ラズパイ (ARM デバイス) で動かすためにはコードの修正とビルドが必要でした。また、OBS Studio のヘッダーファイルの変更も必要でした。
(参考) ラズパイで NDI 受信ができるようになった
https://qiita.com/kitazaki/items/669f65774d77b2f9b82d
導入手順
1. OBS Studio のソースコードをダウンロードしてビルドとインストールを行います。
(参考) ラズパイで OBS Studio を動かす
https://qiita.com/kitazaki/items/fe037d195f497eb54427
https://qiita.com/kitazaki/items/36b9f9ba80cec12164f9
※ make と make install が終わった後からの手順
obs-ndi のビルドに必要なヘッダーファイルをコピーします。
$ cd
$ sudo cp obs-studio/UI/obs-frontend-api/obs-frontend-api.h /usr/include/obs/
obs-ndi のビルドを通すためヘッダーファイルを修正します。
# include "graphics/vec3.h"
↓
/* #include "graphics/vec3.h" */
EXPORT void gs_clear(uint32_t clear_flags, const struct vec4 *color,
↓
EXPORT void gs_clear(uint32_t clear_flags, const struct vec2 *color,
2. obs-ndi のソースコードをダウンロードしてソースコードを修正します。
$ git clone https://github.com/Palakis/obs-ndi.git
$ cd obs-ndi
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11 -mtune=core2 -Ofast")
↓
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")
struct vec4 background;
vec4_zero(&background);
↓
struct vec2 background;
vec2_zero(&background);
struct vec4 background;
vec4_zero(&background);
↓
struct vec2 background;
vec2_zero(&background);
3. obs-ndi のビルドを実行します。
$ mkdir build && cd build
$ cmake -DLIBOBS_INCLUDE_DIR="../../obs-studio/libobs" -DCMAKE_INSTALL_PREFIX=/usr ..
$ make -j4
4. ビルドしたライブラリを OBS Studio のプラグインフォルダへコピーする。
$ sudo cp obs-ndi.so /usr/lib/obs-plugins/
※ ライブラリ (バイナリ) を github へ置いておきます。(ビルドが面倒な場合はダウンロードして OBS Studio のプラグインフォルダに保存してください)
https://github.com/kitazaki/obs-ndi_arm
動作確認
環境
- Raspberry Pi 4
- Raspberry Pi OS (32bit 版)
2020-05-27-raspios-buster-armhf.zip (OS イメージファイル)
- Raspberry Pi OS (32bit 版)
- NDI ソース
- JustWifiCam (iOS)
- NDI Monitor (macOS)