SCTE-35をストリームサーバーに送信する

SCTEマーカーは主に、受信側(ストリーミングサーバーなど)に対して、広告を挿入するタイミングや再生時間を通知することで、動画出力に広告を挿入するために使用されます。これにより、サードパーティのシステムがデータベースから動的に広告を選択することが可能になります。SCTE-35に関する一般的な詳細については、こちらをご覧ください。 このウェブサイト上で.

この記事の内容:
はじめに
SCTE-35 マーカーの例
SCTE-35マーカーをローカルでテストする
Nimble Streamer での SCTE-35 マーカーのテスト
補足情報


はじめに

また、以下もおすすめです SCTEに関する当社の概要記事.

PLAYDECKでは、SCTEマーカーを4つの異なるオブジェクトに割り当てることができます:
– クリップ(ポジション不問)
– ブロック(開始と終了)
– オーバーレイ(表示・非表示)
– アクションボタン

あらかじめ定義されたSCTEマーカーを提供する代わりに、私たちは別のアプローチを採用しました。つまり、ユーザー自身でSCTEマーカーを作成していただく必要があります。これには多少の学習曲線が必要かもしれませんが、最終的にははるかに柔軟性が高まります。 この方法の利点は、あらゆる受信機との互換性を常に確保できる点にあります。クリップの長さやその他の「変数」を取得するために、特定の「プレースホルダー」を用意しています。.

なお、ストリーム設定でSCTEを有効にする必要がありますのでご注意ください:


SCTE-35 マーカーの例

SCTE-35のサンプルをいくつか見てみましょう。これは「スプライシング」と呼ばれる、SCTE-35の中で最も一般的に使用される形式です。.

注: ここでご紹介するSCTE-35フォーマットは、Nimble Streamerでの使用に最適です(詳細は後述)。ご利用のストリームサーバーによっては、フォーマットが異なる場合があります。プロバイダーにお問い合わせください。.

これにより、広告が挿入され、指定された時間が経過すると自動的に番組に戻ります。再生時間は、現在再生中のクリップに対してPLAYDECKによって自動的に設定されます。これは{blockduration}または手動で入力した値に置き換えることができます。 再生時間を手動で設定する場合、計算式は「クリップの長さ × 90000」を四捨五入した値となります。 これには、90000がほとんどのSCTEシステムで採用されているデフォルトのタイムスケールであるという理由があります。例:クリップの長さが12.4秒の場合、SCTEの再生時間は1116000秒となります。.

再生時間を送信する代わりに、広告の開始と終了を示す2つの別々のSCTEマーカーを送信することも可能です。これらは、CUE-OUT(番組から広告へ移行する)およびCUE-IN(番組に戻る)と呼ばれます。.

すでにお気づきかもしれませんが、唯一の違いは「outOfNetworkIndicator」が1(CUE-OUT)か0(CUE-IN)かという点だけです。SCTEシステム自体は、「spliceEventId」に基づいて両方のマーカーをペアリングします。.

注: サポートされているプレースホルダーは以下の通りです:{timestamp} {timestampunix} {airtimenext} {airtimenextunix} {plannednext} {plannednextunix} {clipid} {blockid} {blockduration} {clipduration}


SCTE-35マーカーをローカルでテストする

PLAYDECKを開きます。現時点ではクリップを読み込む必要はありません。任意のACTIONボタンを右クリックし、新しいアクションを作成して、「COMMANDS/SCTE」を選択します:

「SCTE-35」をクリックして、SCTE-35サンプルタグを挿入します。「OK」を2回クリックしてポップアップを閉じます:

現在、互換性のあるストリーム(UDP、DVB、SRT)に対してSCTE-35タグを送信できるようになりました。現時点ではストリームが存在しないため、今すぐ「アクション」をクリックしても何も起こりません。.

ここでは、出力を単にファイルに書き出すだけのテスト用UDPストリームを作成してみましょう。そうすれば、(現時点では)サーバー関連の設定に煩わされる必要がありません。以下の設定をコピーし、「START NOW」をクリックしてストリームを開始してください。「Parameter」でSCTE-35を有効にするのを忘れないでください:

それでは、サンプルSCTE-35タグをストリームに送信します。設定画面を閉じ、アクションボタンを数回クリックしてから、再度設定画面に戻り、「今すぐ停止」を選択してストリームを停止してください。.

