share facebook facebook facebook twitter twitter menu hatena pocket slack

2021.01.20 WED

Wowza Streaming Engineのスケジュール機能はこうやって使うのだ!

どうも、streampackのfadoです。今年も残りわずかになりましたね。まあ色々と大変な一年ではありましたが、自分にとっては成長できた年かなと思います。今回の主役はWowza Streaming Engineです。まずWowza Streaming Engine(以下 Wowza)って何?というところからですが、一言で言うと多機能なメディアサーバソフトウェアのことです。基本的に有料なのですがTrialライセンスもあり、制限はあるものの検証用として十分活用出来るので、触ってみたいという方は是非お試し下さい。この記事では最近使うことが多くなったWowzaのスケジュール機能の設定方法についてご紹介していきたいと思います。

注意事項

  • WowzaサーバーはAWSクラウド上で構築され、OSはAmazon Linux 2を採用しています。
  • スケジュール機能が利用できるのはWowza Streaming Engine 4.0.0以降となります。
  • 本環境のWowzaバージョンは4.8.8 (build 20201203191143)です。
  • Wowzaサーバーの構築手順はスコープ外なので割愛させて頂きます。英語ですがサーバーのインストールとセットアップについてはこちらをご参考下さい。
  • Wowzaサーバーの操作にある程度知見がある方を対象にしています。
  • フリー素材のmp4を使っています。

スケジュール機能でできること

  • 擬似ライブ配信が可能です。
  • ライブ配信の間に映像(蓋映像等)を設置することが可能です。
  • ウェブサイトにiframeを埋め込んで動画をループで流すことができます。

設定方法

Wowzaのスケジュール機能は標準機能ではないため、プラグインのインストールからのセットアップが必要です。Wowzaのインストールフォルダーは/usr/local/WowzaStreamingEngineとします。尚、livetestというアプリケーション名(Live HTTP Originタイプ)を新規作成し、例として説明を進めます。

プラグインのセットアップ

1.Wowzaサーバーに下記URLからプラグインをダウンロードします。
https://www.wowza.com/downloads/forums/collection/wse-plugin-streampublisher.zip

$ wget https://www.wowza.com/downloads/forums/collection/wse-plugin-streampublisher.zip

2.unzipした後にlib/wse-plugin-streampublisher.jar/usr/local/WowzaStreamingEngine/libにコピーします。

$ unzip wse-plugin-streampublisher.zip && sudo cp -v lib/wse-plugin-streampublisher.jar /usr/local/WowzaStreamingEngine/lib

3.反映させるためにWowzaサービスを再起動します。

$ sudo systemctl restart WowzaStreamingEngine.service

Server ListenersとModulesの設定

Server Listeners

WowzaのServer Listenerでの設定を有効にします。こちらの設定はサーバーレベルのもので全てのアプリケーションに適用されます。
Wowza Streaming Engine Managerコンソールにログインし、Server -> Server Setup -> Server Listenersタブを開いて下記Class Nameを追加します。

Fully Qualified Class Name
com.wowza.wms.plugin.streampublisher.ServerListenerStreamPublisher

設定後

*設定の反映にはWowzaサービスの再起動が必要です。

Modules

WowzaのModuleでの設定を有効にします。こちらの設定はアプリケーションレベルのものでで対象アプリケーションにのみ適用されます。
Applications -> Application名(ここではlivetest)-> Modulesタブを開いて下記を追加します。

Name Description Fully Qualified Class Name
streamPublisher Schedules streams and playlists. com.wowza.wms.plugin.streampublisher.ModuleStreamPublisher

設定後

*設定の反映にはアプリケーションを再起動する必要があります。

Propertiesの設定

Server Properties

  • Server Propertiesはサーバーレベルでしか設定出来ません。

Applications -> Application名 -> Propertiesタブを開いてからCustomをクリックします。下記を追加して下さい。

Path Name Type Value Notes
/Root/Server streamPublisherVHost String defaultVHost スケジュールがロードするVHostを指定する(デフォルト: defaultVHost)
/Root/Server streamPublisherApplication String livetest/definst スケジュールがロードするapplication/applicationを指定する(デフォルト: live/definst)

設定後

*設定の反映にはWowzaサービスの再起動が必要です。

Application Properties

  • Application Propertiesはサーバーレベル、またはアプリケーションレベルにて設定することができます。両方に設定の記述があった場合、アプリケーションの設定が優先されます。
  • Pathはサーバーレベルなら/Root/Server、アプリケーションレベルなら/Root/Applicationというように指定します。この例ではアプリケーションレベルで設定します。
  • 設定可能Propertiesはたくさんありますが今回はメインなプロパティーのみを紹介します。他のPropertiesについてこちらのWowzaのドキュメントをご参照下さい。

Applications -> Application名 -> Propertiesタブを開いてからCustomをクリックします。下記を追加して下さい。

Path Name Type Value Notes
/Root/Application streamPublisherSmilFile String streamschedule.smil アプリケーションが使用するスケジュールファイル。 SMILファイルと呼ばれ、コンテンツストレージフォルダー内に格納する必要がある。この場合は/usr/local/WowzaStreamingEngine/content/になる。(デフォルト: streamschedule.smil)

