Live Streaming

SDK Cast menyertakan API bawaan untuk mendukung konten live. Ini mencakup UI unik dan fleksibel, ditambah dengan API yang memungkinkan developer menciptakan pengalaman live yang kaya hanya dengan beberapa baris kode. Live API mendukung tampilan waktu mulai dan waktu berakhir, metadata program, kontrol DVR, dan jendela yang dapat dicari.

Panduan ini menunjukkan cara mengonfigurasi streaming ke API Live, termasuk contoh kode dan metadata untuk mengonfigurasi skenario Live core, beserta screenshot yang menunjukkan tampilan setiap skenario.

Prasyarat

Anda harus memahami dasar-dasar penerapan Penerima Web sebelum meninjau panduan ini. Selain itu, untuk menjalankan contoh kode, Anda memerlukan akses ke live stream yang sesuai dengan salah satu jenis media yang didukung untuk Cast. Secara umum, fitur Live mendukung konfigurasi live stream standar untuk media yang didukung.

Istilah berikut digunakan di seluruh panduan:

  • Jendela Seekable - Rentang live stream yang dapat dicari pengguna di dalamnya.
  • Live Edge - Bagian terbaru live stream yang tersedia untuk pemutar.
  • Play Head - Stempel waktu UI untuk posisi pemutaran saat ini.

Mentransmisikan live stream

Ada dua cara untuk mengonfigurasi Web Receiver SDK dalam menggunakan Live API untuk konten:

  1. menggunakan intersep pesan LOAD di aplikasi Penerima Web. (direkomendasikan)
  2. menggunakan permintaan pemuatan yang dibuat sisi pengirim atau penerima.

Interseptor menyediakan objek LoadRequestData yang berisi semua metadata penting tentang permintaan pemuatan. Untuk menunjukkan bahwa permintaan pemuatan ditujukan untuk live stream, cukup tetapkan streamType pada objek mediaInformation ke StreamType.LIVE. MediaInformation.duration harus -1 karena instance pemain bertanggung jawab untuk menghitungnya saat kontennya LIVE.

/*
* This interceptor is called before your content is loaded by a Cast device
*/
playerManager.setMessageInterceptor(
   cast.framework.messages.MessageType.LOAD,
   request => { /* cast.framework.messages.LoadRequestData */
       request.media.streamType = cast.framework.messages.StreamType.LIVE;
   return request;
});

Menambahkan data panduan program

Live stream, terutama live stream yang berjalan lama seperti saluran TV, dapat menampilkan metadata panduan/program di layar berdasarkan posisi pemutaran saat ini dalam live stream. Penyedia konten sangat disarankan untuk menyertakan metadata pemrograman dalam aplikasi Penerima Web mereka untuk pengalaman pengguna akhir yang lebih baik.

Anda dapat mengonfigurasi data panduan awal untuk streaming di intersepsi pesan LOAD, dengan cara yang sama seperti yang kami tunjukkan bahwa streaming adalah live stream dalam contoh sebelumnya. Setiap bagian atau program dalam live stream direpresentasikan sebagai objek MediaMetadata, yang kemudian disimpan dalam antrean. Ada class MediaMetadata yang berbeda untuk jenis program yang berbeda—misalnya, TvShowMediaMetadata, MovieMediaMetadata, MusicTrackMediaMetadata, dll.

Dalam cuplikan kode berikut, kita menggunakan objek MediaMetadata untuk menentukan waktu mulai setiap acara dengan Stempel Waktu Unix dengan properti sectionStartAbsoluteTime. Durasi program direpresentasikan dalam detik.

// The metadata for a single TV show
const currentShow = new cast.framework.messages.TvShowMediaMetadata();
currentShow.episode = 15;
currentShow.seriesTitle = 'The Odyssey';
currentShow.title = 'Scylla and Charybdis';
currentShow.sectionStartAbsoluteTime = toUnixTimestamp('9:00 PM');
currentShow.sectionDuration = HOUR_IN_SECONDS;

const previousShow = new ...;
const nextShow = new ...;

const containerMetadata = new cast.framework.messages.ContainerMetadata();
containerMetadata.title = 'My TV Channel';
containerMetadata.sections = [previousShow, currentShow, nextShow];

playerManager.getQueueManager().setContainerMetadata(containerMetadata);

Jangkauan live yang dapat dicari

SDK Cast menyertakan elemen dan kontrol UI yang memungkinkan pengguna memindahkan playhead dalam streaming menggunakan Pengontrol yang Diperluas atau kontrol sentuh pada perangkat yang mendukung sentuhan.

LiveSeekableRange mewakili rentang waktu dalam aliran data yang dapat dicari pengguna. Di Penerima Web, Anda dapat mengakses informasi tentang rentang yang dapat dicari melalui PlayerManager.getLiveSeekableRange(), yang menampilkan objek LiveSeekableRange. Properti utama pada objek yang perlu diperhatikan adalah:

  • start — waktu mulai (dalam detik) rentang berdasarkan relatif terhadap awal streaming dalam hitungan detik.
  • end — waktu maksimum yang memungkinkan (dalam detik) yang dapat dicari pemain, berdasarkan segmen yang tersedia, relatif terhadap awal streaming.
  • isMovingWindow — nilai boolean yang menunjukkan apakah rentang yang dapat dicari berpindah (yaitu segmen lama dihapus dari manifes) dengan aliran, harus berupa true untuk semua live stream.
  • isLiveDone — nilai boolean yang menunjukkan apakah live stream telah selesai, yang berarti tidak ada segmen baru yang dihasilkan.