SCTE-35のタグがPLAYDECKに記録されました。「アクション」ボタンからSCTE-35のコード画面に戻り、「イベントログを開く」をクリックすると、ログを確認できます。

また、録画したストリームに含まれるSCTE-35タグを表示することも可能です。これを行うには、「DVBInspector」という別のツールが必要です。このツールにはJAVAランタイムも必要ですので、両方をダウンロードしてください:

このツールにはJAVAランタイムが必要です。まだインストールされていない場合は、こちらからダウンロードできます:
https://www.oracle.com/java/technologies/downloads/

「DVBinspector-1.18.0-dist.zip」(または類似のファイル名)を解凍し、「DVBinspector-1.18.0.jar」を起動してください。次に、TSファイルをアプリケーションにドラッグ&ドロップします。SCTEマーカーを表示するには、次のようにツリーを展開してください。.


Nimble Streamer での SCTE-35 マーカーのテスト

Nimble Streamerは、当社が採用しているストリーミングサービスです。コスト効率に優れ、設定や保守も容易でありながら、高度なユースケースにも対応できる十分な機能性を備えています:

https://softvelum.com/nimble/

PLAYDECKが動作しているマシンに、Nimbleの14日間試用版をインストールしてください。これは必須ではありませんが、ネットワーク設定の手間が省けるため、作業が簡単になります。 また、Nimble Streamer自体はユーザーインターフェースなしでインストールされるため、NimbleからWMSPanel(Nimble用のWebベースのセットアップツール)でのアカウント作成を求められます。.

情報: このSCTE-35サンプルを動作させるには、本番環境でテストする場合、「Nimble Live Transcoder」や「Nimble Advertizer」のプラグインは不要です。試用版では、これらのプラグインはデフォルトで無効になっています。.

Nimbleの起動が完了したら、手動で行う必要がある設定がもう1つあります。こちらのNimbleサーバー設定ファイルを開いてください:
c:\Program Files\Nimble Streamer\conf\nimble.conf

このファイルの末尾に以下の行を追加し、ファイルを保存してください。.

scte35_processing_enabled = true 
scte35_forwarding_enabled = true 
hls_ad_scte35_forwarding_enabled = true
hls_ad_marker_format = cue
hls_ad_splice_out_cont_marker_enabled = true

重要: 今すぐPCを再起動するか、Windowsサービス「Nimble Streamer」を手動で再起動して、Nimbleを再起動する必要があります。.

以下にコードを再掲しますが、今回はコメントを添えています(これらは使用しないでください):

scte35_processing_enabled = true  // SCTEモジュールを全般的に有効化します。他のすべてのオプションで必要です
scte35_forwarding_enabled = true  // Live Transcoder経由でSCTE-35マーカーを転送できるようにします
hls_ad_scte35_forwarding_enabled = true  // SCTE-35マーカーをHLSストリームへ転送する機能を有効化
hls_ad_marker_format = cue  // NimbleがCUE-OUTおよびCUE-INマーカーを使用するように設定
hls_ad_splice_out_cont_marker_enabled = true  // EXT-X-CUE-OUT-CONTの自動挿入を有効にする

それでは、WMSPanelでStreamsの設定を行っていきましょう:
まず、受信ストリームを定義します。メニューの「Nimble Streamer」に移動し、「MPEGTS In」を選択して「Add UDP stream」ボタンをクリックし、次のように受信ストリームを追加します。ポート5001がすでに使用中の場合は、他のポートを使用しても構いません。.

次に、出力ストリームのフォーマットを設定します。 ここでは、UDPからHLSへのSCTEマーカーの変換を実演するために、HLSを使用します。同じページで、「MPEGTS Out」に移動し、「Add outgoing stream」ボタンをクリックして、次のように追加してください。入力ストリームとして、ビデオとオーディオのソースを選択していることを確認してください。.

次に、PLAYDECKでの設定を続けます。「ストリーム出力設定」に移動し、ストリームURLを「udp://127.0.0.1:5001」に変更してください。.

情報: お好みのビデオコーデックを選択できます。今回は、NVIDIA GPUでエンコードを行わせ、CPUの使用率を抑えるためにH.264を選択しました。また、「パラメータ」でSCTE-35を有効にしてください。.

