媒體播放訊息

Google Cast 傳送端應用程式會將 JSON 格式的訊息傳送至接收端應用程式,藉此控制接收端裝置的播放作業。同樣地,接收者也會以 JSON 格式將訊息傳回給傳送者。這些訊息可能是寄件者傳送的指令 (可變更播放器狀態)、收件者對這些指令的回應,或是描述收件者應用程式媒體的資料結構。

根據 Google Cast SDK 附加開發人員服務條款,Cast 媒體應用程式必須使用這裡定義的訊息,控制接收器上的媒體播放作業。這麼做可確保媒體應用程式在各平台提供一致的使用者體驗,並確保 Cast 應用程式支援新用途和未來用途。這些結構也支援自訂資料 (如適用),且應用程式可為 SDK 不支援的指令定義自己的訊息。

媒體播放訊息的命名空間定義為 urn:x-cast:com.google.cast.media。

注意:本規格中的訊息和結構體具有隱含的大小上限,取決於傳輸訊息的大小上限,個別欄位則沒有限制。目前傳輸訊息的大小上限為 64 KB。

常見的命名空間資料結構

所有媒體命名空間構件使用的資料結構超集,都會定義在通用命名空間中。

圖片

這是圖片的說明,包括少量中繼資料,讓傳送端應用程式可根據圖片的顯示方式選擇圖片。

在 Images 陣列中,只有一個項目可選擇性提供高度和寬度。舉例來說,如果系統只傳回一個項目,則為選用;如果傳回兩個項目,其中一個項目必須指定高度和寬度,但如果傳送者不喜歡使用特定參數傳送的項目,也可以選擇「預設」選項。

名稱 類型 說明
url URI 圖片的 URI
height 整數 選用 :圖片高度
width 整數 選用 :圖片寬度

音量

媒體串流音量。用於媒體串流的淡入/淡出效果。(注意:系統音量是使用傳送者 API 變更。)請勿同時使用音量滑桿或音量按鈕控制裝置音量,如要變更串流音量,至少須傳遞下列其中一個參數。

名稱 類型 說明
level 雙精準數 選用 :目前的串流音量,值介於 0.0 和 1.0 之間,1.0 代表最大音量。
muted 布林值 選用 :無論音量大小,是否將 Google Cast 裝置設為靜音

媒體命名空間資料結構

這些訊息會說明媒體播放器的狀態。命名空間為 urn:x-cast:com.google.cast.media。

MediaInformation

這個資料結構會說明媒體串流。

名稱 類型 說明
contentId 字串 媒體播放器目前載入內容的服務專屬 ID。這是任意形式的字串,且專屬於應用程式。在大多數情況下,這會是媒體的網址,但傳送者可以選擇傳遞接收者可正確解讀的字串。長度上限:1,000 個字元
streamType enum
(string)

說明媒體構件的類型,可以是下列其中一種:

  • NONE
  • 已緩衝
  • 直播
contentType 字串 播放中媒體的 MIME 內容類型
中繼資料 物件

選用 :媒體中繼資料物件,可以是下列其中一種:

duration 雙精準數 選用 :目前播放串流的長度 (以秒為單位)
customData 物件 選用 :由傳送端應用程式或接收端應用程式定義的應用程式專屬資料 Blob

GenericMediaMetadata

說明一般媒體構件。

名稱 類型 說明
metadataType 整數 0  (唯一值)
title 字串 選用 :內容的描述性標題。播放器可使用 content_id 獨立擷取片名,也可以由傳送者在 Load 訊息中提供
subtitle 字串 選用 :內容的描述性子標題。播放器可使用 content_id 獨立擷取片名,也可以由傳送者在 Load 訊息中提供
圖片 圖片[] 選填 :與內容相關聯的圖片網址陣列。寄件者可以在「Load」訊息中提供欄位的初始值。應提供建議大小
releaseDate 字串 (ISO 8601) 選用 :這項內容發布的 ISO 8601 日期和時間。播放器可使用 content_id 獨立擷取片名,也可以由傳送者在 Load 訊息中提供

