ウェブレシーバー プレーヤーのストリーミング プロトコル

Web Receiver SDK は 3 つのタイプをサポートしている 最新のストリーミングプロトコルです。

DASHHTTP ライブ Streaming <ph type="x-smartling-placeholder"></ph> スムーズなストリーミング

このドキュメントでは、各ストリーミング プロトコルのサポート状況の一覧を示します。備考 各プロトコルでサポートされているタグの説明は、 詳細なプロトコル仕様と比較します。目標は 各プロトコルの使用方法や機能の概要を ストリーミング対応デバイスでこれらのプロトコルを配信して、 提供します

Dynamic Adaptive Streaming over HTTP(DASH)

ISO DASH の詳細な仕様をご覧ください。

DASH は、高品質の動画を可能にするアダプティブ ビットレート ストリーミング プロトコルです HTTP(S)サーバー経由でストリーミングしますXML で構成されたマニフェストには、ほとんどの 動画の初期化とダウンロード方法に関するメタデータ情報 説明します。Web Receiver Player がサポートする主なコンセプトは <Period> です。 <AdaptationSet> さん、<Representation> さん、<SegmentTemplate> さん、 <SegmentList><BaseUrl><ContentProtection>

DASH マニフェストはルート <MPD> タグで始まり、その中に 1 つ以上のタグが含まれている 1 つのストリーミング コンテンツを表す複数の <Period> タグ。 <Period> タグを使用すると、さまざまなストリーミング コンテンツの順序を指定できます。 メイン コンテンツと広告を分けたり、複数の 連続する動画コンテンツなどです。

<MPD> の下の <AdaptationSet> は、次の表現の集合です。 通常は動画、音声、字幕です。最も 一般的にサポートされている MIME タイプは、「video/mp4」、「audio/mp4」、「text/vtt」です。「 オプションの <ContentComponent contentType="$TYPE$"> を含めることができます。 <AdaptationSet> 未満。

<AdaptationSet> 内に <Representation> タグのリストを追加します。 Web Receiver Player は codecs の情報を使用して MSE ソースバッファと bandwidth 情報を初期化します。 再生に適した表現/ビットレートが自動的に選択されます。

<Representation> で、メディア セグメントは次のいずれかを使用して記述されます。 単一のセグメント表現の場合は <BaseURL>、次の場合は <SegmentList> セグメントのリスト(HLS に類似)、または <SegmentTemplate>

<SegmentTemplate> の場合、初期化セグメントと メディア セグメントをテンプレートで表現できます。次に例を示します。 $Number$ は、CDN から取得できるセグメント番号を示します。ですから、 再生が進むにつれて、seg1.m4s、seg2.m4s などに変換されます。

<MPD xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:ns2="http://www.w3.org/1999/xlink"
  profiles="urn:mpeg:dash:profile:isoff-live:2011,http://dashif.org/guidelines/dash264" type="static"
  publishTime="2016-10-05T22:07:14.859Z" mediaPresentationDuration="P1DT0H0M0.000S" minBufferTime="P0DT0H0M7.500S">
  <Period id="P0">
    <AdaptationSet lang="en" segmentAlignment="true">
      <ContentComponent id="1" contentType="audio"/>
      <SegmentTemplate media="seg$Number$.m4s" initialization="seginit.mp4"
        duration="10000" startNumber="1" timescale="1000" presentationTimeOffset="0"/>
      <Representation id="1" bandwidth="150123" audioSamplingRate="44100"
        mimeType="audio/mp4" codecs="mp4a.40.2" startWithSAP="1">
        <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
        <BaseURL>http://www.google.com/testVideo</BaseURL>
      </Representation>
    </AdaptationSet>
    <AdaptationSet segmentAlignment="true">
      <ContentComponent id="1" contentType="video"/>
      <SegmentTemplate media="seg$Number$.m4s" initialization="seginit.mp4"
        duration="10000" startNumber="1" timescale="1000" presentationTimeOffset="0"/>
      <Representation id="1" bandwidth="212191" width="384" height="208" sar="26:27"
        frameRate="25" mimeType="video/mp4" codecs="avc1.42c01f" startWithSAP="1">
        <BaseURL>http://www.google.com/testVideo/bitrate1/</BaseURL>
      </Representation>
      <Representation id="1" bandwidth="366954" width="512" height="288" sar="1:1"
        frameRate="25" mimeType="video/mp4" codecs="avc1.42c01f" startWithSAP="1">
        <BaseURL>http://www.google.com/testVideo/bitrate2/</BaseURL>
      </Representation>
      <Representation id="1" bandwidth="673914" width="640" height="352" sar="44:45"
        frameRate="25" mimeType="video/mp4" codecs="avc1.42c01f" startWithSAP="1">
        <BaseURL>http://www.google.com/testVideo/bitrate3/</BaseURL>
      </Representation>
    </AdaptationSet>
  </Period>
