網路接收器播放器串流通訊協定

Web Receiver SDK 支援三種類型 的串流通訊協定:

DASHHTTP 直播 串流 流暢串流

本文列出各種串流通訊協定的支援。注意事項 各通訊協定所支援代碼的說明會有縮寫。 與詳細通訊協定規格相比目標是提供 快速介紹各項通訊協定的使用方式,以及哪些功能 通訊協定的通訊協定,才能在支援 Cast 的裝置投放 以及串流體驗

透過 HTTP 使用動態自動調整串流 (DASH)

ISO DASH 詳細規格

DASH 是一種彈性位元率串流通訊協定,可啟用高畫質視訊 透過 HTTP(S) 伺服器提供串流服務以 XML 編寫的資訊清單,內含大多數 說明如何初始化及下載影片 內容。Web Receiver Player 支援的主要概念為 <Period><AdaptationSet><Representation><SegmentTemplate><SegmentList><BaseUrl><ContentProtection>

DASH 資訊清單以根層級 <MPD> 標記開頭,內含一個或 多個 <Period> 標記,代表一個串流內容。 <Period> 標記允許針對不同的串流內容排序 通常用於區隔主要內容和廣告,或有多個 連續的影片內容。

<MPD> 下的 <AdaptationSet> 是一組表示法 其中一種媒體串流,而影片、音訊或字幕。最常出現 常見的 MIME 類型為「video/mp4」、「audio/mp4」和「text/vtt」。一個 可加入選用的 <ContentComponent contentType="$TYPE$"> 低於 <AdaptationSet>

在每個 <AdaptationSet> 中,都有一個 <Representation> 標記清單 而網路接收端播放器則會使用 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> 標記的屬性;可指定在 重新載入資訊清單。
類型 <MPD> 標記的屬性;「動態」代表 這是直播。
presentationTimeOffset <SegmentBase> 標記的屬性;會指定 從週期開始算起,顯示時間偏移。
startNumber 指定簡報中的第一個媒體區段數量 。這通常用於直播中。

我們也支援在 DASH4 片段內辨識「EMSG」EMSG方塊,以及用於 DASH 和 提供 EmsgEvent敬上 開發人員。

雖然我們目前的網路接收端播放器支援 DASH 主要使用案例,這裡 是目前實作 DASH 的常見屬性清單 忽略或不使用。這意味著,無論資訊清單是否包含 也不會影響內容的播放體驗

  • availabilityStartTime
  • segmentAlignment

HTTP 即時串流 (HLS)

您可以取得 HTTP 即時串流的總覽及完整規格 請按這裡

Web Receiver Player 的主要優勢之一就是能 在 MSE 中播放 HTTP 即時串流。與 DASH 不同之處在於,DASH 資訊清單位於單一位置 檔案,HLS 會傳送主要播放清單,內含所有變化版本串流的清單 並分別使用各自的網址變化版本播放清單為媒體播放清單。兩者 Web 接收器播放器目前在主版本中支援的主要 HLS 標記 播放清單:

標記名稱 功能
#EXT-X-STREAM-INF 指定位元率/變體串流。BANDWIDTH 屬性為 而可支援自動調整位元率串流選項。 強烈建議您使用 CODECS 屬性來初始化 MSE,例如 使用 "avc1.42c01e,mp4a.40.2"。如未指定,預設情況下為 已設為 H264 主要設定檔 3.0 視訊且 "mp4a.40.2" 音訊編碼 內容。
#EXT-X-MEDIA URI 屬性中指定其他媒體播放清單: 內容所代表的意義這些通常是其他音訊串流的替代音訊串流 格式 (5.1 環場音效) 或語言。TYPE 的屬性 包含 VIDEOAUDIO 可以使用 SUBTITLESCLOSED-CAPTIONS。設定 YESDEFAULT 屬性會表示選擇 預設使用這個替代串流

以下是 Web 接收器播放器目前支援的 HLS 標記清單 媒體播放清單:

標記名稱 功能
#EXTINF 串流資訊,通常是在 並在下一行輸入片段網址。
#EXT-X-TARGETDURATION 每個片段的時間長度 (以秒為單位)。這項設定也會決定 下載/重新整理直播的播放清單資訊清單。網路接收端 播放器不支援短於 0.1 秒的時間。
#EXT-X-MEDIA-SEQUENCE 第一個片段的序號 (通常是直播) 這個播放清單代表
#EXT-X-KEY DRM 金鑰資訊。METHOD 屬性能讓我們得知 要使用的 AI 系統我們現在支援 AES-128SAMPLE-AES ,直接在 Google Cloud 控制台實際操作。
#EXT-X-BYTERANGE 要為片段網址擷取的位元組範圍。
#EXT-X-DISCONTINUITY 指定連續區段之間的不連續,這種情況經常出現 使用伺服器端廣告插播,但廣告區隔顯示在片中廣告的中間 。
#EXT-X-PROGRAM-DATE-TIME 下一個區段第一個樣本的絕對時間,例如 &quot;2016-09-21T23:23:52.066Z&quot;.
#EXT-X-ENDLIST 影片是隨選影片或直播。

直播時使用 #EXT-X-PROGRAM-DATE-TIME#EXT-X-MEDIA-SEQUENCE 做為判斷如何合併新重新整理的資訊清單的關鍵因素。如果 目前都是使用 #EXT-X-PROGRAM-DATE-TIME 來比對重新整理的區隔。 否則會使用 #EXT-X-MEDIA-SEQUENCE 號碼。請注意,根據 HLS 規格,我們不會使用檔案名稱比較進行比對。

我們的 HTTP 即時串流導入方式支援選取替代音訊串流,例如 5.1 環場音效,做為主要播放音訊。方法是透過 使用包含替代轉碼器的 #EXT-X-MEDIA 標記,並同時提供 串流設定中的區隔格式

網路接收端播放器會預期每個規格的特定行為。舉例來說 #EXT-INF 標記後,請使用 URI。如果不是 URI, #EXT-X-DISCOUNTINUITY 會造成播放清單剖析失敗。

我們每 #EXT-X-TARGETDURATION 秒重新載入播放清單/資訊清單,以便取得 新的區隔清單,而我們也更新了 複製到新的區隔每次有人索取廣告時,我們只會在 可搜尋的範圍如果是即時影像,我們僅允許從開頭 直到最後三個目標時間長度為止。舉例來說 如果您有 10 份區隔清單,而目前位於區隔 6,那麼您只能 但 8 則不是 8

區隔格式支援

CAF SDK 支援播放多種格式 (如參照) 提供的內容 在HlsSegmentFormat (音訊) 和 HlsVideoSegmentFormat 影片廣告。這包括對 令人飽滿的音訊 例如 AAC 與 AC3 播放,都能加密及未加密必填 我們要在 LoadRequestDataMediaInformation 中指定這項資訊 才能向播放器正確描述您的內容。如果沒有指定, 預設的播放器設定會嘗試以 Transport 方式播放內容 串流播放封裝內容。這個屬性可從 載入要求資料 (AndroidiOS網頁) 或在接收端透過訊息攔截器存取

查看程式碼範例 下方程式碼片段,或是使用 contentId、contentUrl 和實體載入媒體 指南。

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-AESSAMPLE-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 位元組十六進位字串,與 MPEG DASH 中的 default_kid 相同角色。如果使用階層式金鑰配置,此項目就是「根」鍵。

使用 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

下方是我們目前未在 HTTP 即時串流中使用的功能和標記清單 聯絡。無論是否有狀態,都不會影響串流行為。

  • 系統會忽略 #EXT-X-STREAM-INF 中的 RESOLUTION= 屬性。
  • 請勿使用 #EXT-X-MEDIA 中的 AUTOSELECT= 屬性。而是仰賴 DEFAULT=
  • 已忽略主要播放清單中的「#EXT-X-I-FRAME-STREAM-INF」。
  • 已忽略#EXT-X-DISCONTINUITY-SEQUENCE
  • #EXT-X-PLAYLIST-TYPE:EVENT 可以顯示在直播中, #EXT-X-PLAYLIST-TYPE:VOD 可以出現在 VOD 串流中,不過目前我們的 網路接收器播放器只有在 #EXT-X-ENDLIST 的情況下 確定即時與隨選影片。