MovieMediaMetadata

描述電影媒體構件。

名稱 類型 說明
metadataType 整數 1  (唯一值)
title 字串 選用 :內容的描述性標題。播放器可使用 content_id 獨立擷取片名,也可以由傳送者在 Load 訊息中提供
subtitle 字串 選用 :內容的描述性子標題。播放器可使用 content_id 獨立擷取片名,也可以由傳送者在 Load 訊息中提供
studio 字串 選用 :發布內容的影視公司。播放器可使用 content_id 獨立擷取工作室,或由傳送者在 Load 訊息中提供
圖片 圖片[] 選填 :與內容相關聯的圖片網址陣列。寄件者可以在「Load」訊息中提供欄位的初始值。應提供建議大小
releaseDate 字串 (ISO 8601) 選用 :這項內容發布的 ISO 8601 日期和時間。播放器可使用 content_id 獨立擷取片名,也可以由傳送者在 Load 訊息中提供

TvShowMediaMetadata

說明電視節目集數媒體構件。

名稱 類型 說明
metadataType 整數 2  (唯一值)
seriesTitle 字串 選用 :電視影集的說明標題。播放器可使用 content_id 獨立擷取片名,也可以由傳送者在 Load 訊息中提供
subtitle 字串 選用 電視節目集的描述性副標題。播放器可使用 content_id 獨立擷取片名,也可以由傳送者在 Load 訊息中提供
season 整數 選填 電視節目的季別
episode 整數 選填 :電視節目在該季中的集數
圖片 圖片[] 選填 :與內容相關聯的圖片網址陣列。寄件者可以在「Load」訊息中提供欄位的初始值。應提供建議大小
originalAirDate 字串 (ISO 8601) 選用 :這集節目發布的 ISO 8601 日期和時間。播放器可使用 content_id 獨立擷取 originalAirDate,也可以由傳送者在 Load 訊息中提供

MusicTrackMediaMetadata

描述音樂曲目媒體構件。

名稱 類型 說明
metadataType 整數 3  (唯一值)
albumName 字串 選填 :這首曲目所屬的專輯或合輯。播放器可使用 content_id 獨立擷取 albumName,也可以由傳送者在 Load 訊息中提供
title 字串 選填 曲目名稱 (例如歌曲名稱)。播放器可使用 content_id 獨立擷取片名,也可以由傳送者在 Load 訊息中提供
albumArtist 字串 選填 :與收錄這首曲目的專輯相關聯的藝人名稱。播放器可使用 content_id 獨立擷取 albumArtist,也可以由傳送者在 Load 訊息中提供
藝人 字串 選用 :與媒體曲目相關聯的藝人名稱。播放器可使用 content_id 獨立擷取藝人,也可以由傳送者在 Load 訊息中提供
composer 字串 選填 :與媒體曲目相關聯的作曲家名稱。播放器可以獨立使用 content_id 擷取作曲家,也可以由傳送者在「Load」訊息中提供
trackNumber 整數 選用 :專輯中曲目的編號
discNumber 整數 選填 :專輯的卷號 (例如光碟)
圖片 圖片[] 選填 :與內容相關聯的圖片網址陣列。寄件者可以在「Load」訊息中提供欄位的初始值。應提供建議大小
releaseDate 字串 (ISO 8601) 選用 :這項內容發布的 ISO 8601 日期和時間。播放器可使用 content_id 獨立擷取 releaseDate,也可以由傳送者在 Load 訊息中提供

PhotoMediaMetadata

說明攝影媒體構件。