</MPD>

<SegmentTemplate> では、通常、<SegmentTimeline> タグを使用して以下を行います。 各セグメントの長さとリピートセグメントを示します。timescale (1 秒を表す単位)は、通常、属性の一部として <SegmentTemplate> に変換し、以下に基づいてセグメントの時間を計算できます。 説明します。以下の例で、<S> タグはセグメント タグ、 d 属性は、セグメントの長さと r 属性を指定します。 同じ長さのセグメントをいくつ繰り返すかを指定します。これにより、$Time$ で指定されたとおりに、メディア セグメントをダウンロードできるように適切に計算できる media 属性。

<SegmentTemplate>
  timescale="48000"
  initialization="$RepresentationID$-init.dash"
  media="$RepresentationID$-$Time$.dash"
    startNumber="1">
    <SegmentTimeline>
      <S t="0" d="96256" r="2" />
      <S d="95232" />
      <S d="96256" r="2" />
      <S d="95232" />
      <S d="96256" r="2" />
   </SegmentTimeline>
</SegmentTemplate>

<SegmentList> を使用した表現の例を次に示します。

<Representation id="FirstRep" bandwidth="2000000" width="1280"
  height="720">
  <BaseURL>FirstRep/</BaseURL>
  <SegmentList timescale="90000" duration="270000">
     <RepresentationIndex sourceURL="representation-index.sidx"/>
     <SegmentURL media="seg-1.ts"/>
     <SegmentURL media="seg-2.ts"/>
     <SegmentURL media="seg-3.ts"/>
  </SegmentList>
</Representation>

単一のセグメント ファイルの場合、<SegmentBase> は多くの場合、バイト単位、 <BaseURL> ファイルのどの部分に 残りは再生の継続またはシーク時にオンデマンドでフェッチできます。 説明します。ここでは、Initialization 範囲は init メタデータ範囲を指定しています。 indexRange はメディア セグメントのインデックスを指定します。注: 現時点では、連続したバイト範囲のみがサポートされています。

<Representation bandwidth="4190760" codecs="avc1.640028"
  height="1080" id="1" mimeType="video/mp4" width="1920">
  <BaseURL>video.mp4<BaseURL>
  <SegmentBase indexRange="674-1149">
    <Initialization range="0-673" />
  </SegmentBase>
</Representation>

どの表現が使用されているかにかかわらず、ストリームが保護されていれば、 <ContentProtection> セクションは <AdaptationSet> の下に表示されます。 ここで、schemeIdUri は、使用する DRM システムを一意に識別します。 一般的な暗号化のために、オプションで鍵 ID を含めることができます。

<!-- Common Encryption -->
<ContentProtection
  schemeIdUri="urn:mpeg:dash:mp4protection:2011"
  value="cenc"
  cenc:default_KID="7D2714D0-552D-41F5-AD56-8DD9592FF891">
</ContentProtection>

<!-- Widevine -->
<ContentProtection
  schemeIdUri="urn:uuid:EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED">
</ContentProtection>

その他の例や詳細については、MPEG-DASH 仕様をご覧ください。 以下は、上記以外のタグの追加 DASH 属性のリストです 次の機能がサポートされています。