情報: PLAYDECKではHLSを直接ストリーミングすることはできませんのでご注意ください。ストリーミング形式として「Apple HTTP Live Streaming」を選択した場合、出力はファイルに書き込まれます。 そのため、「Stream URL」としてファイルの保存先(例:c:\Users\Public\Documents\stream.m3u8)を指定する必要があります。 その後、任意のストリーミングサーバーを使用して、そのファイルをストリーミングしてください。PLAYDECKでは、HLSマニフェストファイル(*.m3u8ファイル)にHLS SCTEタグを書き込むことはできません。.

次に、PLAYDECKでボタン操作だけでなく、クリップに関連付けてSCTEを自動的に送信できるようにします。そのため、任意のクリップを挿入し、ツールバーの「COMMANDS」アイコンをクリックして新しいコマンドを追加します。次に「PLAY TIME 0」を選択し、SCTE-35のサンプルを挿入します:

情報: また、ブロック、オーバーレイ、アクションボタンにSCTEマーカーを追加することもできます。.

それでは、さっそく始めましょう。クリップを「CUE」して「PLAY」し、PLAYDECKの設定でストリームを開始します。WMSPanelに移動し、メニューの「Nimble Streamer」から「Live Streams」を選択してください。 すると、1つのライブストリームが実行中になっているのが確認できます。それをクリックし、右端にあるこのような疑問符のアイコンを選択してください。.

「再生するURL」のリストから、「playlist.m3u8」で終わるURLを選択し、「コピー」をクリックします。次に、HLSプレーヤーが組み込まれているか、インストールされている任意のブラウザにこのURLを貼り付けます。この例では、以下のHLSプレーヤー拡張機能をインストールしたChromeブラウザを使用します:
https://chromewebstore.google.com/detail/hls-player-m3u8-streaming/eakdijdofmnclopcffkkgmndadhbjgka

そのURLをChromeに入力すると、すぐにPLAYDECKのストリームが再生されます。 それでは、SCTEマーカーを確認する方法をご説明します。ChromeでF12キーを押して開発者ツールを開きます。上部にある「ネットワーク」タブをクリックしてください。すると、ストリームの一部である「chunks.m3u8」がいくつか表示されます。 Chunkファイル(HLSマニフェストとも呼ばれます)のいずれかをクリックし、その横にある「プレビュー」を選択してください。これでHLS SCTEタグが表示されます。もし表示されない場合は、別のChunkをクリックしてください。SCTEはクリップの開始時のみ送信されるためです。.

以上です!テストの目標を達成しました。今後、さらに詳しく調べておくと役立つかもしれない情報を公開する予定です。.


補足情報

PLAYDECKへのログイン

送受信されるすべてのSCTEタグをログに記録します。これにより、出力(SDIおよびストリーム)を入力にループバックさせるだけで、送信されるSCTEをテストし、PLAYDECKにSCTEを検出させることができます。ログファイルは、メインメニューの「Logs」から開くことができます:


Nimble Streamer でのログ記録

何か問題が発生したり、期待通りに動作しなかったりした場合は、まずNimbleのログファイルを確認することをお勧めします。Windowsでは、ログは以下の場所にあります:
c:\Program Files\Nimble Streamer\log

Nimble Trial版では、ログ記録はデフォルトで有効になっています。ただし、手動で有効にする必要がある場合は、以下に「nimble.conf」の設定オプションを示します。.

log_access = file
logging = debug

それでは、ログファイルを開き、「SCTE」という文字列を探してください。次のような内容が表示される場合がありますが、これはPLAYDECKのSCTEマーカーにタイプミスがあることを示しています:

[SCTE35] [mynewapp/mynewstream] に対して、サポートされていないスプライスコマンド type=6 が指定されました

NimbleでSCTEマーカーの解析が正常に完了した場合、次のような表示になります:

[SCTE35] splice_insert: event_id=4157 oon=1 immediate=1 pts_adjustment=0 pts=0 actual_pts=202593600 duration=2707200 data=0xfc....



ツール:TSDuck

これは、MPEGトランスポートストリームを操作するための豊富なライブラリを備えたツールおよびプラグインのコレクションです。これを使用すれば、アルゴリズムやその他の複雑なロジックに基づいて、PLAYDECKの外側にSCTEマーカーを挿入することが可能になります。.

https://tsduck.io/


ツール: x9k3

このツールは、UDPストリームやMPEG-TSファイル内のSCTE-35マーカーをHLS SCTEタグに変換することも可能です。これにより、SCTE-35からHLSへの自動変換機能を備えていないストリーミングサーバーを導入することが可能になります。.

https://github.com/futzu/x9k3