Ukuran rentang yang dapat dicari, yang direpresentasikan sebagai waktu antara start dan end, ditentukan oleh jumlah segmen yang tersedia di aliran dan akan dipindahkan dengan aliran data. Misalnya, jika di awal streaming, rentang yang dapat dicari adalah {start:0, end: 600, isMovingWindow: false, isLiveDone: false}, sepuluh detik setelah streaming dimulai, rentangnya bisa menjadi {start: 10, end: 610, isMovingWindow: true, isLiveDone: false}. Penting untuk diperhatikan bahwa waktu mulai dan waktu berakhir dalam rentang yang dapat dicari diperbarui berdasarkan waktu yang diperlukan untuk menghasilkan segmen baru. Jadi, jika panjang segmen untuk streaming Anda adalah 10 detik, waktu mulai dan berakhir juga akan diperbarui setiap 10 detik.

Nonaktifkan pencarian

Untuk menonaktifkan pencarian dalam streaming, Anda harus menghapus fungsionalitas pencarian dari perintah media yang didukung di Web Receiver:

// disable seeking in the LOAD messageInterceptor
playerManager.removeSupportedMediaCommands(cast.framework.messages.Command.SEEK, true);

Menghapus perintah media yang didukung untuk sinyal SEEK ke aplikasi pengirim dan layar sentuh untuk menonaktifkan pencarian, tetapi tidak menonaktifkan perintah suara seperti 'Ok google, mencari mundur 30 detik.' Lihat panduan perintah media yang didukung dengan suara untuk detail tentang cara menonaktifkan perintah media untuk suara.

Acara framework live

Dua peristiwa, LIVE_ENDED dan LIVE_IS_MOVING_WINDOW_CHANGED, disertakan dalam Live API. Kedua peristiwa diteruskan ke objek LiveStatusEvent, yang berisi rentang aktif yang dapat dicari saat ini.

Peristiwa Deskripsi
LIVE_ENDED Dipicu saat live stream berakhir. Pada tahap ini, nilai end di LiveSeekableRange akan berhenti diperbarui; pengguna masih dapat melihat konten dalam rentang yang dapat dicari secara langsung.
LIVE_IS_MOVING_WINDOW_CHANGED Dipicu saat rentang live stream yang dapat dicari berubah dari jendela tetap menjadi jendela bergerak, atau sebaliknya. Untuk live stream, hal ini akan terjadi saat pemutar mendeteksi bahwa manifes menghapus segmen sebelumnya.

Skenario live stream

Ada delapan jenis skenario yang memungkinkan untuk live streaming, yang masing-masing dikonfigurasi dengan menetapkan tiga setelan inti:

  • Streaming memiliki waktu mulai
  • Streaming memiliki waktu berakhir
  • Pengguna diizinkan untuk mencari di dalam jendela pencarian live stream

Lihat Menambahkan Data Panduan Program untuk mengetahui cara mengonfigurasi nilai tersebut.

Berikut adalah deskripsi dan screenshot skenario yang didukung oleh Live API. Variabel T1 dan T2 masing-masing digunakan untuk mewakili stempel waktu di kiri dan kanan UI.

Waktu mulai Waktu berakhir Dapat dicari T1 T2
Skenario 1 Tidak Tidak Tidak Putar Kepala Tidak Ditampilkan
Skenario 2 Tidak Tidak Ya Play Head Tidak Ditampilkan
Skenario 3 Tidak Ya Tidak Play Head Tidak Ditampilkan
Skenario 4 Tidak Ya Ya Play Head Tidak Ditampilkan
Skenario 5 Ya Tidak Tidak Tampilkan Waktu Mulai Play Head
Skenario 6 Ya Tidak Ya Tampilkan Waktu Mulai Play Head
Skenario 7 Ya Ya Tidak Tampilkan Waktu Mulai Tampilkan Waktu Berakhir
Skenario 8 Ya Ya Ya Tampilkan Waktu Mulai Tampilkan Waktu Berakhir

Skenario satu

Waktu mulai Waktu berakhir Dapat dicari T1 T2
Tidak Tidak Tidak Putar kepala Tidak Ditampilkan

Skenario satu tidak memiliki waktu mulai atau berakhir dan pengguna tidak dapat mencari dalam aliran. Saat pengguna menghentikan streaming, pemutaran akan dilanjutkan dari tepi langsung, bukan dari lokasi streaming dijeda.

Skenario tujuh

TV yang Menampilkan UI Live Chromecast untuk Skenario 7 dengan Waktu Jam Ponsel yang menampilkan UI Live untuk Skenario 7 dengan Waktu Jam

Waktu mulai Waktu berakhir Dapat dicari T1 T2
Ya Ya Tidak Putar Kepala Durasi Program