属性名 属性関数
mediaPresentationDuration 動画コンテンツの長さ。
minimumUpdatePeriod <MPD> タグの属性。必要な頻度を マニフェストを再読み込みします。
type <MPD> タグの属性。「動的」「新規顧客の獲得」目標を ライブ配信です。
presentationTimeOffset <SegmentBase> タグの属性。は、 期間の先頭からのプレゼンテーション時間オフセット。
startNumber プレゼンテーションに含まれる最初のメディア セグメントの数を です。これはライブ配信でよく使用されます。

DASH と DASH の MP4 フラグメント内の EMSG ボックスの認識もサポートしています。 提供 EmsgEvent 提供します。

現在の Web Receiver Player は主要な DASH ユースケースをサポートしていますが、 DASH の現在の実装によく使用される属性のリストです。 使用しません。つまり、マニフェストに コンテンツの再生エクスペリエンスに影響はありません。

  • availabilityStartTime
  • segmentAlignment

HTTP Live Streaming(HLS)

HTTP ライブ ストリーミングの概要と仕様全体を取得できます こちらをご覧ください。

Web Receiver Player の主な強みの 1 つは MSE での HLS の再生。マニフェストは 1 つのドキュメントにまとめられる DASH とは異なります。 すべてのバリエーション ストリームのリストを含むマスター再生リストを HLS から送信 それぞれの URL に置き換えます。バリエーション再生リストはメディア再生リストです。この 2 つ Web Receiver Player が現在マスターでサポートしている主要な HLS タグ :

タグ名 機能
#EXT-X-STREAM-INF ビットレート/バリアント ストリームを指定します。BANDWIDTH 属性は次のとおりです。 アダプティブ ビットレート ストリーミング選択に対応している必要があります。「 次のような MSE を初期化する場合は、CODECS 属性を使用することを強くおすすめします。 "avc1.42c01e,mp4a.40.2" として。指定しない場合、デフォルトの大文字 / 小文字が H264 メイン プロファイル 3.0 動画と "mp4a.40.2" 音声エンコードに設定 説明します。
#EXT-X-MEDIA 追加のメディア再生リストを(URI 属性で)指定する コンテンツを表します。これらは通常、他の 動画形式(5.1 サラウンド音声)や言語を選択できます。TYPE の属性 (VIDEOAUDIOSUBTITLES または CLOSED-CAPTIONS を使用できます。設定 YESDEFAULT 属性を追加すると、 デフォルトでこの代替ストリームが使用されます。

次のリストは、Web Receiver Player が現在サポートしている HLS タグのリストです メディア再生リスト:

タグ名 機能
#EXTINF ストリーム情報。通常、その後にセグメントの再生時間が続きます。 次の行にセグメントの URL が表示されます。
#EXT-X-TARGETDURATION 各セグメントの長さ(秒)。また、この検出ルールによって ライブ配信の再生リスト マニフェストのダウンロードと更新。ウェブ受信者 プレーヤーが 0.1 秒未満の継続時間に対応していません。
#EXT-X-MEDIA-SEQUENCE 最初のセグメントが再生されるシーケンス番号(多くの場合はライブ ストリームの場合) 示しています
#EXT-X-KEY DRM 鍵の情報。METHOD 属性は、 決める必要があります現在、AES-128SAMPLE-AES がサポートされています をタップします。
#EXT-X-BYTERANGE セグメント URL について取得するバイト範囲。
#EXT-X-DISCONTINUITY 連続するセグメント間の不連続性を指定します。これはよく見られる現象です。 サーバーサイドの広告挿入では、 できます。
#EXT-X-PROGRAM-DATE-TIME 次のセグメントの最初のサンプルの絶対時間。例: &quot;2016-09-21T23:23:52.066Z&quot;.
#EXT-X-ENDLIST VOD かライブ配信か。

ライブ ストリームには、#EXT-X-PROGRAM-DATE-TIME#EXT-X-MEDIA-SEQUENCE を使用します。 が、新しく更新されたマニフェストのマージ方法を決定する主な要因となります。条件 #EXT-X-PROGRAM-DATE-TIME を使用して、更新されたセグメントを照合します。 それ以外の場合は、#EXT-X-MEDIA-SEQUENCE 番号が使用されます。なお、 HLS の仕様に基づき、照合にファイル名の比較は使用されません。

