このエントリーをはてなブックマークに追加

2021年2月11日木曜日

OBS(Apple Silicon ARM)をビルドする


 せっかくApple Silicon M1チップのMac買ったのでOBSもRosetta 2経由じゃなくてそのまま動かしたいよね。ってことでチャレンジしてみた。
 作り方は後ほど書く。動かした結果を並べて見たら、どうやらRosetta 2で動かすとCPUの使用率は若干高い。メモリ使用率は4倍も高い。やっぱりネイティブで動かした方がいいね。




作り方。
 注意:自分用メモ。内容は間違っている可能性があるし、人によってはこの方法で動かない場合あり。
    あと次の機能が使えない。
  • ブラウザソースでハードウェアアクセラレータ
  • 一部のVST(x86_64のVST)

Rosetta 2を使わずターミナルを起動

 ターミナルを起動。Rosetta 2使うように設定している場合は設定を解除すること。
 どちらで動いているか分からない場合は
 とコマンドを実行して「arm64」が返ってくればいい。

brewインストール

次のコマンドでbrewをインストール

brewインストール後、念のためにarm64版がインストールされたのか次のコマンドで確認する。

PREFIXが/opt/homebrew
Rosseta 2がfalseになっていればいい。

OBSのビルド方法はいくつかあって、その方法は公式ページに書いてある
「macOS Full Build Script」「Pre-Built Dependencies」
これらの方法をARMでビルドするようちょっと手を加える。

macOS Full Build Scriptの場合

 こっちの方法は必要なファイルのダウンロードからライブラリの依存関係の解決まで全て自動でやってくれるので楽。オススメ。

OBSダウンロード


OBSのソース編集

 を参考に、
 UI/CMakeLists.txt
 libobs/util/platform-cocoa.m
 plugins/mac-capture/mac-audio.c
 を編集する。
 
 を参考に、
 plugins/mac-vth264/encoder.c
 を編集する。

ビルドスクリプト

 CIフォルダに設置。

ビルド

 buildフォルダにOBSのディスクイメージが出来上がるので、それを使ってインストールする。


Pre-Built Dependenciesの場合

 こっちの方法はライブラリの依存関係がそのままなので、そのままでは何か環境が変わったり/tmp/obsdepsが消えたりするとOBSが動かなくなるので注意。あとこの方法だとブラウザソースが使えません。

obs-depsをビルド

 obs-depsはOBSで使われるライブラリの依存関係を構築およびパッケージ化するためのもの。
 macosフォルダに「macos-deps-YYYY-MM-DD.tar.gz」「macos-qt-5.15.2-YYYY-MM-DD.tar.gz」ができるので、これを/tmp/obsdepsフォルダに展開。

OBSダウンロード


OBSのソース編集

 を参考に、
 UI/CMakeLists.txt
 libobs/util/platform-cocoa.m
 plugins/mac-capture/mac-audio.c
 を編集する。
 
 を参考に、
 plugins/mac-vth264/encoder.c
 を編集する。

ビルド

 buildフォルダにOBSのディスクイメージが出来上がるので、それを使ってインストールする。




ウインドウキャプチャや画面キャプチャが働かない場合

 macOSのセキュリティにひっかかってる可能性あり。システム環境設定の「セキュリティとプライバシー」で何を許可すればいいか分からんと思うので、次のコマンドを実行して出てくるダイアログで許可すればいい。

ブラウザソースの映像が出ない場合

 設定→「詳細設定」から「ブラウザソースのハードウェアアクセラレーションを有効にする」のチェックを外す。

仮想カメラ

 通常配布されているOBS(x86_64版)をインストールした事がある場合、x86_64版の仮想カメラプラグインがインストールされているため仮想カメラが使えない。
 /Library/CoreMediaIO/Plug-Ins/DAL/
 にある「obs-mac-virtualcam.plugin」を削除して
 build/plugins/mac-virtualcam/src/dal-plugin/
 の中にある「obs-mac-virtualcam.plugin」に置き換えれば使えるようになる。

StreamFX

 StreamFXが動くか試してみた。
 を参考に、streamfx/source/obs/gs/gs-vertex.hppの
 #include <xmmintrin.h>
 を削除。  対応されたようです。

 過去に書いたMac用にOBSとStreamFXをビルドすると同じような方法で導入できる。

spectralizer

 spectralizerが動くか試してみた。
 まずはFFTWをインストール。
 次のコマンドでspectralizerをビルド&インストール。

obs-multi-rtmp

 obs-multi-rtmpが動くか試してみた。次のコマンドでビルドとインストールができた。

obs-ndi

 動かない。 次の方法でarm64用プラグインをビルドできるが、NDIのarm64対応ライブラリがないので起動時にエラーが出る。


obs-websocket

 obs-websocketが動くか試してみた。次のコマンドでビルドとインストールができた。