名稱 類型 說明
metadataType 整數 4  (唯一值)
title 字串 選填 :相片的標題。播放器可使用 content_id 獨立擷取片名,也可以由傳送者在 Load 訊息中提供
藝人 字串 選用 攝影師姓名。播放器可使用 content_id 獨立擷取藝人,也可以由傳送者在 Load 訊息中提供
位置 字串 選填 :相片的拍攝地點,例如「西班牙馬德里」。播放器可以使用 content_id 獨立擷取位置,也可以由傳送者在 Load 訊息中提供
latitude 雙精準數 選填 :相片拍攝地點的地理緯度值。播放器可使用 content_id 獨立擷取緯度,也可以由傳送者在 Load 訊息中提供
longitude 雙精準數 選填 :相片拍攝地點的地理經度值。播放器可使用 content_id 獨立擷取經度,或由傳送者在 Load 訊息中提供
width 整數 選用 :相片的寬度 (以像素為單位)。播放器可使用 content_id 獨立擷取寬度,或由傳送者在 Load 訊息中提供
height 整數 選用 :相片的高度 (以像素為單位)。播放器可使用 content_id 獨立擷取高度,或由傳送者在 Load 訊息中提供
creationDateTime 字串 (ISO 8601) 選用 :這張相片的拍攝日期和時間,採用 ISO 8601 格式。播放器可使用 content_id 獨立擷取 creationDateTime,或由傳送者在 Load 訊息中提供

MediaStatus

說明媒體構件在工作階段中的目前狀態。

名稱 類型 說明
mediaSessionId 整數 這個特定工作階段的播放專屬 ID。這個 ID 是由接收端在 LOAD 時設定,可用於識別特定播放執行個體。舉例來說,如果同一工作階段中播放兩次「Wish you were here」,這兩次播放都會有專屬的 mediaSessionId。
media MediaInformation 選填 (適用於狀態訊息) :播放內容的完整說明。只有在 MediaInformation 變更時,才會在狀態訊息中傳回。
playbackRate 浮點數 指出媒體時間是否正在推進,以及推進速度。這與播放器狀態無關,因為媒體時間可以在任何狀態下停止。1.0 為正常時間,0.5 為慢動作
playerState 列舉 (字串)

說明播放器的狀態,如下所示:

  • IDLE  尚未載入播放器
  • 播放  :播放器正在播放內容
  • 緩衝  :播放器處於「播放」模式,但未主動播放內容 (currentTime 不會變更)
  • 已暫停  :播放器已暫停
idleReason 列舉 (字串)

選用 :如果 playerState 為 IDLE,且系統知道進入 IDLE 狀態的原因,就會提供這項屬性。如果播放器剛啟動而處於 IDLE 狀態,系統不會提供這項屬性;如果播放器處於任何其他狀態,系統也不應提供這項屬性。可能出現的值如下:

  • 已取消  :傳送者使用 STOP 指令要求停止播放
  • 已中斷  :傳送者使用 LOAD 指令要求播放其他媒體
  • 已完成  :媒體播放完畢
  • 錯誤  :媒體因發生錯誤而中斷,例如播放器因網路問題而無法下載媒體
currentTime 雙精準數 媒體播放器從內容開頭算起的目前位置 (以秒為單位)。如果是直播內容,這個欄位代表播放器應知的活動時間 (以秒為單位)。
supportedMediaCommands flags

說明媒體播放器支援哪些媒體指令的旗標:

  • 1 << 0  暫停
  • 1 << 1  搜尋
  • 1 << 2  串流音量
  • 1 << 3  串流靜音
  • 1 << 4  快轉 (已淘汰)
  • 1 << 5  倒轉 (已淘汰)
  • 1 << 6  Queue next
  • 1 << 7  將上一首歌曲加入佇列
  • 1 << 8  佇列隨機播放
  • 1 << 9  略過廣告
  • 1 << 10  佇列重複播放所有歌曲
  • 1 << 11  將單一項目加入佇列並重複播放
  • 1 << 12  編輯字幕軌
  • 1 << 13  播放速率
  • 1 << 14  喜歡
  • 1 << 15  不喜歡
  • 1 << 16  追蹤
  • 1 << 17  取消追蹤

組合以加總表示,例如 Pause+Seek+StreamVolume+Mute == 15。