Google の HLS 実装では、次のような代替音声ストリームの選択がサポートされています。 5.1 サラウンド音声をメインの音声再生として利用する。これを行うには、以下のように操作します。 #EXT-X-MEDIA タグを代替コーデックとともに指定し、 ストリーム構成のセグメント形式

ウェブ レシーバー プレーヤーは、仕様に沿った特定の動作を想定しています。たとえば、 #EXT-INF タグには URI が必要です。URI でない場合、たとえば #EXT-X-DISCOUNTINUITY を指定すると再生リストの解析が失敗します。

#EXT-X-TARGETDURATION 秒ごとに再生リスト/マニフェストを再読み込みして、 新しいセグメントリストが更新され、新しい内部表現が 新しいセグメントを追加しますシークがリクエストされるたびに、検索できるのは 指定します。ライブでは、先頭からの検索のみが許可されます 終了してから 3 つのターゲット期間までの最新のリストを返します。たとえば 10 個のセグメントリストがあり、セグメント 6 を使用している場合は、 7 にできます。8 は対象外です。

セグメント形式のサポート

CAF SDK は、参照されている複数の形式で配信されたコンテンツの再生をサポートしています。 (HlsSegmentFormat) 音声、HlsVideoSegmentFormat 使用できます。これには、 パッケージ化されたオーディオ 動画再生など、暗号化、非暗号化の両方に対応します。必須項目です LoadRequestDataMediaInformation にこの情報を指定します。 適切に記述する必要があります指定しない場合、 デフォルトのプレーヤー設定では、コンテンツがトランスポート層として再生され、 パッケージ化されたコンテンツをストリーミングする。このプロパティは、 読み込みリクエスト データ(AndroidiOS およびウェブ) 受信側の内部で受信する場合もあります

サンプルコードを確認する 下のスニペットまたは ContentId、contentUrl、entity を使用したメディアの読み込み をご覧ください。

playerManager.setMessageInterceptor(
    cast.framework.messages.MessageType.LOAD, loadRequestData => {
      ...
      // Specify segment format for an HLS stream playing CMAF packaged content.
      loadRequestData.media.contentType = 'application/x-mpegurl';
      loadRequestData.media.hlsSegmentFormat = cast.framework.messages.HlsSegmentFormat.FMP4;
      loadRequestData.media.hlsVideoSegmentFormat = cast.framework.messages.HlsVideoSegmentFormat.FMP4;
      ...
      return loadRequestData;
    });

コンテンツの保護

上記の #EXT-X-KEY タグのセクションで説明したように、Cast SDK は SAMPLE-AES または SAMPLE-AES-CTR(キーへの URI は初期化ベクトル) 次のように指定できます。

EXT-X-KEY: METHOD=SAMPLE-AES, \
URI="data:text/plain;base64,XXXXXX", \
IV=0x6df49213a781e338628d0e9c812d328e, \
KEYFORMAT="com.widevine", \
KEYFORMATVERSIONS="1"

現在サポートされている KEYFORMAT は Widevine で、URI には BASE64 でエンコードされた DRM 情報XXXXXXX。デコードすると、鍵 ID が含まれます。

{
   "content_id": "MTQ1NjkzNzM1NDgxNA==",
   "key_ids": [
      "xxxxxxxxxxxxxxxx"
   ]
}

バージョン 1 では、次の属性が定義されています。

属性 説明
KEYFORMATVERSIONS "1" このプロポーザルでは、鍵形式バージョン 1 を定義します
KEYFORMAT "urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed" UUID は、DASH IF IOP の Widevine UUID です。Widevine で暗号化されたストリームを使用する MPD では、まったく同じ文字列が使用されます。
URI "data:text/plain;base64, <base64 encoded PSSH box>" データ型と PSSH ボックスを含むストリームの URI。
METHOD SAMPLE-AES-CTR コンテンツを暗号化する際に使用される暗号化暗号を示します。SAMPLE-AES は、「cbcs」を使用してコンテンツが暗号化されていることを通知します。SAMPLE-AES-CTR は、AES-CTR 保護スキームのいずれか「cenc」を使用してコンテンツが暗号化されていることを示します。

