Wowza Streaming Engine で MacBook のカメラ映像配信をお試し

## はじめに

Wowza Streaming Engine （以下、WSE） は映像をストリーミング配信するためのミドルウェアです

今回は WSE を試してみるため、手元の MacBook にインストールし、 MacBook 内蔵のカメラ映像を配信してみました

データの流れは以下のようになります

MacBook のカメラ -> OBS Studio -RTMP-> WSE -RTSP-> ffmpeg

いろんなところでハマったため、備忘録として残しておきます

Wowza 公式

https://www.wowza.com/

ちなみに、 Wowza Streaming Cloud を使えば簡単に Web 配信の流れは作れますが、今回は RTSP で出力したかったので WSE を使っています

また、 スマホから配信するための Wowza GoCoder は日本の AppStore から入手できませんでした :cry: 

https://www.wowza.com/products/gocoder#getting-started

## Wowza Streaming Engine のインストール

とりあえずのお試しなので、 Wowza の公式にサインアップし、 Free Trial を開始します

30日間は無償で使えます

https://www.wowza.com/wowza-streaming-engine-free-trial

あとはインストーラをダウンロード・実行し、メールで送られてくるライセンスキー等を入れていきます

公式の解説はこちら

https://www.wowza.com/docs/how-to-install-and-configure-wowza-streaming-engine

## 実行環境

- macOS Big Sur 11.5
- Wowza Streaming Engine 4.8.14+9
- OBS Studio 27.0.1
- ffmpeg 4.4

## Wowza Streaming Engine の起動

インストールしてもアプリケーションに _Stop Services_ という名前で Wowza のアイコンが追加されるだけでした

![スクリーンショット 2021-07-28 13.58.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/28e36e79-e6c9-4203-9dfb-6be6fd444555.png)

アレ？ _Start_ は？と思いましたが、以下のコマンドで起動します

```bash
sudo launchctl load -w /Library/LaunchDaemons/com.wowza.WowzaStreamingEngine.plist
```

また、ブラウザから GUI で操作するための Manager も同様に起動します

```bash
sudo launchctl load -w /Library/LaunchDaemons/com.wowza.WowzaStreamingEngineManager.plist
```

すでに起動されている場合は以下のように返ってきます

```bash
$ sudo launchctl load -w /Library/LaunchDaemons/com.wowza.WowzaStreamingEngine.plist
/Library/LaunchDaemons/com.wowza.WowzaStreamingEngine.plist: service already loaded
Load failed: 37: Operation already in progress
```

止めるときは以下のコマンドです（ load -> unload ）

```bash
sudo launchctl unload -w /Library/LaunchDaemons/com.wowza.WowzaStreamingEngine.plist
sudo launchctl unload -w /Library/LaunchDaemons/com.wowza.WowzaStreamingEngineManager.plist
```

再起動時は停止してから起動してください

Manager が起動できたら http://localhost:8088 にアクセスします

サインイン画面が表示されれば OK です

![スクリーンショット 2021-07-28 10.28.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/f017c081-9248-fe63-95b3-25e443371058.png)

インストール時に入れたユーザー名、パスワードを入れてください

### もしパスワードを忘れていたら

すぐに忘れてしまう私のような人のために

実は `/Library/WowzaStreamingEngine/conf/admin.password` に認証情報が書かれているので、ここを書き換えてサービス再起動すればサインインできます

```text
# Admin password file (format: [username][space][password][space][groups][space][passwordEncoding])
# [groups]= "admin" | "admin|advUser" | "basic".
# [passwordEncoding]= "cleartext" | "bcrypt" | "digest". If no value is specified, defaults to "cleartext".
#
# Examples
# username password admin cleartext
# admin password admin|advUser cleartext
# admin2 $2y$10$3RI.M/WPQ8qomZb0EkaGme/873Y3dI18TIPB2GUOWrOJC2RDsfJCa admin bcrypt
# user 66210ee3b40b2d14feb73d6216d01324 readOnly digest

xxx xxx admin|advUser bcrypt
```

## アプリケーションの追加

ライブ配信用のアプリケーションを WSE 上に作成します

_Applications_ タブを選択し、 _Live_ をクリックしてください

![スクリーンショット 2021-07-28 11.31.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/4013fba8-7d19-1316-e17d-60fbc4f1a502.png)

表示されたダイアログにアプリケーション名を入れてください（今回は webcam にします）

`+Add` をクリックすれば出来上がりです

![スクリーンショット 2021-07-28 11.41.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/99a400d5-74fc-e874-dca1-0d45880d467f.png)

## 入力元の設定

左サイドメニューから _Source Security_ を選択し、 _Edit_ をクリックします

今回は RTMP で認証なしで入力するため、 RTMP Source を Open に指定します

![スクリーンショット 2021-07-28 11.07.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/18e3e9f6-a179-56fb-0148-a23ac0adee72.png)

_Save_ をクリックすると、アプリケーションの再起動を求められるので _Restart Now_ をクリックします

![スクリーンショット 2021-07-28 11.09.20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/f5c8a15e-22fa-3679-7d84-bca7d97fa8d7.png)

これで入力を受ける準備ができました

## OBS Studio からの入力

カメラ入力を Wowza へ送るために OBS Studio を使います

公式からダウンロードしてインストールしてください

https://obsproject.com/ja/download

OBS　Studio を起動すると以下のような画面が表示されます

![スクリーンショット 2021-07-28 13.14.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/c677e3df-5a5b-70d0-5431-5b718c5fc59a.png)

今回はカメラ映像を配信したいので、 _ソース_ の左下 _+_ をクリックし、 _映像キャプチャデバイス_ を選択します