設定後

*設定の反映にはアプリケーションを再起動する必要があります。

スケジュールの設定

  • スケジュール機能を利用したいアプリケーションは自身のSMILファイルを設定する必要があります。ファイル名は先ほど説明したApplication PropertiesstreamPublisherSmilFileプロパティーで指定します。尚、SMILファイルの格納場所はストレージコンテンツフォルダーであり、この場合は/usr/local/WowzaStreamingEngine/content/になります。
  • Wowza Streaming Engine Managerコンソール上でもSMILファイルの設定項目がありますがこの機能では使えません。サーバーにログインして該当ファイルを作成及び修正しないといけません。

streamschedule.smilファイルを作成し、次のように記述します。テスト目的のためストリームは一つのみにします。

<smil>
    <head>
    </head>
    <body>

        <stream name="Stream1"></stream>

        <playlist name="pl1" playOnStream="Stream1" repeat="true" scheduled="2020-12-25 00:00:00">
            <video src="mp4:caminandes_llamigos_480p.mp4" start="0" length="-1"/>
        </playlist>

    </body>
</smil>

変更可能な部分を説明します。

  • <stream name="Stream1"></stream>
    • name = ストリーム名を指定します。
  • <playlist name="pl1" playOnStream="Stream1" repeat="true" scheduled="2020-12-25 00:00:00">
    • name = プレイリスト名を指定します。
    • playOnStream = streamで指定したストリーム名を記入します。
    • repeat = trueならプレイリストがループします。falseならプレイリストが終わると同時にストリームも終了します。
    • scheduled = ストリームをいつ開始させるかを指定する。Wowzaサーバーのタイムゾーンと時刻をベースに作動します。日付が過去の場合、ストリームが即座に開始します。
  • <video src="mp4:caminandes_llamigos_480p.mp4" start="0" length="-1"/>
    • src = VODと擬似ライブの場合、mp4のソースファイルを指定します。ソースファイルはSMILファイルと同じフォルダー内に設置する必要があります。この例では/usr/local/WowzaStreamingEngine/content/配下になります。
    • start = VODと擬似ライブの場合は0または開始したい時間(秒)を指定します。ライブの場合は-2にします。
    • length = ストリーム時間(秒)を指定します。最後までストリームを流したい場合、-1にします。

確認

サーバーの設定に問題なければ下記のようにストリームが入っていることが分かります。表示されない時はWowzaサービスを再起動してみて下さい。
Applications -> Application名 -> Incoming Streamsで確認出来ます。

ストリームの開始時刻(先述のscheduledパラメータで指定した値)が未来の場合、ストリームのStatusがActiveになっていますがストリームの信号自体は流れていません。ストリーム名をクリックし、詳細を見るとBytes Inが0であることが確認出来ます。

指定した開始時間になるとストリーム信号が実際に流れてきてBytes Inの値が変動しているのをみて分かります。

HLSプロトコルでの視聴になりますが問題なく出来ています。

補足ですがHLSでのデフォルトの視聴URLは下記の通りです。
http://[Public IP]:1935/Application名/ストリーム名/playlist.m3u8

今回の環境ではALBを挟んでポート80/tcpからポート1935/tcpにフォワードするように設定していますので私の環境では下記URLです。尚、テスト目的のため、TLS通信は有効にしていませんのでご了承下さい。
http://[ALBのDNS名]/livetest/Stream1/playlist.m3u8

結論

今回はトランスコード設定なしで紹介しましたが、ABR技術と組み合わせればさらに活用できる場面が広がると思います。ただ使ってみて感じたのは確かに便利な機能ですが、Wowzaの管理画面でスケジュールの変更や修正が出来ない点は少し不便です。あとスケジュール機能をout-of-the-box状態で使うことができたらいいなと思います。AWS Elemental MediaLiveにもスケジュール機能があり、ウェブコンソールで設定が完結していることを考えるとWowzaの運用面での使いやすさはまだまだ改善できるのかなというのは正直な感想です。

あとAPIを使ってスケジュールをロード、リロード、アンロードすることも出来ますが設定方法は省かせて頂きます。個人的にはサーバーを再起動させた方が早かったりしますので。追加コンテンツとしていつか紹介できたらいいなとは思っています。それではメリークリスマス&良いお年を!

参考文献

https://www.wowza.com/docs/how-to-schedule-streaming-with-wowza-streaming-engine-streampublisher

元記事はこちら

Wowza Streaming Engineのスケジュール機能はこうやって使うのだ!

アイヌル ファドリ

アイヌル ファドリ

マレーシア出身です。cloudpackでAWS、動画配信の最新技術を吸収していきたいです!

cloudpack

cloudpackは、Amazon EC2やAmazon S3をはじめとするAWSの各種プロダクトを利用する際の、導入・設計から運用保守を含んだフルマネージドのサービスを提供し、バックアップや24時間365日の監視/障害対応、技術的な問い合わせに対するサポートなどを行っております。
AWS上のインフラ構築およびAWSを活用したシステム開発など、案件のご相談はcloudpack.jpよりご連絡ください。