音量 音量 串流音量
customData 物件 選用 :接收端應用程式定義的應用程式專屬資料 Blob

寄件者傳送給接收者的指令

這些指令可控制媒體播放器。以下訊息中的所有 customData 物件都必須是選用物件 (也就是說,如果未傳遞資料,接收器應適當降級)。這樣一來,一般遙控器應用程式就能正常運作。

載入

將新內容載入媒體播放器。

名稱 類型 說明
requestId 整數 要求 ID,用於建立要求和回應的關聯
type 字串 LOAD (僅限值)
media MediaInformation 要載入媒體的中繼資料 (包括 contentId)
autoplay 布林值

選用 (預設為 true):如果指定自動播放參數,媒體播放器會在載入內容時開始播放。即使未指定自動播放,媒體播放器實作項目仍可選擇立即開始播放。如果已開始播放,回應中的播放器狀態應設為 BUFFERING,否則應設為 PAUSED

currentTime 雙精準數 選用 :內容開始後經過的秒數。如果是直播內容,且未指定位置,系統會從直播位置開始播放
customData 物件 選用 :傳送端應用程式定義的應用程式專屬資料 Blob
回應 觸發條件 廣播 錯誤
無 接收器狀態變更 媒體狀態變更訊息 無效的播放器狀態
載入失敗
載入已取消

暫停

暫停播放目前的內容。觸發 STATUS 事件通知,傳送給所有傳送端應用程式。

名稱 類型 說明
mediaSessionId 整數 要暫停的媒體工作階段 ID
requestId 整數 要求 ID,用於建立要求/回應關聯
type 字串 PAUSE (僅限值)
customData 物件 選用 :傳送端應用程式定義的應用程式專屬資料 Blob
回應 觸發條件 廣播 錯誤
無 接收器狀態變更 媒體狀態變更訊息 播放器狀態無效

搜尋

設定串流中的目前位置。觸發 STATUS 事件通知,傳送給所有傳送端應用程式。如果提供的位置超出目前內容的有效位置範圍,播放器應盡可能選取最接近要求位置的有效位置。

名稱 類型 說明
mediaSessionId 整數 設定串流位置的媒體工作階段 ID
requestId 整數 要求 ID,用於建立要求和回應的關聯
type 字串 SEEK (僅限值)
resumeState 列舉 (字串)

選用 :如未設定,播放狀態不會變更;適用下列值:

  • PLAYBACK_START  強制媒體開始播放
  • PLAYBACK_PAUSE  :強制暫停媒體
currentTime 雙精準數 選用 :內容開始後經過的秒數。如果是直播內容,且未指定位置,系統會從直播位置開始播放
customData 物件 選用 :傳送端應用程式定義的應用程式專屬資料 Blob
回應 觸發條件 廣播 錯誤
無 接收器狀態變更 媒體狀態變更訊息 播放器狀態無效

停止

停止播放目前的內容。觸發 STATUS 事件通知,傳送給所有傳送端應用程式。執行這項指令後,系統就不會再載入內容,且 mediaSessionId 會失效。

名稱 類型 說明
mediaSessionId 整數 要停止的內容媒體工作階段 ID
requestId 整數 要求 ID,用於建立要求和回應的關聯
type 字串 STOP (僅限值)
customData 物件 選用 :傳送端應用程式定義的應用程式專屬資料 Blob
回應 觸發條件 廣播 錯誤
無 接收器狀態變更 媒體狀態變更訊息 播放器狀態無效

播放

開始播放透過載入呼叫載入的內容,並從目前的播放時間位置繼續播放。

名稱 類型 說明
mediaSessionId 整數 要播放內容的媒體工作階段 ID
requestId 整數 要求 ID,用於建立要求和回應的關聯
type 字串 PLAY (僅限值)
customData 物件 選用 :傳送端應用程式定義的應用程式專屬資料 Blob
回應 觸發條件 廣播 錯誤
無 接收器狀態變更 媒體狀態變更訊息 播放器狀態無效

取得狀態

擷取媒體狀態。