![スクリーンショット 2021-07-28 13.19.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/fe938754-581f-2e87-9a3a-be1e23c0db8f.png)

名前を入力してデバイスを選択します

最初はプライバシー設定の指示が出るので、指示に従って環境設定してください

OBS Studio にカメラ映像が表示されます

![スクリーンショット 2021-07-28 13.48.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/1304e11b-c4ab-52ce-ee3c-12ae5cb292de.png)

次に右下メニューの _設定_ をクリックします

![スクリーンショット 2021-07-28 13.23.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/1af2e243-0f0d-9923-a782-51ed7433fe83.png)

左メニューから _配信_ を選択し、以下のように入力します

- サービス: カスタム
- サーバー: rtmp://127.0.0.1:1935/_WSEのアプリケーション名_
- ストリームキー: 任意の文字列（今回は myStream とします）

![スクリーンショット 2021-07-28 13.24.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/9b01938d-03fc-c9a4-89cc-731ff0290ef5.png)

_OK_ をクリックして保存した後、右下メニューの _配信開始_ をクリックします

![スクリーンショット 2021-07-28 13.23.21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/1af2e243-0f0d-9923-a782-51ed7433fe83.png)

うまくいけば _配信開始_ だったところが _配信終了_ なり、フッターに配信状況が表示されます

![スクリーンショット 2021-07-28 13.27.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/2de68c0a-0501-aa6a-0e9f-cddfbb2d0ab8.png)

また、 Wowza Streaming Server の _Incoming Streams_ を見ると、 OBS からのストリームが表示されます

![スクリーンショット 2021-07-28 13.37.01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/38254533-11a2-eee9-d6c4-50cb3354190a.png)

## ffmpeg で配信確認

Wowza が RTSP で配信できていることを確認するため、 ffmpeg でストリームを受信し、フレームを画像として出力してみます

https://www.ffmpeg.org/

macOS なら `brew install ffmpeg` でインストールできます

https://brew.sh/index_ja

ffmpeg がインストールできたら、ターミナルで以下のコマンドを実行してください

```bash
$ ffmpeg -i rtsp://127.0.0.1:1935/_WSEのアプリケーション名_/_OBSのストリームキー_ -f image2 -update 1 img.jpg
```

実行すると、受信状況が表示されます

```bash
$ ffmpeg -i rtsp://127.0.0.1:1935/webcam/myStream -f image2 -update 1 img.jpg
ffmpeg version 4.4 Copyright (c) 2000-2021 the FFmpeg developers
  built with Apple clang version 12.0.5 (clang-1205.0.22.9)
  configuration: --prefix=/usr/local/Cellar/ffmpeg/4.4_2 --enable-shared --enable-pthreads --enable-version3 --cc=clang --host-cflags= --host-ldflags= --enable-ffplay --enable-gnutls --enable-gpl --enable-libaom --enable-libbluray --enable-libdav1d --enable-libmp3lame --enable-libopus --enable-librav1e --enable-librubberband --enable-libsnappy --enable-libsrt --enable-libtesseract --enable-libtheora --enable-libvidstab --enable-libvorbis --enable-libvpx --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxml2 --enable-libxvid --enable-lzma --enable-libfontconfig --enable-libfreetype --enable-frei0r --enable-libass --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libspeex --enable-libsoxr --enable-libzmq --enable-libzimg --disable-libjack --disable-indev=jack --enable-avresample --enable-videotoolbox
  libavutil      56. 70.100 / 56. 70.100
  libavcodec     58.134.100 / 58.134.100
  libavformat    58. 76.100 / 58. 76.100
  libavdevice    58. 13.100 / 58. 13.100
  libavfilter     7.110.100 /  7.110.100
  libavresample   4.  0.  0 /  4.  0.  0
  libswscale      5.  9.100 /  5.  9.100
  libswresample   3.  9.100 /  3.  9.100
  libpostproc    55.  9.100 / 55.  9.100
Input #0, rtsp, from 'rtsp://127.0.0.1:1935/webcam/myStream':
  Metadata:
    title           : myStream
  Duration: N/A, start: 0.214000, bitrate: N/A
  Stream #0:0: Audio: aac (LC), 48000 Hz, stereo, fltp
  Stream #0:1: Video: h264 (High), yuv420p(tv, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], 30 fps, 30 tbr, 90k tbn, 60 tbc
Stream mapping:
  Stream #0:1 -> #0:0 (h264 (native) -> mjpeg (native))
Press [q] to stop, [?] for help
[swscaler @ 0x7f93e1446000] deprecated pixel format used, make sure you did set range correctly
Output #0, image2, to 'img.jpg':
  Metadata:
    title           : myStream
    encoder         : Lavf58.76.100
  Stream #0:0: Video: mjpeg, yuvj420p(pc, bt709, progressive), 1280x720 [SAR 1:1 DAR 16:9], q=2-31, 200 kb/s, 30 fps, 30 tbn
    Metadata:
      encoder         : Lavc58.134.100 mjpeg
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: N/A
frame=  451 fps= 32 q=24.8 size=N/A time=00:00:15.03 bitrate=N/A dup=11 drop=5 speed=1.06x
```

また、実行ディレクトリーに img.jpg ができます

Finder でアイコン表示をしていれば、定期的に更新されて動いているのが分かります

![スクリーンショット 2021-07-28 13.47.47.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1485835/61f375e0-8c07-fb4a-e59f-e92ddeb7f21c.png)

## 終わりに

これでローカル環境で Wowza の色々なテスト・検証ができるようになりました