流暢地串流播放

Microsoft 官方 流暢串流規格

順暢串流提供自動調整式串流通訊協定和 XML 規格 與 DASH 相似。與 DASH 不同的是,Smooth Streaming 的建議 媒體區隔專用的 MPEG-4 包裝。

這個表格列出 Smooth Streaming 中最常見的標記和屬性 Web Receiver Player 如今可支援許多概念在 請參閱上方的 DASH 部分

標記/屬性 用量
&lt;SmoothStreamingMedia&gt; 資訊清單的主要標記,其中包含下列屬性:
  • TimeScale:代表 1 秒的單位數,通常是以 10,000,000 次。
  • 時間長度:內容長度。Web 接收器播放器 不支援短於 0.1 秒
  • IsLive:資訊清單是否為即時媒體。
&lt;StreamIndex&gt; 一組串流,類似於 DASH 的 AdaptationSet。類型通常為 「text」、「video」或「audio」。Url 屬性通常包含範本 使用位元率或開始時間等資訊的片段網址。
&lt;QualityLevel&gt; 每個 QualityLevel 標記都會指定其位元率和 FourCC 轉碼器。《FourCC》 通常是「H264」、「AVC1」、「AACL」等等。如果是影片,則會指定 採用 MaxWidth 和 MaxHeight 的解析度。如果是音訊,則會指定 頻率 (例如 44100) 透過取樣率和管道數量。
&lt;c&gt; 串流片段元素。包含:
  • d:片段的時間長度。
  • t:片段的媒體時間。
&lt;Protection&gt; 含自選 SystemID 屬性的標記,用來列出系統 ID 在 <SmoothStreamingMedia> 之下使用的 DRM標記之前。
&lt;ProtectionHeader&gt; 在 <Protection> 下,可包含 SystemID 和 custom 的屬性 通常是 Base64 編碼如果是 Widevine,則會包含金鑰 ID 長度、演算法 ID,例如 AESCTR、LA_URL (授權取得網址) LUI_URL (授權使用者介面網址) 和 DS_ID (網域服務 ID)。

內容保護

為了正確編碼防護系統 ID,請使用下方對應:

  • 背景:「EDEF8BA9-79D6-4ACE-A3C8-27DCD51D21ED」
  • CLEARKEY: '1077EFEC-C0B2-4D02-ACE3-3C1E52E2FB4B'、
  • MPEG_DASH_MP4PROTECTION: 'URN:MPEG:DASH:MP4PROTECTION:2011'

以下是使用 Base64 編碼資料的範例 <ProtectionHeader>。 資料解碼後會遵循 DASH 內容保護支援。

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

以下是包含 3000 秒的流暢直播資訊清單範例 內容長度:

<?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>

以上方影片串流的範例為例,網址範本為:

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

因此前兩個區隔 (假設品質等級為 2) 擷取自 t="80649401378125" 的初始時間在 video StreamIndex 以及 4 秒的時間增量 * 每個片段 10000000:

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

以下是我們目前忽略和使用的 Smooth Streaming 屬性 均不影響串流體驗,無論是否提供影片都一樣:

  • <SmoothStreamingMedia> 標記中的 CanSeekCanPause
  • <StreamIndex> 標記中的 ChunksQualityLevels,而是以 根據資訊計算的分段數和品質等級數量 「<StreamIndex>」中的標記,例如實際的 QualityLevel 標記和 <c> 標記。
  • BitsPerSample<QualityLevel> 中的 PacketSize 也不會使用。
,瞭解如何調查及移除這項存取權。

檢查顯示類型

canDisplayType 方法會檢查 Web 接收器裝置的視訊和音訊功能,以及 驗證傳入的媒體參數並傳回布林值,以顯示廣告素材。所有語言 但第一個是選用參數 — 加入的參數越多, 檢查結果也會更加精確

其簽名為 canDisplayType(<em>mimeType</em>,<em>codecs</em>,<em>width</em>,<em>height</em>,<em>framerate</em>)

例如:

檢查網路接收器裝置和螢幕是否支援視訊/mp4 採用以下特定轉碼器、尺寸和影格速率的 MIME 類型:

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

檢查網路接收端裝置及螢幕是否支援 4K 影片格式 指定寬度為 3840 和高度 2160,藉此使用這個轉碼器:

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

檢查網路接收器裝置和螢幕是否支援這個轉碼器 維度和影格速率

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

檢查網路接收器裝置和螢幕是否支援 Dolby Vision (DV),用於 這個轉碼器、尺寸和影格速率:

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

DRM

部分媒體內容需要數位版權管理 (DRM) 才能運作。媒體內容 已在資訊清單中 (DASH 或 HTTP 即時串流) 儲存 DRM 授權和金鑰網址 Cast SDK 會為您處理這種情況部分內容需要 licenseUrl敬上 取得解密金鑰所需的憑證在網路接收端中,您可以使用 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 助理整合時,某些數位著作權管理資訊,例如 內容所需的憑證可能會直接連結至您的 透過 OAuth/SSO 等機制存取 Google 帳戶。在這種情況下 媒體內容從語音載入 或來自雲端 系統會從雲端叫用 setCredentials 至 Cast 裝置, 憑證編寫 Web Receiver 應用程式的應用程式即可使用 setCredentials 資訊,以便視需要執行 DRM。這裡舉例說明 運用憑證建構媒體

提示:另請參閱「使用 contentId、contentUrl 和實體載入媒體」。

聲道處理

Cast 播放器載入媒體時,會設定單一音訊來源緩衝區。在 同時也會選取適當的轉碼器,供緩衝區使用。 以主要音軌的 MIME 類型為基礎已設定新的緩衝區和轉碼器:

  • 開始播放時
  • 在每個廣告插播時間點
  • 每次主要內容繼續播放時

因為緩衝區使用單一轉碼器,且由於選擇了轉碼器 有些是由主要測試群組套用,但次要測試群組 系統也不會聽到其他聲音當媒體節目的主要目的 音軌有環場音效,但次要音軌則使用立體聲音效。 因為次要音軌經常用於提供替代內容 提供不同曲目數量的媒體內容 重大影響,例如許多觀眾聽不到聲音 提供當地語言版本

以下情境說明提供程式設計的重要性 其中主要和次要測試群組的頻道數量相同:

情境 1 - 缺少管道的媒體串流 主要和次要測試群組的一致性:

  • 英文 - AC-3 5.1 頻道 (主要)
  • 瑞典文 - AAC 2 頻道
  • french - AAC 2 頻道
  • 德國 - AAC 2 頻道

在這種情況下,如果玩家的語言設定為 使用者無法聽到他們期望聽到的曲目,因為所有的 播放期間會篩除雙聲道音軌。唯一一種是 會在主要 AC-3 5.1 頻道播放 請將語言設為英文

情境 2:含頻道的媒體串流 主要和次要測試群組的一致性:

  • 英文 - AC-3 5.1 頻道 (主要)
  • 瑞典文 - AC-3 5.1 頻道
  • 法國 - AC-3 5.1 頻道
  • 德國 - AC-3 5.1 頻道

這個串流的追蹤頻道數都相同,所以觀眾 無論是否選取語言,都會聽到音軌。

Shaka 音訊聲道處理

Shaka 播放器 (DASH) 預設為兩個偏好的頻道數量,做為兩個 就算遇到中級媒體缺乏對等性的媒體,也要採取因應措施 音軌。

如果主要音軌不是環場音效 (例如雙聲道立體聲) 音軌),Shaka 播放器會預設為兩個頻道 自動篩除含有兩個以上媒體的次要媒體音軌 頻道。

你也可以透過設定 位於 shakaConfig 屬性中的 preferredAudioChannelCount cast.framework.PlaybackConfig.

例如:

shakaConfig = { "preferredAudioChannelCount": 6 };

preferredAudioChannelCount 設為 6 時,Shaka Player 會檢查是否 都支援環場音效轉碼器 (AC-3EC-3);以及 自動篩除不符合偏好報表的任何媒體音軌 以及頻道數量