DASH MPD にマッピングされた属性:

属性 説明
KEYFORMAT ContentProtection 要素の schemeIdUri 属性。
URI cenc:pssh 要素の内容。
KEYID 鍵 ID をエンコードする 16 バイトの 16 進数文字列。MPEG DASH の default_kid と同じ役割を持ちます。階層キースキームを使用している場合、これは「root」] キーを押します。

V2 シグナリングを使用した HLS プレイリストの例:

#EXTM3U
#EXT-X-VERSION:6
#EXT-X-TARGETDURATION:2
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-MAP:URI="init_segment.mp4"
#EXTINF:1.001,
output_video-1.mp4
#EXT-X-DISCONTINUITY
#EXT-X-KEY:METHOD=SAMPLE-AES,URI="data:text/plain;base64,AAAAPXBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAB0aDXdpZGV2aW5lX3Rlc3QiDHRlc3QgY29udGVudA==",KEYID=0x112233445566778899001122334455,KEYFORMAT="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed",KEYFORMATVERSION="1"
#EXTINF:1.001,
output_video-2.mp4
#EXTINF:0.734,
output_video-3.mp4
#EXT-X-ENDLIST

以下のリストは、現在使用または使用していない HLS の機能とタグです。 サポート。これらの有無はストリーミングの動作に影響しません。

  • #EXT-X-STREAM-INFRESOLUTION= 属性は無視されます。
  • #EXT-X-MEDIAAUTOSELECT= 属性は使用されません。その代わりに、 DEFAULT=
  • マスター再生リスト内の #EXT-X-I-FRAME-STREAM-INF は無視されます。
  • #EXT-X-DISCONTINUITY-SEQUENCE は無視されます
  • #EXT-X-PLAYLIST-TYPE:EVENT さんをライブ配信中に表示でき、 VOD ストリームに #EXT-X-PLAYLIST-TYPE:VOD を含めることができますが、現在のところ ウェブ レシーバー プレーヤーは、#EXT-X-ENDLIST の存在のみに基づいて行います。 ライブかVOD。

スムーズなストリーミング

Microsoft の公式 スムーズ ストリーミングの仕様

スムーズ ストリーミングはアダプティブ ストリーミング プロトコルと XML 仕様を提供 HTTP 経由(DASH と同様)します。スムーズ ストリーミングでは、DASH とは異なる メディア セグメントには MPEG-4 パッケージのみを使用できます。

以下の表は、スムーズ ストリーミングでよく使用されるタグと属性の一覧です。 Web Receiver Player は現在 サポートされているため多くのコンセプトについては、Terraform の DASH セクションを見てみましょう

タグ/属性 用途
&lt;SmoothStreamingMedia&gt; マニフェストのメインタグ。次の属性が含まれます。 <ph type="x-smartling-placeholder">
    </ph>
  • TimeScale: 1 秒を表す単位数。通常は 10,000,000
  • 長さ: 時間スケールでのコンテンツの長さ。ウェブ レシーバー プレーヤーが 0.1 秒未満の時間はサポートしません
  • IsLive: マニフェストがライブ メディアかどうか。
&lt;StreamIndex&gt; DASH の AdaptationSet に似た 1 つのストリーム セット。通常、タイプは 「text」、「video」、または「audio」。URL 属性には通常、テンプレート化された URL を フラグメント URL を返します。
&lt;QualityLevel&gt; 各 QualityLevel タグは、そのビットレートと FourCC コーデックを指定します。FourCC 通常は「H264」、「AVC1」、「AACL」などがあります。動画の場合、 自動的に表示。音声の場合、 (44100 など)のサンプリング レートとチャネル数を指定します。
&lt;c&gt; ストリーム フラグメント要素。次を含む: <ph type="x-smartling-placeholder">
    </ph>
  • d: フラグメントの再生時間。
  • t: フラグメントのメディア時間。