名稱 類型 說明
mediaSessionId 整數 選用 :要傳回媒體狀態的媒體工作階段 ID。如未提供,系統會提供所有媒體工作階段 ID 的狀態。
requestId 整數 要求 ID,用於建立要求和回應的關聯
type 字串 GET_STATUS (僅限值)
customData 物件 選用 :傳送端應用程式定義的應用程式專屬資料 Blob
回應 觸發條件 廣播 錯誤
MediaStatus 訊息給要求者 無 無 無

SetVolume

設定媒體串流音量。用於媒體串流的淡入/淡出效果。(注意:接收器音量是使用 Web 傳送端 setVolume 變更)。串流音量不得與音量滑桿或音量按鈕搭配使用,以控制裝置音量。串流音量變更不會在接收器上觸發任何 UI。

名稱 類型 說明
mediaSessionId 整數 要變更串流音量的媒體媒體工作階段 ID
requestId 整數 要求 ID,用於建立要求和回應的關聯
type 字串 VOLUME (僅限值)
音量 音量 串流音量
customData 物件 選用 :傳送端應用程式定義的應用程式專屬資料 Blob
回應 觸發條件 廣播 錯誤
無 接收器狀態變更 媒體狀態變更訊息 播放器狀態無效

收件者傳送給寄件者的訊息

接收器會傳送兩種類型的訊息:

  • 錯誤:當傳送者要求收到錯誤回應時,系統會傳送單點傳播訊息。
  • 狀態:廣播訊息。
    • 寄件者發起動作的後果。包含導致變更的要求的 requestId。
    • 自發性:例如,因接收端應用程式觸發的變更而發生。RequestId 會是 0。

錯誤:播放器狀態無效

當播放器狀態異常,無法滿足傳送者的要求時,系統會傳送這個事件。舉例來說,如果應用程式尚未建立媒體元素。

名稱 類型 說明
requestId 整數 產生這項錯誤的要求 ID
type 字串 INVALID_PLAYER_STATE (僅限值)
customData 物件 選用 :接收端應用程式定義的應用程式專屬資料 Blob

錯誤:載入失敗

載入要求失敗時傳送。播放器狀態會是 IDLE。

名稱 類型 說明
requestId 整數 產生這項錯誤的要求 ID
type 字串 LOAD_FAILED (僅限值)
customData 物件 選用 :接收端應用程式定義的應用程式專屬資料 Blob

錯誤:載入已取消

在取消載入要求時傳送 (已收到第二個載入要求)。

名稱 類型 說明
requestId 整數 產生這項錯誤的要求 ID
type 字串 LOAD_CANCELLED (唯一值)
customData 物件 選用 :接收端應用程式定義的應用程式專屬資料 Blob

錯誤:要求無效

要求無效時傳送 (例如要求類型不明)。

名稱 類型 說明
requestId 整數 產生這項錯誤的要求 ID
type 字串 INVALID_REQUEST (僅限值)
原因 列舉 (字串)

值:

  • INVALID_COMMAND  不支援這個指令
  • DUPLICATE_REQUESTID  :要求 ID 不重複 (接收者正在處理具有相同 ID 的要求)
customData 物件 選用 :接收端應用程式定義的應用程式專屬資料 Blob

媒體狀態

在狀態變更或媒體狀態要求後傳送。系統只會傳送已變更或要求的 MediaStatus 物件。

名稱 類型 說明
requestId 整數 用於將這個狀態回應與原始要求建立關聯的 ID,如果狀態訊息是自發性 (並非由傳送者要求觸發),則為 0。傳送端應用程式會選取隨機數字並持續遞增 (不會使用 0),藉此產生專屬要求 ID。
type 字串 MEDIA_STATUS (僅限值)
狀態 MediaStatus[] 媒體狀態物件的陣列。注意:只有在媒體元素有所變更時,系統才會傳回 MediaStatus 中的媒體元素。
customData 物件 選用 :接收端應用程式定義的應用程式專屬資料 Blob