Raspberry Pi 3 Model B+ で ライブ配信ソフト OBS-Studio を動かしてみた。(※ ただし、あまり実用的ではありませんでした)

# はじめに
「<A HREF="https://qiita.com/kitazaki/items/3950c48a68bab1766fb6
">Jetson Nano で ライブ配信ソフト OBS-Studio を動かしてみた。</A>」がかなり実用的だったので、比較のため Raspberry Pi 3 Model B+ でも OBS-Studio を動かしてみました。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/137b7f10-7ac3-2174-cce4-9d427aa8599f.png" width="75%">

# ビルドの手順
<A HREF="https://github.com/obsproject/obs-studio/wiki/Install-Instructions
">公式のビルド手順</A>といくつか異なる点がありました。
ビルドに掛かる時間は必要なパッケージのダウンロード/インストールから始めて 1 時間くらい掛かりました。

## 差分内容
１. インストールする必要なパッケージ名が一部異なる
libfontconfig-dev

- 解決方法 (パッケージ名を変更する)  
libfontconfig1-dev

２. インストールする必要なパッケージが存在しない
libfdk-aac-dev

- 解決方法 (apt-get source list へ設定を追加する)  

```bash
$ sudo vi /etc/apt/sources.list
# 以下の行を追加する
deb http://www.deb-multimedia.org buster main

$ sudo apt-get update -oAcquire::AllowInsecureRepositories=true
$ sudo apt-get install deb-multimedia-keyring
$ sudo apt install libfdk-aac-dev
```

※ 2020/4/25 追記
Deb-Multimedia Repositoryを追加するとエラーが出る。

```bash
W: GPG エラー: http://www.deb-multimedia.org buster InRelease: 公開鍵を利用できないため、以下の署名は検証できませんでした: NO_PUBKEY 5C808C2B65558117
W: リポジトリ http://www.deb-multimedia.org buster InRelease は署名されていません。
N: このようなリポジトリから取得したデータは認証できないので、データの使用は潜在的に危険です。
N: リポジトリの作成とユーザ設定の詳細は、apt-secure(8) man ページを参照してください
```

対策: 公開鍵を登録する。

```bash
$ sudo apt-get install deb-multimedia-keyring
```

３. ビルドが途中で止まる

- 解決方法 (スワップを追加して、make のオプションを変更する)  

```bash
$ sudo vi /etc/dphys-swapfile
# 値を100から1024へ変更する
CONF_SWAPSIZE=100 → 1024

# 設定変更を反映する
$ sudo /etc/init.d/dphys-swapfile restart

# 設定変更を確認する
$ swapon -s
```

```bash
# make の引数を -j4 から -j3 へ変更する
$ make -j3
```

## 環境
- Raspberry Pi 3 Model B+  
- OS イメージ Raspbian buster (2019-09-26-raspbian-buster-full.zip)  
  Raspbian GNU/Linux 10 (buster)
- ウェブカメラ (Logitech, Inc. Webcam C270)

## 手順
１. パッケージを最新の状態に更新する 

```bash
$ sudo apt update
$ sudo apt upgrade
```

２. 必要なパッケージをダウンロード/インストールする 

```bash
$ sudo apt install \
           build-essential \
           checkinstall \
           cmake \
           git \
           libmbedtls-dev \
           libasound2-dev \
           libavcodec-dev \
           libavdevice-dev \
           libavfilter-dev \
           libavformat-dev \
           libavutil-dev \
           libcurl4-openssl-dev \
           libfontconfig1-dev \
           libfreetype6-dev \
           libgl1-mesa-dev \
           libjack-jackd2-dev \
           libjansson-dev \
           libluajit-5.1-dev \
           libpulse-dev \
           libqt5x11extras5-dev \
           libspeexdsp-dev \
           libswresample-dev \
           libswscale-dev \
           libudev-dev \
           libv4l-dev \
           libvlc-dev \
           libx11-dev \
           libx264-dev \
           libxcb-shm0-dev \
           libxcb-xinerama0-dev \
           libxcomposite-dev \
           libxinerama-dev \
           pkg-config \
           python3-dev \
           qtbase5-dev \
           libqt5svg5-dev \
           swig \
           libxcb-randr0-dev \
           libxcb-xfixes0-dev \
           libx11-xcb-dev \
           libxcb1-dev
```

３. OBS-Studio のソースコードをダウンロードする

```bash
$ git clone --recursive https://github.com/obsproject/obs-studio.git
```

４. OBS-Studio をビルドする
"ブラウザソースなし"でビルドしました。

```bash
$ cd obs-studio
$ mkdir build && cd build
$ cmake -DUNIX_STRUCTURE=1 -DCMAKE_INSTALL_PREFIX=/usr ..
$ make -j3
$ sudo make install
```

# Raspberry Pi での実行
コマンドプロンプトから普通に OBS を実行すれば問題ありませんでした。

```bash
$ obs
```

# Jetson Nano との比較
起動後の CPU 使用率に大きな差がありました。Jetson Nano は 6% 程度でしたが、Raspberry Pi は 60% 程度でした。

Jetson Nano の起動後の OBS
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/4be58bcb-c1da-a600-cb85-b9b2e5ddf017.png" width="75%">

Raspberry Pi の起動後の OBS
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/458fdf0b-940e-143a-065d-15ae1be901b6.png" width="75%">

OBS のソースに 映像キャプチャーデバイス (USB カメラ)、音声キャプチャーデバイス (USB カメラ)、ウィンドウキャプチャー、テロップ (テキスト) を追加した時点で CPU 使用率は 90% 近くとなり、フレームレートも 9 fps まで落ち込んだ状態になりました。(Jetson Nano は CPU 使用率もフレームレートも変化がありませんでした。)

Raspberry Pi のソース追加後の OBS
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/344a5013-8e9a-ca67-2683-70a0a722a6d0.png" width="75%">

この時点で YouTube Live 配信は無理だと思いましたが、比較検証のため配信を行ったところ CPU 使用率は 100% となり、フレームレートも 3 fps まで落ち込んだ状態になりました。(Jetson Nano は CPU 使用率 60% 程度でフレームレートの落ち込みはありませんでした。)

Raspberry Pi のソース配信開始後の OBS
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/d88d6bd8-350c-14fd-550f-a9979aa6ac74.png" width="75%">

(参考) YouTube Live 配信のアーカイブ動画 (映像はカクカクで、音声もノイズが入って聞きづらいです)
https://youtu.be/_8X9Sofn0VE

# さいごに
やはり GPU を使用 (ハードウェアエンコードを有効利用) しないと実用的でないことが分かりました。
では、OBS-Studio で良き配信ライフを！

※ 2020/4/12 17:13 追記
raspi-config コマンドで OpenGL ドライバの設定を変更することができますが、OBS-Studio ではサポートされていない GPU のため、OBS 起動時にエラーが出てプロセスが終了します。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/bf839dab-b151-d458-2366-59da8ad27840.png" width="75%">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/186f887c-c132-b487-4d28-37351eed57a7.png" width="75%">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/3a7e2dec-48f1-6b63-ff48-1bd1fd938de9.png" width="75%">

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/72479/a32ded5e-2158-529f-0d88-cccdc43aee56.png" width="75%">