Live Streaming

SDK Cast menyertakan API bawaan untuk mendukung konten live. Hal ini mencakup UI siap pakai yang fleksibel, ditambah dengan API yang memungkinkan developer membuat pengalaman langsung hanya dengan beberapa baris kode. Live API mendukung tampilan waktu mulai dan berakhir, metadata program, kontrol DVR, dan periode yang dapat dicari.

Panduan ini menunjukkan cara mengonfigurasi streaming ke Live API, termasuk contoh kode dan metadata untuk mengonfigurasi skenario Live streaming inti, beserta {i>screenshot<i} yang menunjukkan seperti apa setiap skenario.

Prasyarat

Pemahaman tentang dasar-dasar penerapan Penerima Web diperlukan sebelum meninjau ini kami. Selain itu, untuk menjalankan contoh kode, Anda memerlukan akses ke feed 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 yang Dapat Dicari - Rentang live stream yang dapat dicari pengguna.
  • Live Edge - Bagian terbaru dari 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 agar dapat menggunakan Live API untuk konten:

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

Intersepsi menyediakan sebuah LoadRequestData yang berisi semua metadata penting tentang permintaan pemuatan. Kepada yang menunjukkan bahwa permintaan pemuatan ditujukan untuk live stream, cukup setel streamType di mediaInformation objek ke StreamType.LIVE. MediaInformation.duration harus -1 karena instance pemutar adalah bertanggung jawab untuk menghitungnya jika konten tersebut adalah 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 streaming berdurasi panjang seperti channel TV, dapat menampilkan panduan di layar/metadata pemrograman berdasarkan pemutaran saat ini dalam live stream. Penyedia konten sangat disarankan untuk menyertakan memprogram metadata di aplikasi Penerima Web untuk pengguna akhir yang lebih baik pengalaman yang lancar bagi developer.

Anda dapat mengonfigurasi data panduan awal untuk aliran data dalam pesan LOAD pencegat, sama seperti yang kami tunjukkan bahwa streaming adalah live stream di contoh sebelumnya. Masing-masing bagian atau program dalam live stream direpresentasikan sebagai MediaMetadata objek yang kemudian disimpan dalam antrean. Terdapat class MediaMetadata yang berbeda untuk berbagai jenis program, misalnya, TvShowMediaMetadata, MovieMediaMetadata, MusicTrackMediaMetadata, dll.

Dalam cuplikan kode berikut, kita menggunakan objek MediaMetadata untuk menentukan untuk setiap acara. Stempel Waktu UNIX dengan sectionStartAbsoluteTime saat ini. 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);

Rentang pencarian live

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

Tujuan LiveSeekableRange mewakili rentang waktu dalam {i>stream<i} yang dapat dicari pengguna. Pada Penerima Web, Anda dapat mengakses informasi tentang rentang yang dapat dicari melalui PlayerManager.getLiveSeekableRange(), yang mengembalikan LiveSeekableRange . Properti utama pada objek yang perlu diketahui adalah:

  • start — waktu mulai (dalam detik) rentang yang relatif terhadap di bagian awal streaming dalam hitungan detik.
  • end — waktu maksimum (dalam detik) yang dapat dicari pemain, berdasarkan segmen yang tersedia, relatif terhadap awal streaming.
  • isMovingWindow — nilai boolean yang menunjukkan apakah rentang yang dapat dicari memindahkan (yaitu segmen yang lebih lama akan dihapus dari manifes) dengan aliran data, nilai ini harus true untuk semua live stream.
  • isLiveDone — nilai boolean yang menunjukkan apakah live stream memiliki selesai, artinya tidak ada segmen baru yang dibuat.