Skenario tujuh memiliki waktu mulai dan waktu berakhir tetapi tidak dapat dicari. Kedua stempel waktu di UI, T1 dan T2, masing-masing mewakili waktu pemutaran saat ini dan total durasi program. Jika pengguna menjeda/melanjutkan pemutaran, streaming akan dilanjutkan di tepi live stream. Pada contoh di atas, bagian merah panel penelusuran mewakili bagian aliran data sejak pengguna mulai menonton.

Skenario delapan

TV yang Menampilkan UI Live Chromecast untuk Skenario 8 dengan Waktu Jam Ponsel yang menampilkan UI Live untuk Skenario 8 dengan Waktu Jam

Waktu mulai Waktu berakhir Dapat dicari T1 T2
Ya Ya Ya Putar Kepala Durasi Program

Skenario tujuh memiliki waktu mulai, waktu berakhir, dan dapat dicari. Kedua stempel waktu di UI, T1 dan T2, masing-masing mewakili waktu pemutaran saat ini dan total durasi program. Jika pengguna menjeda/melanjutkan pemutaran, streaming akan dilanjutkan pada saat dijeda jika berada dalam jendela yang dapat dicari—area berwarna merah pada panel pencarian mewakili tempat pengguna dapat mencari kembali dan area dengan warna putih mewakili tempat yang dapat mereka tuju.

Mengonfigurasi skenario

Mengonfigurasi streaming sebagai Skenario Live spesifik dilakukan dalam tiga bagian:

  1. Tetapkan Jenis Streaming - Tandai streaming sebagai live stream.
  2. Menambahkan Data Panduan Program - Tetapkan waktu mulai dan durasi di objek MediaMetadata.
  3. Mengonfigurasi Fungsi Pencarian - Aktifkan atau nonaktifkan pencarian.

Perilaku pemutaran

Saat dijeda, UI akan terus memperbarui metadata pemutarannya—termasuk kepala pemutaran dan waktu edge live. Setelah dimulainya kembali aliran data, ada beberapa perilaku yang perlu diketahui berdasarkan konfigurasi streaming.

Aliran yang dapat dicari

Setelah dimulainya kembali streaming yang dapat dicari:

  • Tepi langsung harus diupdate ke lokasi live dan rentang yang dapat dicari akan disesuaikan.
  • Jika titik pemutaran melompat melewati acara saat ini, scrub bar akan diperbarui dengan metadata dari acara baru (termasuk waktu mulai dan waktu berakhir jika tersedia).
  • Jika jendela yang dapat dicari memiliki panjang 'X', rentang yang dapat dicari akan diperluas hingga maksimum 'X', atau ke awal tampilan, mana saja yang lebih kecil.
  • Jika pengguna dijeda cukup lama sehingga waktu saat ini tidak lagi berada dalam jendela yang dapat dicari, aliran akan dilanjutkan pada titik paling awal (paling kiri) dari jendela yang dapat dicari.

Cari LiveSeekableRange.end untuk melanjutkan pemutaran di edge live setelah membatalkan jeda.

let playerManager = cast.framework.CastReceiverContext.getInstance().getPlayerManager();
// Intercept the message to PLAY
playerManager.setMessageInterceptor(cast.framework.messages.MessageType.PLAY, (requestData) => {
  ...
  if (playerManager.getLiveSeekableRange()) {
    // Resume playback at the live edge
    playerManager.seek(playerManager.getLiveSeekableRange().end);
  } else {
    return requestData;
  }
  ...
});

Streaming yang tidak dapat dicari

Setelah dimulainya kembali streaming yang tidak dapat dicari:

  • Dalam hal ini, pemutaran akan dilanjutkan di edge live.
  • Jika tepi langsung melompat melewati acara saat ini, scrub bar harus diperbarui dengan metadata dari acara baru (termasuk waktu mulai dan waktu berakhir jika tersedia).

Perubahan platform API & amp; menyesuaikan UI Live

Cast SDK memiliki dukungan bawaan untuk membuat antarmuka pengguna kustom, bukan menggunakan UI siap pakai. Namun, penting untuk mengikuti Checklist Desain UX Cast saat menyesuaikan antarmuka.

Penerima Web

Pada Penerima Web, PlayerData menyertakan kolom berikut untuk memungkinkan developer memperluas antarmuka kustom untuk live stream:

  • isLive - flag yang menunjukkan apakah streaming saat ini merupakan live stream, bukan VOD.
  • liveSeekableRange - rentang yang dapat dicari untuk ditampilkan di layar yang membatasi jendela DVR.
  • mediaStartAbsoluteTime - saat bagian dimulai dalam waktu absolut (UNIX Epoch).
  • sectionStartTimeInMedia - waktu mulai bagian dalam detik relatif terhadap waktu mulai media.
  • sectionDuration - durasi bagian dalam detik.

Pastikan juga untuk mempertimbangkan dua peristiwa langsung saat menyesuaikan UI.

Android SDK

Sebagai bagian dari fungsi Live, penggunaan Widget Seekbar Android di UIMediaController tidak digunakan lagi. Sebagai gantinya, gunakan CastSeekBar.