2020-04-14

SCTE-35について

今回は SCTE-35 を知らない方にどういったものかを簡単にご説明していきます。

HLS では、SCTE-35 を使うことでマニフェストに動的に広告を挿入することができます。

SCTE とは、Society of Cable Telecommunications Engineers の略で、米国にある標準化団体です。

この SCTE が定めた規格の中で、その中でもよく使われる規格に SCTE-104 と SCTE-35 があります。

SCTE-104 はインサータ(エンコーダー)へのマーカとしてよく使われ、SCTE-35 はエンドデバイス向けのマーカとして使われることが多いです。ここでは両者の違いについては説明しません。

HLS や MPEG-DASH では SCTE-35 を採用しています。

SCTE-35 の仕様については以前は自由に読めましたが、現在はここから申請する必要があります。

ライブ配信を行う際、特定のタイムスタンプにマークをつけることで、映像を切り替えることができます。このマークをキューとも呼びます。

このマークを行う部分をスプライスポイントと呼びます。スプライスポイントは I フレームである必要があります。

スプライスポイントには、番組の開始と終了や広告の挿入と挿入終了を通知することができます。

スプライスポイントは、SCTE-104 ではメッセージを使い、SDI-VANC または TCP/IP でインサータ(エンコーダー)に通知されます。この中にメッセージが含まれます。

メッセージには 2 種類あります。

まず一つ目が splice_insert です。splice_insert はキューアウト、キューインを行うシンプルなメッセージです。これは長年使われており、多くのハードウェアでサポートされています。

splice_insert を使い、広告を挿入することをキューアウトといいます。キューアウトは splice_insert の out_of_network_indicator と呼ばれるフィールドが 1 にセットされたときに呼ばれます。

その一方で広告からメインコンテンツに戻ることをキューインといいます。キューインは splice_insert の out_of_network_indicator が 0 にセットされている必要があります。

HLS では、キューアウトされた場合に EXT-X-CUE-OUT というタグを挿入し、キューインした場合は EXT-X-CUE-IN というタグを挿入します。また、マーカーは Base64 でエンコードされ、EXT-OATCLS-SCTE35 タグに挿入されます。

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:12
#EXT-X-MEDIA-SEQUENCE:1
#EXT-X-PLAYLIST-TYPE:VOD
#EXTINF:10.000,
file_60p_1_00001.ts
#EXT-OATCLS-SCTE35:/DAnAAAAAAAAAP/wBQb+AA27oAARAg9DVUVJAAAAAX+HCQA0AAE0xUZn
#EXT-X-CUE-OUT:30.000
#EXTINF:2.000,
file_60p_1_00002.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=2.000,Duration=30,SCTE35=/DAnAAAAAAAAAP/wBQb+AA27oAARAg9DVUVJAAAAAX+HCQA0AAE0xUZn
#EXTINF:12.000,
file_60p_1_00003.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=14.000,Duration=30,SCTE35=/DAnAAAAAAAAAP/wBQb+AA27oAARAg9DVUVJAAAAAX+HCQA0AAE0xUZn
#EXTINF:12.000,
file_60p_1_00004.ts
#EXT-X-CUE-OUT-CONT:ElapsedTime=26.000,Duration=30,SCTE35=/DAnAAAAAAAAAP/wBQb+AA27oAARAg9DVUVJAAAAAX+HCQA0AAE0xUZn
#EXTINF:4.000,
file_60p_1_00005.ts
#EXT-OATCLS-SCTE35:/DAnAAAAAAAAAP/wBQb+ADbugAARAg9DVUVJAAAAAX+HCQA1AAA3v5+Q
#EXT-X-CUE-IN
#EXTINF:8.000,
file_60p_1_00006.ts
#EXTINF:12.000,
file_60p_1_00007.ts
#EXTINF:12.000,
file_60p_1_00008.ts
#EXTINF:3.000,
file_60p_1_00009.ts

splice_insert では、splice_event_id というフィールドに広告の ID を付与することができます。unique_program_id では番組の ID も付与できます。

もう一つ目が time_signal です。splice_insert では、キューアウトおよびキューインしか出来ませんでしたが、time_signal では、広告挿入する際の付加情報をつけることができます。

time_signal の segmentation_descriptor にある segmentation_type_id と segmentation_message を使うことで、その区切りがどういった意味をもつかを通知することができます。例えば splice_insert では番組開始と CM 挿入開始が同一でしか扱えませんでしたが、time_signal ではそれを別として扱うことが可能になります。

segmentation_type_id と segmentation_message の中身は SCTE-35 の仕様に決められています。

SCTE としては今後 splice_insert よりも time_signal を推奨していきたいと考えていますが、time_signal をサポートしたハードウェアは現状多くありませんし、現場レベルでも splice_insert の方が多く使われています。

SCTE-104/35 の仕様は膨大なので、これ以外にもたくさんありますので、是非一読しておきたいところです。