Aplikasi pengirim Google Cast mengontrol pemutaran di perangkat penerima dengan mengirim pesan dalam format JSON ke aplikasi penerima. Demikian pula, penerima mengirim pesan kembali ke pengirim, juga dalam JSON. Pesan dapat berupa perintah dari pengirim yang mengubah status pemutar, respons terhadap perintah tersebut dari penerima, atau struktur data yang menjelaskan media untuk aplikasi penerima.
Mengikuti Persyaratan Layanan Tambahan Developer SDK Google Cast, aplikasi media Cast harus menggunakan pesan ini seperti yang ditentukan di sini untuk mengontrol pemutaran media di penerima. Dengan melakukannya, aplikasi media akan memberikan pengalaman pengguna yang konsisten di seluruh platform dan memastikan bahwa aplikasi Cast akan mendukung kasus penggunaan baru dan mendatang. Struktur ini juga mendukung data kustom, jika sesuai, dan aplikasi dapat menentukan pesannya sendiri untuk perintah yang tidak didukung oleh SDK.
Namespace untuk pesan pemutaran media ditentukan sebagai urn:x-cast:com.google.cast.media.
Catatan: Pesan dan struktur dalam spesifikasi ini memiliki ukuran maksimum implisit yang ditentukan oleh ukuran maksimum pesan transportasi, tidak ada batasan untuk setiap kolom. Ukuran maksimum pesan transportasi saat ini adalah 64 KByte.
Struktur data namespace umum
Superset struktur data yang digunakan oleh semua artefak namespace media ditentukan dalam namespace umum.
Gambar
Ini adalah deskripsi gambar, termasuk sedikit metadata untuk memungkinkan aplikasi pengirim memilih gambar, bergantung pada cara merendernya.
Tinggi dan lebar bersifat opsional hanya pada satu item dalam array Gambar. Misalnya, jika ada satu item yang ditampilkan, item tersebut bersifat opsional; jika ada dua item yang ditampilkan, satu item harus menentukan tinggi dan lebar, tetapi pengirim dapat memilih opsi "default" jika tidak menyukai opsi yang diteruskan dengan parameter tertentu.
| Nama | Jenis | Deskripsi |
|---|---|---|
| url | URI | URI untuk gambar |
| height | bilangan bulat | opsional Tinggi gambar |
| width | bilangan bulat | opsional Lebar gambar |
Volume
Volume streaming media. Digunakan untuk efek memudar/memudar pada streaming media. (Catatan: volume sistem diubah menggunakan API pengirim.) Volume streaming tidak boleh digunakan bersama dengan penggeser volume atau tombol volume untuk mengontrol volume perangkat. Setidaknya salah satu parameter berikut harus diteruskan untuk mengubah volume streaming.
| Nama | Jenis | Deskripsi |
|---|---|---|
| level | double | opsional Tingkat volume streaming saat ini sebagai nilai antara 0,0 dan 1,0, dengan 1,0 adalah volume maksimum. |
| dibisukan | boolean | opsional Apakah perangkat Cast dibisukan, terlepas dari tingkat volume |
Struktur data namespace media
Pesan ini menjelaskan status pemutar media. Namespace-nya adalah urn:x-cast:com.google.cast.media.
MediaInformation
Struktur data ini menjelaskan aliran media.
| Nama | Jenis | Deskripsi |
|---|---|---|
| contentId | string | ID khusus layanan dari konten yang saat ini dimuat oleh pemutar media. Ini adalah string bentuk bebas dan khusus untuk aplikasi. Biasanya, ini adalah URL ke media, tetapi pengirim dapat memilih untuk meneruskan string yang dapat ditafsirkan dengan benar oleh penerima. Panjang maksimum: 1.000 |
| streamType | enum (string) |
Mendeskripsikan jenis artefak media sebagai salah satu dari berikut ini:
|
| contentType | string | Jenis konten MIME media yang sedang diputar |
| metadata | objek | opsional Objek metadata media, salah satu dari berikut ini: |
| duration | double | opsional Durasi streaming yang sedang diputar dalam detik |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi pengirim atau aplikasi penerima |
GenericMediaMetadata
Menjelaskan artefak media generik.
| Nama | Jenis | Deskripsi |
|---|---|---|
| metadataType | bilangan bulat | 0 (satu-satunya nilai) |
| title | string | opsional Judul deskriptif konten. Pemutar dapat mengambil judul secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| subtitle | string | opsional Subjudul deskriptif konten. Pemutar dapat mengambil judul secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| images | Gambar[] | opsional Array URL ke gambar yang terkait dengan konten. Nilai awal kolom dapat diberikan oleh pengirim dalam pesan Load. Harus memberikan ukuran yang direkomendasikan |
| releaseDate | string (ISO 8601) | opsional Tanggal dan waktu ISO 8601 saat konten ini dirilis. Pemutar dapat mengambil judul secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
MovieMediaMetadata
Menjelaskan artefak media film.
| Nama | Jenis | Deskripsi |
|---|---|---|
| metadataType | bilangan bulat | 1 (satu-satunya nilai) |
| title | string | opsional Judul deskriptif konten. Pemutar dapat mengambil judul secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| subtitle | string | opsional Subjudul deskriptif konten. Pemutar dapat mengambil judul secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| studio | string | Opsional: Studio yang merilis konten. Pemutar dapat mengambil studio secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| images | Gambar[] | opsional Array URL ke gambar yang terkait dengan konten. Nilai awal kolom dapat diberikan oleh pengirim dalam pesan Load. Harus memberikan ukuran yang direkomendasikan |
| releaseDate | string (ISO 8601) | opsional Tanggal dan waktu ISO 8601 saat konten ini dirilis. Pemutar dapat mengambil judul secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
TvShowMediaMetadata
Mendeskripsikan artefak media episode acara televisi.
| Nama | Jenis | Deskripsi |
|---|---|---|
| metadataType | bilangan bulat | 2 (satu-satunya nilai) |
| seriesTitle | string | opsional Judul deskriptif serial TV. Pemutar dapat mengambil judul secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| subtitle | string | opsional Subjudul deskriptif episode TV. Pemutar dapat mengambil judul secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| season | bilangan bulat | opsional Nomor season acara TV |
| episode | bilangan bulat | opsional Nomor episode (dalam season) acara TV |
| images | Gambar[] | opsional Array URL ke gambar yang terkait dengan konten. Nilai awal kolom dapat diberikan oleh pengirim dalam pesan Load. Harus memberikan ukuran yang direkomendasikan |
| originalAirDate | string (ISO 8601) | Tanggal dan waktu rilis episode ini dalam format ISO 8601 opsional . Pemutar dapat mengambil originalAirDate secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
MusicTrackMediaMetadata
Mendeskripsikan artefak media trek musik.
| Nama | Jenis | Deskripsi |
|---|---|---|
| metadataType | bilangan bulat | 3 (satu-satunya nilai) |
| albumName | string | opsional Album atau koleksi dari mana lagu ini diambil. Pemutar dapat mengambil albumName secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| title | string | opsional Nama trek (misalnya, judul lagu). Pemutar dapat mengambil judul secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| albumArtist | string | opsional Nama artis yang terkait dengan album yang menampilkan lagu ini. Pemutar dapat mengambil albumArtist secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| artis | string | opsional Nama artis yang terkait dengan trek media. Pemutar dapat mengambil artis secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| composer | string | opsional Nama komposer yang terkait dengan trek media. Pemutar dapat mengambil komposer secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| trackNumber | bilangan bulat | opsional Nomor lagu di album |
| discNumber | bilangan bulat | opsional Jumlah volume (misalnya, cakram) album |
| images | Gambar[] | opsional Array URL ke gambar yang terkait dengan konten. Nilai awal kolom dapat diberikan oleh pengirim dalam pesan Load. Harus memberikan ukuran yang direkomendasikan |
| releaseDate | string (ISO 8601) | opsional Tanggal dan waktu ISO 8601 saat konten ini dirilis. Pemutar dapat mengambil releaseDate secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
PhotoMediaMetadata
Menjelaskan artefak media fotografi.
| Nama | Jenis | Deskripsi |
|---|---|---|
| metadataType | bilangan bulat | 4 (satu-satunya nilai) |
| title | string | opsional Judul foto. Pemutar dapat mengambil judul secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| artis | string | opsional Nama fotografer. Pemutar dapat mengambil artis secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| location | string | opsional Lokasi verbal tempat foto diambil; misalnya, "Madrid, Spanyol". Pemutar dapat mengambil lokasi secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| latitude | double | opsional Nilai lintang geografis untuk lokasi tempat foto diambil. Pemain dapat mengambil lintang secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| longitude | double | opsional Nilai bujur geografis untuk lokasi tempat foto diambil. Pemain dapat mengambil bujur secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| width | bilangan bulat | opsional Lebar foto dalam piksel. Pemutar dapat mengambil lebar secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| height | bilangan bulat | opsional Tinggi foto dalam piksel. Pemutar dapat mengambil tinggi secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
| creationDateTime | string (ISO 8601) | opsional tanggal dan waktu ISO 8601 saat foto ini diambil. Pemutar dapat mengambil creationDateTime secara independen menggunakan content_id atau dapat diberikan oleh pengirim dalam pesan Load |
MediaStatus
Menjelaskan status artefak media saat ini terkait dengan sesi.
| Nama | Jenis | Deskripsi |
|---|---|---|
| mediaSessionId | bilangan bulat | ID unik untuk pemutaran sesi tertentu ini. ID ini ditetapkan oleh penerima saat LOAD dan dapat digunakan untuk mengidentifikasi instance pemutaran tertentu. Misalnya, dua pemutaran "Wish you were here" dalam sesi yang sama akan memiliki mediaSessionId yang unik. |
| media | MediaInformation | opsional (untuk pesan status) Deskripsi lengkap konten yang diputar kembali. Hanya ditampilkan dalam pesan status jika MediaInformation telah berubah. |
| playbackRate | float | Menunjukkan apakah waktu media berjalan, dan pada kecepatan berapa. Hal ini tidak bergantung pada status pemutar karena waktu media dapat berhenti dalam status apa pun. 1,0 adalah waktu normal, 0,5 adalah gerak lambat |
| playerState | enum (string) | Menjelaskan status pemutar sebagai salah satu dari berikut:
|
| idleReason | enum (string) | opsional Jika playerState adalah IDLE dan alasan menjadi IDLE diketahui, properti ini diberikan. Jika pemutar dalam status IDLE karena baru saja dimulai, properti ini tidak akan diberikan; jika pemutar dalam status lain, properti ini tidak boleh diberikan. Nilai berikut berlaku:
|
| currentTime | double | Posisi pemutar media saat ini sejak awal konten, dalam detik. Jika ini adalah konten live stream, kolom ini akan menampilkan waktu dalam detik dari awal acara yang harus diketahui oleh pemain. |
| supportedMediaCommands | flags | Flag yang menjelaskan perintah media yang didukung pemutar media:
Kombinasi dijelaskan sebagai penjumlahan; misalnya, Jeda+Cari+StreamVolume+Bisukan == 15. |
| volume | Volume | Volume streaming |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi penerima |
Perintah dari pengirim ke penerima
Perintah ini mengontrol pemutar media. Semua objek customData dalam pesan di bawah harus bersifat opsional (yaitu, penerima harus melakukan penurunan kualitas dengan benar jika data tidak diteruskan). Tindakan ini akan memungkinkan aplikasi remote control generik berfungsi dengan baik.
Muat
Memuat konten baru ke pemutar media.
| Nama | Jenis | Deskripsi |
|---|---|---|
| requestId | bilangan bulat | ID permintaan, untuk menghubungkan permintaan dan respons |
| jenis | string | LOAD (hanya nilai) |
| media | MediaInformation | Metadata (termasuk contentId) media yang akan dimuat |
| autoplay | boolean | opsional (default adalah benar) Jika parameter putar otomatis ditentukan, pemutar media akan mulai memutar konten saat dimuat. Meskipun pemutaran otomatis tidak ditentukan, implementasi pemutar media dapat memilih untuk segera memulai pemutaran. Jika pemutaran dimulai, status pemutar dalam respons harus ditetapkan ke BUFFERING, jika tidak, statusnya harus ditetapkan ke PAUSED |
| currentTime | double | opsional Detik sejak awal konten. Jika konten adalah konten live, dan posisi tidak ditentukan, streaming akan dimulai pada posisi live |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi pengirim |
| Respons | Pemicu | Siaran | Error |
|---|---|---|---|
| Tidak ada | Perubahan status penerima | Pesan Perubahan Status Media | Status Pemutar Tidak Valid Pemuatan Gagal Pemuatan Dibatalkan |
Jeda
Menjeda pemutaran konten saat ini. Memicu notifikasi peristiwa STATUS ke semua aplikasi pengirim.
| Nama | Jenis | Deskripsi |
|---|---|---|
| mediaSessionId | bilangan bulat | ID sesi media yang akan dijeda |
| requestId | bilangan bulat | ID permintaan, yang akan digunakan untuk menghubungkan permintaan/respons |
| jenis | string | JEDA (hanya nilai) |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi pengirim |
| Respons | Pemicu | Siaran | Error |
|---|---|---|---|
| Tidak ada | Perubahan status penerima | Pesan Perubahan Status Media | Status Pemutar Tidak Valid |
Cari
Menetapkan posisi saat ini dalam streaming. Memicu notifikasi peristiwa STATUS ke semua aplikasi pengirim. Jika posisi yang diberikan berada di luar rentang posisi yang valid untuk konten saat ini, pemutar harus memilih posisi yang valid sedekat mungkin dengan posisi yang diminta.
| Nama | Jenis | Deskripsi |
|---|---|---|
| mediaSessionId | bilangan bulat | ID sesi media tempat posisi streaming ditetapkan |
| requestId | bilangan bulat | ID permintaan, untuk menghubungkan permintaan dan respons |
| jenis | string | SEEK (hanya nilai) |
| resumeState | enum (string) | opsional Jika tidak disetel, status pemutaran tidak akan berubah; nilai berikut berlaku:
|
| currentTime | double | opsional Detik sejak awal konten. Jika konten adalah konten live, dan posisi tidak ditentukan, streaming akan dimulai pada posisi live |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi pengirim |
| Respons | Pemicu | Siaran | Error |
|---|---|---|---|
| Tidak ada | Perubahan status penerima | Pesan Perubahan Status Media | Status Pemutar Tidak Valid |
Hentikan
Menghentikan pemutaran konten saat ini. Memicu notifikasi peristiwa STATUS ke semua aplikasi pengirim. Setelah perintah ini, konten tidak akan dimuat lagi dan mediaSessionId akan dibatalkan.
| Nama | Jenis | Deskripsi |
|---|---|---|
| mediaSessionId | bilangan bulat | ID sesi media untuk konten yang akan dihentikan |
| requestId | bilangan bulat | ID permintaan, untuk menghubungkan permintaan dan respons |
| jenis | string | STOP (hanya nilai) |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi pengirim |
| Respons | Pemicu | Siaran | Error |
|---|---|---|---|
| Tidak ada | Perubahan status penerima | Pesan Perubahan Status Media | Status Pemutar Tidak Valid |
Putar
Memulai pemutaran konten yang dimuat dengan panggilan muat, pemutaran dilanjutkan dari posisi waktu saat ini.
| Nama | Jenis | Deskripsi |
|---|---|---|
| mediaSessionId | bilangan bulat | ID sesi media untuk konten yang akan diputar |
| requestId | bilangan bulat | ID permintaan, untuk menghubungkan permintaan dan respons |
| jenis | string | PLAY (hanya nilai) |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi pengirim |
| Respons | Pemicu | Siaran | Error |
|---|---|---|---|
| Tidak ada | Perubahan status penerima | Pesan Perubahan Status Media | Status Pemutar Tidak Valid |
Mendapatkan Status
Mengambil status media.
| Nama | Jenis | Deskripsi |
|---|---|---|
| mediaSessionId | bilangan bulat | opsional ID sesi media dari media yang status medianya harus ditampilkan. Jika tidak ada yang diberikan, status untuk semua ID sesi media akan diberikan. |
| requestId | bilangan bulat | ID permintaan, untuk menghubungkan permintaan dan respons |
| jenis | string | GET_STATUS (hanya nilai) |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi pengirim |
| Respons | Pemicu | Siaran | Error |
|---|---|---|---|
| Pesan MediaStatus kepada pengirim yang memintanya | Tidak ada | Tidak ada | Tidak ada |
SetVolume
Menetapkan volume streaming media. Digunakan untuk efek memudar/memudar pada streaming media. (Catatan: volume penerima diubah menggunakan pengirim Web setVolume.) Volume streaming tidak boleh digunakan bersama dengan penggeser volume atau tombol volume untuk mengontrol volume perangkat. Perubahan volume streaming tidak akan memicu UI apa pun di penerima.
| Nama | Jenis | Deskripsi |
|---|---|---|
| mediaSessionId | bilangan bulat | ID Sesi Media untuk media yang volume streaming-nya diubah |
| requestId | bilangan bulat | ID permintaan, untuk menghubungkan permintaan dan respons |
| jenis | string | VOLUME (hanya nilai) |
| volume | Volume | Volume streaming |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi pengirim |
| Respons | Pemicu | Siaran | Error |
|---|---|---|---|
| Tidak ada | Perubahan status penerima | Pesan Perubahan Status Media | Status Pemutar Tidak Valid |
Pesan dari penerima ke pengirim
Penerima mengirimkan dua jenis pesan:
- Error: Pesan unicast dikirim saat ada respons error terhadap permintaan pengirim.
- Status: Siarkan pesan.
- Konsekuensi dari tindakan yang dimulai pengirim. Akan berisi requestId permintaan yang menyebabkan perubahan.
- Spontan: Misalnya, karena perubahan yang dipicu oleh aplikasi penerima. RequestId akan menjadi 0.
Error: Status Pemutar Tidak Valid
Dikirim saat permintaan oleh pengirim tidak dapat dipenuhi karena pemutar tidak dalam status yang valid. Misalnya, jika aplikasi belum membuat elemen media.
| Nama | Jenis | Deskripsi |
|---|---|---|
| requestId | bilangan bulat | ID permintaan yang menyebabkan error ini |
| jenis | string | INVALID_PLAYER_STATE (hanya nilai) |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi penerima |
Error: Gagal Memuat
Dikirim saat permintaan pemuatan gagal. Status pemutar akan menjadi IDLE.
| Nama | Jenis | Deskripsi |
|---|---|---|
| requestId | bilangan bulat | ID permintaan yang menyebabkan error ini |
| jenis | string | LOAD_FAILED (satu-satunya nilai) |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi penerima |
Error: Pemuatan Dibatalkan
Dikirim saat permintaan pemuatan dibatalkan (permintaan pemuatan kedua diterima).
| Nama | Jenis | Deskripsi |
|---|---|---|
| requestId | bilangan bulat | ID permintaan yang menyebabkan error ini |
| jenis | string | LOAD_CANCELLED (hanya nilai) |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi penerima |
Error: Permintaan Tidak Valid
Dikirim saat permintaan tidak valid (misalnya, jenis permintaan tidak diketahui).
| Nama | Jenis | Deskripsi |
|---|---|---|
| requestId | bilangan bulat | ID permintaan yang menyebabkan error ini |
| jenis | string | INVALID_REQUEST (hanya nilai) |
| alasan | Enum (string) | Nilai:
|
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi penerima |
Status media
Dikirim setelah perubahan status atau setelah permintaan status media. Hanya objek MediaStatus yang berubah atau diminta yang akan dikirim.
| Nama | Jenis | Deskripsi |
|---|---|---|
| requestId | bilangan bulat | ID yang digunakan untuk menghubungkan respons status ini dengan permintaan yang memulainya atau 0 jika pesan status bersifat spontan (tidak dipicu oleh permintaan pengirim). Aplikasi pengirim akan membuat ID permintaan unik dengan memilih angka acak dan terus meningkatkannya (tidak akan menggunakan 0). |
| jenis | string | MEDIA_STATUS (hanya nilai) |
| status | MediaStatus[] | Array objek Status Media. CATATAN: elemen media di MediaStatus hanya akan ditampilkan jika telah berubah. |
| customData | objek | opsional Blob data khusus aplikasi yang ditentukan oleh aplikasi penerima |