&lt;Protection&gt; システムの ID をリストするオプションの SystemID 属性を含むタグ <SmoothStreamingMedia> で使用する DRMできます。
&lt;ProtectionHeader&gt; <Protection> に、SystemID 属性とカスタム属性を含められる 通常は Base64 でエンコードされますWidevine の場合、キー ID とキーが含まれます。 長さ、アルゴリズム ID(例: AESCTR、LA_URL(ライセンス取得 URL)、 LUI_URL(ライセンス ユーザー インターフェースの URL)と DS_ID(ドメイン サービス ID)で構成されています。

コンテンツの保護

保護システム ID を適切にエンコードするには、以下のマッピングを使用します。

  • WIDEVINE: 'EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED',
  • クリアキー:'1077EFEC-C0B2-4D02-ACE3-3C1E52E2FB4B',
  • MPEG_DASH_MP4PROTECTION: 'URN:MPEG:DASH:MP4PROTECTION:2011'

<ProtectionHeader> について、Base64 でエンコードされたデータの例を以下に示します。「 データは、デコード時に、Terraform の 上記の DASH コンテンツ保護サポート。

<Protection>
  <ProtectionHeader SystemID="9a04f079-9840-4286-ab92-e65be0885f95">
    $BASE64ENCODED_DATA
  </ProtectionHeader>
</Protection>

以下は、3,000 秒のライブスムーズ ストリーミングのマニフェストの例です。 コンテンツの長さ:

<?xml version="1.0"?>
  <SmoothStreamingMedia MajorVersion="2" MinorVersion="0" Duration="3000000000"
    TimeScale="10000000" IsLive="TRUE" LookAheadFragmentCount="2" DVRWindowLength="600000000" CanSeek="TRUE" CanPause="TRUE">
    <StreamIndex Type="text" Name="textstream301_swe" Language="swe" Subtype="CAPT" Chunks="0"
      TimeScale="10000000" Url="QualityLevels({bitrate})/Fragments(textstream301_swe={start time})">
      <QualityLevel Index="0" Bitrate="20000" CodecPrivateData="" FourCC="DFXP"/>
        <c d="40000000" t="80649382288125"/>
        <c d="39980000"/>
        <c d="40020000"/>
    </StreamIndex>
    <Protection>
      <ProtectionHeader> SystemID="$BASE64ENCODEDDRMDATA$"</ProtectionHeader>
    </Protection>
    <StreamIndex Type="audio" Name="audio101_eng" Language="eng" Subtype="AACL" Chunks="0"
      TimeScale="10000000" Url="QualityLevels({bitrate})/Fragments(audio101_eng={start time})">
      <QualityLevel Index="0" Bitrate="128000" CodecPrivateData="1290" FourCC="AACL" AudioTag="255"
        Channels="2" SamplingRate="32000" BitsPerSample="16" PacketSize="4"/>
      <c d="40000000" t="80649401327500"/>
      <c d="40000000"/>
      <c d="40000000"/>
    </StreamIndex>
    <StreamIndex Type="video" Name="video" Subtype="AVC1" Chunks="0" TimeScale="10000000"
      Url="QualityLevels({bitrate})/Fragments(video={start time})">
      <QualityLevel Index="0" Bitrate="400000" CodecPrivateData="000000016742E01596540C0EFCB808140000000168CE3880"
        FourCC="AVC1" MaxWidth="384" MaxHeight="216"/>
      <QualityLevel Index="1" Bitrate="800000" CodecPrivateData="00000001674D401E965281004B6020500000000168EF3880"
        FourCC="AVC1" MaxWidth="512" MaxHeight="288"/>
      <QualityLevel Index="2" Bitrate="1600000" CodecPrivateData="00000001674D401E965281B07BCDE020500000000168EF3880"
        FourCC="AVC1" MaxWidth="854" MaxHeight="480"/>
      <QualityLevel Index="3" Bitrate="2200000" CodecPrivateData="00000001674D401F96528080093602050000000168EF3880"
        FourCC="AVC1" MaxWidth="1024" MaxHeight="576"/>
      <c d="40000000" t="80649401378125"/>
      <c d="40000000"/>
      <c d="40000000"/>
    </StreamIndex>
  </SmoothStreamingMedia>

上記の動画ストリームの例では、URL テンプレートは次のようになります。

QualityLevels({bitrate})/Fragments(video={start time})

したがって、最初の 2 つのセグメント(品質レベルがインデックス 2 であると仮定)は、次のようになります。 以下は、t="80649401378125" から抽出された初期時刻です。[ 動画 StreamIndex と、セグメントごとの 4 秒 × 1,000,000 の時間増分:

QualityLevels(2)/Fragments(video=80649401378125)
QualityLevels(2)/Fragments(video=80649441378125)
...

現在無視されているスムーズ ストリーミングの属性のリストは次のとおりです。 提供されているかどうかにかかわらず、ストリーミング エクスペリエンスには影響しません。

  • <SmoothStreamingMedia> タグで CanSeekCanPause
  • ChunksQualityLevels<StreamIndex> タグ内)。その代わりに、 情報に基づくセグメント数と品質レベルの数 <StreamIndex> 内で指定します。たとえば、実際の QualityLevel タグや <c> タグ。
  • <QualityLevel>BitsPerSamplePacketSize は使用されません。
で確認できます。

ディスプレイ タイプを確認する

canDisplayType メソッドで Web Receiver デバイスの映像と音声の機能をチェックし、 渡されたメディア パラメータを検証してブール値を返して、結果を表示します。すべて 1 つ目はオプションです。含めるパラメータが多いほど、 チェックの精度が向上します

署名は canDisplayType(<em>mimeType</em>,<em>codecs</em>,<em>width</em>,<em>height</em>,<em>framerate</em>) です。

例:

Web Receiver デバイスとディスプレイが video/mp4 をサポートしているかどうかを確認してください 特定のコーデック、サイズ、フレームレートを持つ mimetype を指定します。

canDisplayType("video/mp4", "avc1.42e015,mp4a.40.5", 1920, 1080, 30)

Web Receiver デバイスとディスプレイが 幅 3840 と高さ 2160 を指定して、このコーデックを次のように作成します。

canDisplayType("video/mp4", "hev1.1.2.L150", 3840, 2160)

ウェブレシーバーのデバイスとディスプレイがこのコーデックの HDR10 をサポートしているかどうかを確認します。 フレームレートは

canDisplayType("video/mp4", "hev1.2.6.L150", 3840, 2160, 30)

Web Receiver デバイスとディスプレイが以下のドルビー ビジョン(DV)をサポートしているかどうかを確認します 次のコーデック、サイズ、フレームレートがあります。

canDisplayType("video/mp4", "dvhe.04.06", 1920, 1080, 30)

DRM

一部のメディア コンテンツには、デジタル著作権管理(DRM)が必要です。メディア コンテンツ向け DRM ライセンス(および鍵の URL)がマニフェスト(DASH または HLS)に保存されている Cast SDK が代わりに処理します。そのコンテンツの一部には licenseUrl 暗号化する必要があります。Web Receiver では PlaybackConfig: 必要に応じて licenseUrl を設定します。

次のコード スニペットは、ライセンスのリクエスト情報を設定する方法を示しています。 withCredentials などのリクエスト:

const context = cast.framework.CastReceiverContext.getInstance();
const playbackConfig = new cast.framework.PlaybackConfig();
// Customize the license url for playback
playbackConfig.licenseUrl = 'http://widevine/yourLicenseServer';
playbackConfig.protectionSystem = cast.framework.ContentProtection.WIDEVINE;
playbackConfig.licenseRequestHandler = requestInfo => {
  requestInfo.withCredentials = true;
};
context.start({playbackConfig: playbackConfig});

// Update playback config licenseUrl according to provided value in load request.
context.getPlayerManager().setMediaPlaybackInfoHandler((loadRequest, playbackConfig) => {
  if (loadRequest.media.customData && loadRequest.media.customData.licenseUrl) {
    playbackConfig.licenseUrl = loadRequest.media.customData.licenseUrl;
  }
  return playbackConfig;
});

Google アシスタントを統合している場合、 コンテンツに必要な認証情報が Google アカウントの OAuth/SSO などのメカニズムを介して Google アカウントにアクセスできます。このような場合、 メディア コンテンツは音声を通じて読み込まれるか、クラウドから取得されます。 setCredentials がクラウドからキャスト デバイスに呼び出されます。 認証情報が必要です。ウェブ レシーバー アプリを作成するアプリケーションは、 setCredentials の情報を提供して、必要に応じて DRM を運用します。これが 認証情報を使用してメディアを作成できます。

ヒント: contentId、contentUrl、エンティティを使用したメディアの読み込みもご覧ください。

音声チャンネル処理

キャスト プレーヤーがメディアを読み込むときに、単一の音源バッファを設定します。ちなみに 同時に、バッファで使用する適切なコーデックも選択されます。 メイン トラックの MIME タイプに基づいて識別されます。新しいバッファとコーデックを設定します。

  • 再生開始時に
  • すべてのミッドロール挿入点に配置され、
  • メインコンテンツが再開します

バッファは 1 つのコーデックを使用するうえ、コーデックは選択されます。 メイン トラックに基づいて、サブトラックがサブトラックに登録される場合もあります。 気づかないことがあります。これは、メディア プログラムのプライマリ ファイルが トラックはサラウンド音声ですが、セカンダリ音声トラックはステレオ サウンドを使用しています。 予備のトラックは、別のトラックでコンテンツを提供するために使用されることが多いため 異なるトラックを含むメディアを提供すると、 視聴がほとんど不可能になるなど、多大な影響を及ぼします。 コンテンツを投稿しています。

次のシナリオは、プログラミングを提供することがなぜ重要なのかを示しています。 メイン トラックとサブトラックに同じ数のチャンネルが含まれている場合:

シナリオ 1 - メディア ストリームにチャンネルがない プライマリ トラックとセカンダリ トラック間での同等性:

  • 英語 - AC-3 5.1 チャンネル(プライマリ)
  • スウェーデン - AAC 2 チャンネル
  • フランス語 - AAC 2 チャンネル
  • ドイツ語 - AAC 2 チャンネル

このシナリオで、プレーヤーの言語が ユーザーが期待するトラックが聞こえない場合があります。これは、ユーザーが期待するトラックが 2 チャンネルのトラックが再生中に除外される。唯一のトラックであり、 5.1 チャネルのプライマリ AC-3 5.1 チャネルで、かつ 言語は英語に設定されています

シナリオ 2 - チャンネルありのメディア ストリーム プライマリ トラックとセカンダリ トラック間での同等性:

  • 英語 - AC-3 5.1 チャンネル(プライマリ)
  • スウェーデン - AC-3 5.1 チャンネル
  • フランス語 - AC-3 5.1 チャンネル
  • ドイツ語 - AC-3 5.1 チャンネル

このストリームのトラックはすべて同じチャンネル数であるため、視聴者は 選択した言語に関係なく、トラックが再生されます。

Shaka 音声チャンネル処理

Shaka プレーヤー(DASH)の優先チャンネル数は、デフォルトで 2 に設定されており、 副次的メディアとの同等性に欠けるメディアに遭遇した場合の 生成できます。

メイントラックがサラウンド音声でない場合(2 チャンネル ステレオなど) Shaka プレーヤーはデフォルトで 2 つのチャンネルを使用し、 2 つ以上のメディア トラックが含まれるサブメディア トラックを自動的にフィルタする です。

Shaka が設定する音声チャンネルの数は、 shakaConfig プロパティの preferredAudioChannelCount cast.framework.PlaybackConfig.

例:

shakaConfig = { "preferredAudioChannelCount": 6 };

preferredAudioChannelCount が 6 に設定されている場合、Shaka Player は以下を確認します。 サラウンド音声コーデック(AC-3 または EC-3)をサポートできる。 優先ルールに準拠していないメディア トラックを自動的に除外 向上します