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:
- menggunakan intersep pesan
LOAD
di aplikasi Penerima Web. (direkomendasikan) - 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 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
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
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:
- Tetapkan Jenis Streaming - Tandai streaming sebagai live stream.
- Menambahkan Data Panduan Program - Tetapkan waktu mulai dan durasi di objek
MediaMetadata
. - 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
.