Ukuran rentang yang dapat dicari, yang direpresentasikan sebagai waktu antara start dan end, ditentukan oleh jumlah segmen yang tersedia dalam streaming dan akan mengikuti {i>stream<i}. Misalnya, jika, pada awal aliran data, parameter rentangnya adalah {start:0, end: 600, isMovingWindow: false, isLiveDone: false}, sepuluh detik setelah streaming dimulai, streaming dapat menjadi {start: 10, end: 610, isMovingWindow: true, isLiveDone: false}. Penting untuk disimpulkan dari awal dan akhir waktu berakhir dalam rentang yang dapat dicari diperbarui berdasarkan waktu yang diperlukan untuk membuat segmen baru. Sehingga, jika durasi segmen untuk streaming Anda adalah 10 detik, waktu mulai dan waktu berakhir akan diperbarui setiap 10 detik sesuai ya.

Nonaktifkan pencarian

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

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

Menghapus perintah media yang didukung untuk sinyal SEEK bagi aplikasi pengirim dan layar sentuh untuk menonaktifkan pencarian, tetapi tidak menonaktifkan perintah suara seperti sebagai ‘Ok google, mundurkan 30 detik ke belakang’. Lihat perintah media yang didukung dengan suara panduan kami untuk mengetahui detail 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 LiveStatusEvent , yang berisi rentang pencarian live saat ini.

Acara 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 langsung.
LIVE_IS_MOVING_WINDOW_CHANGED Dipicu saat rentang yang dapat dicari pada live stream berubah dari jendela tetap ke jendela bergerak, atau sebaliknya. Untuk live stream, hal ini akan terjadi saat pemutar mendeteksi bahwa manifes menghapus segmen sebelumnya.

Skenario live stream

Ada delapan kemungkinan jenis skenario 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 yang dapat dicari live stream

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

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

Waktu mulai Waktu berakhir Dapat dicari T1 T2
Skenario 1 Tidak Tidak Tidak Kepala Putar Tidak Ditampilkan
Skenario 2 Tidak Tidak Ya Putaran Kepala Tidak Ditampilkan
Skenario 3 Tidak Ya Tidak Putaran Kepala Tidak Ditampilkan
Skenario 4 Tidak Ya Ya Putaran Kepala Tidak Ditampilkan
Skenario 5 Ya Tidak Tidak Tampilkan Waktu Mulai Putaran Kepala
Skenario 6 Ya Tidak Ya Tampilkan Waktu Mulai Putaran Kepala
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 di dalam feed. Saat pengguna menghentikan streaming, pemutaran akan dilanjutkan dari edge live tempat 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 Kepala Putar Durasi Program

Skenario tujuh memiliki waktu mulai dan waktu berakhir tetapi tidak dapat dicari. Dua di UI, T1 dan T2, mewakili waktu pemutaran saat ini dan total masing-masing. Jika pengguna menjeda/melanjutkan pemutaran, streaming akan lanjutkan di tepi live stream. Dalam contoh di atas, bagian merah dari bilah geser mewakili bagian {i>stream <i}sejak pengguna memulai 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 Kepala Putar Durasi Program

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

Mengonfigurasi skenario

Mengonfigurasi streaming sebagai Skenario Live tertentu dilakukan dalam tiga bagian:

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

Perilaku pemutaran

Saat dijeda, UI akan terus memperbarui metadata pemutarannya. mencakup waktu head pemutaran dan edge live. Setelah aliran data dilanjutkan, adalah beberapa perilaku yang harus diperhatikan yang bervariasi berdasarkan konfigurasi streaming.

Aliran data yang dapat dicari

Setelah melanjutkan streaming yang dapat dicari:

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

Cari ke LiveSeekableRange.end untuk melanjutkan pemutaran di tepi 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 melanjutkan streaming yang tidak dapat dicari:

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

Perubahan platform API & menyesuaikan UI Live

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

Penerima Web

Di Penerima Web, PlayerData menyertakan kolom berikut agar developer dapat memperluas antarmuka untuk live stream:

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

Pastikan juga untuk mempertimbangkan dua acara live saat menyesuaikan UI.

Android SDK

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