はじめに
Wowza Streaming Engine (以下、WSE)で配信している動画からフレームを切り出したい!
というわけで、公式のドキュメントに沿ってやってみました
API 経由で切り出せるようなので、意外と簡単にできそうですね
実行環境
- macOS Big Sur 11.5
- OBS Studio 27.0.1
- Docker 20.10.7
- Wowza Streaming Engine 4.8.12+1
REST API によるサムネイル取得
ドキュメントによると、設定を変更してから API にアクセスすればサムネイルとしてフレームの画像が取得できるようです
以下のコードを /Library/WowzaStreamingEngine/conf/VHost.xml の Port 8086 の HTTPProviders に追加して再起動します
<HTTPProvider>
<BaseClass>com.wowza.wms.transcoder.thumbnailer.HTTPProviderGenerateThumbnail</BaseClass>
<RequestFilters>thumbnail*</RequestFilters>
<AuthenticationMethod>none</AuthenticationMethod>
</HTTPProvider>
Java の実装をわざわざしたくないので、公式ドキュメントの一番下に書いてある REST API にアクセスしてみます
http://[wowza-ip-address]:8086/thumbnail?application=[application-name]&streamname=[stream-name]&size=[width]x[height]&fitmode=[fitmode]&crop=[left],[right],[top],[bottom]&format=[png,jpg]
curl "http://localhost:8086/thumbnail?application=webcam&streamname=myStream&size=1280x720&format=jpeg"
、、、アレ?
待てど暮らせど何も返ってこない、、、
というわけで、実はトランスコーダー設定が必要でした
公式ドキュメントを参考にセットアップしてみましょう
Enable the Transcoder
- In the Applications contents panel, select your live application, and then click Transcoder. Then in the details page, click Enable Transcoder.
メニューから Transcoder をクリックするわけですね、、、
、、、そんな項目ありませんが
別のところを見ると、そもそも macOS 版はトランスコーダーに対応していませんでした
Transcoder is supported only on 64-bit versions of Windows and Linux. A 64-bit Java runtime is also required. 32-bit versions of Windows and Linux aren't supported. The macOS operating system isn't supported, either.
Docker で WSE
というわけで、 Docker の出番です
まずは今ローカルで動いているものを停止します
sudo launchctl unload -w /Library/LaunchDaemons/com.wowza.WowzaStreamingEngineManager.plist
sudo launchctl unload -w /Library/LaunchDaemons/com.wowza.WowzaStreamingEngine.plist
公式ドキュメントに従って、以下のようにコンテナを実行します
docker run -it --name wowza \
--restart always \
--expose 1935/tcp \
--expose 8086/tcp \
--expose 8087/tcp \
--expose 8088/tcp \
--publish 1935:1935 \
--publish 8086:8086 \
--publish 8087:8087 \
--publish 8088:8088 \
--volume <ローカルのパス>:/usr/local/WowzaStreamingEngine/logs \
--entrypoint /sbin/entrypoint.sh \
--env WSE_MGR_USER=<ユーザー名> \
--env WSE_MGR_PASS=<パスワード> \
--env WSE_LIC=<ライセンスコード> \
--env WSE_IP_PARAM=127.0.0.1 \
wowzamedia/wowza-streaming-engine-linux
一瞬で立ち上がりました
今まで一生懸命 macOS 版で動かしていた意味は、、、
Docker 上は Linux 版で動いているので、しっかり Transcoder の項目が出ています
Enable Transcoder をクリックします
そして、ローカルでやったのと同じように VHost.xml
を編集します
起動中のコンテナに入ります
docker exec -it wowza bas
コンテナ内に vim が無かったので入れます
apt-get update
apt-get install vim
そして編集します
Linux の場合のパスは /usr/local/WowzaStreamingEngine/conf/VHost.xml
です
vi /usr/local/WowzaStreamingEngine/conf/VHost.xml
保存後、 Server タブの右上 Restart で WSE を再起動します
Incoming Streams を見ると、トランスコーダーのストリームが増えています
フレーム取得
この状態で改めて REST API にアクセスしましょう
curl "http://localhost:8086/thumbnail?application=webcam&streamname=myStream&size=1280x720&format=jpeg" > myStream.jpg
無事フレーム画像が取得できました!
右下に Wowza のロゴが透かしで入っているのは、おそらく無料トライアルのライセンスだからです
終わりに
念の為、 Transcoder を無効化してからもう一度再起動してフレーム取得すると、、、
なぜか取得できました
macOS ではできなかったのに、、、
とりあえず、 Linux 版では問題なくフレーム取得できそうです
やっぱり技術検証するには Docker を使うのが一番ですね