LoginSignup
1
1

More than 1 year has passed since last update.

Wowza Streaming Engine の配信動画からフレームを切り出す

Last updated at Posted at 2021-08-02

はじめに

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
1. In the Applications contents panel, select your live application, and then click Transcoder. Then in the details page, click Enable Transcoder.

メニューから Transcoder をクリックするわけですね、、、

スクリーンショット 2021-07-28 18.57.56.png

、、、そんな項目ありませんが

別のところを見ると、そもそも 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 の項目が出ています

スクリーンショット 2021-07-28 19.07.40.png

Enable Transcoder をクリックします

スクリーンショット 2021-07-28 19.09.51.png

そして、ローカルでやったのと同じように 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 を再起動します

スクリーンショット 2021-07-28 19.24.28.png

Incoming Streams を見ると、トランスコーダーのストリームが増えています

スクリーンショット 2021-07-28 19.26.38.png

フレーム取得

この状態で改めて REST API にアクセスしましょう

curl "http://localhost:8086/thumbnail?application=webcam&streamname=myStream&size=1280x720&format=jpeg" > myStream.jpg

無事フレーム画像が取得できました!

スクリーンショット 2021-07-28 19.30.30.png

右下に Wowza のロゴが透かしで入っているのは、おそらく無料トライアルのライセンスだからです

終わりに

念の為、 Transcoder を無効化してからもう一度再起動してフレーム取得すると、、、

なぜか取得できました :sweat:

macOS ではできなかったのに、、、

とりあえず、 Linux 版では問題なくフレーム取得できそうです

やっぱり技術検証するには Docker を使うのが一番ですね

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1