Halaman ini menjelaskan cara membuat klip video on demand (VOD) dari live stream menggunakan Live Stream API. Klip VOD terdiri dari file manifes HLS dan file segmen yang telah disimpan dari live stream. Hanya manifes HLS yang didukung.
Perbedaan antara klip VOD dan sesi DVR
Klip VOD (juga dikenal sebagai klip saluran) mirip dengan sesi DVR dengan perbedaan utama berikut:
- Sesi DVR:
- API menyimpan manifes DVR di lokasi yang sama dengan segmen live stream sehingga tidak ada penyalinan tambahan ke Cloud Storage. Manifes DVR mirip dengan manifes live stream, tetapi lebih panjang. Saat periode retensi berakhir, manifes akan dihapus beserta file segmen.
- Anda dapat membuat sesi DVR untuk konten yang lalu, saat ini, dan mendatang. Misalnya, sesi DVR dapat mengikuti live stream, atau Anda dapat menjadwalkan sesi DVR untuk dimulai dan dihentikan pada waktu mendatang.
- Kasus penggunaan umum untuk sesi DVR adalah mendukung kemampuan DVR untuk acara live streaming. Misalnya, penonton dapat bergabung ke live stream satu jam setelah dimulai dan melihat konten dengan jeda satu jam (atau melewati sebagian konten).
- Klip channel:
- Live Stream API menyalin manifes klip dan file segmen terkait ke direktori yang ditentukan pengguna sehingga tidak dihapus saat periode retensi berakhir. Anda memiliki kontrol penuh atas klip.
- Hanya konten sebelumnya yang dapat dipotong. Klip live dan penjadwalan klip mendatang tidak didukung.
- Kasus penggunaan umum untuk klip adalah mengarsipkan live stream, sehingga live stream tersedia sebagai file VOD tanpa batas waktu.
Untuk informasi selengkapnya tentang sesi DVR, lihat Membuat sesi DVR.
Menyiapkan Google Cloud project dan autentikasi
Jika Anda belum membuat projectGoogle Cloud dan kredensial, lihat Sebelum memulai.Membuat endpoint input
Untuk membuat endpoint input, gunakan metode
projects.locations.inputs.create.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER: nomor project Google Cloud Anda; ini terletak di kolom Project number di halaman IAM SettingsLOCATION: lokasi tempat membuat endpoint input; gunakan salah satu region yang didukungMenampilkan lokasius-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
INPUT_ID: ID yang ditentukan pengguna untuk endpoint input baru yang akan dibuat (tempat Anda mengirim aliran input). Nilai ini harus terdiri dari 1-63 karakter, diawali dan diakhiri dengan[a-z0-9], dan dapat berisi tanda hubung (-) di antara karakter. Misalnya,my-input.
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
"createTime": CREATE_TIME,
"target": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID",
"verb": "create",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": false
}
Perintah ini membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak progres permintaan. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.
Mendapatkan detail endpoint input
Untuk mendapatkan detail endpoint input, gunakan
metode projects.locations.inputs.get.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER: nomor project Google Cloud Anda; ini terletak di kolom Project number di halaman IAM SettingsLOCATION: lokasi endpoint input Anda berada; gunakan salah satu region yang didukungMenampilkan lokasius-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
INPUT_ID: ID yang ditentukan pengguna untuk endpoint input
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID",
"createTime": CREATE_TIME,
"updateTime": UPDATE_TIME,
"type": "RTMP_PUSH",
"uri": "INPUT_STREAM_URI", # For example, "rtmp://1.2.3.4/live/b8ebdd94-c8d9-4d88-a16e-b963c43a953b",
"tier": "HD"
}
Temukan kolom uri dan salin INPUT_STREAM_URI yang ditampilkan untuk digunakan nanti di bagian Kirim aliran input.
Membuat saluran
Untuk membuat saluran, gunakan
metode
projects.locations.channels.create. Contoh berikut membuat saluran yang menghasilkan live stream HLS. Live stream terdiri dari satu rendering definisi tinggi (1280x720).
Untuk mengaktifkan pembuatan klip VOD, tambahkan objek retentionConfig ke konfigurasi channel.
"retentionConfig": {
"retentionWindowDuration": {
"seconds": 86400
}
},
Jika retensi diaktifkan untuk channel live stream, segmen dan manifes
live stream akan dipertahankan untuk membuat klip VOD. Objek
retentionWindowDuration menentukan
durasi penyimpanan output live stream setelah diupload ke
Cloud Storage. Periode retensi dimulai pada saat segmen
dibuat di Cloud Storage.
Periode retensi dibatasi hingga 30 hari. Setelah periode retensi berlalu, file segmen live stream dan file manifes akan otomatis dihapus dari Cloud Storage. (Manifes klip VOD dan file segmen terkaitnya tidak otomatis dihapus.) Anda tidak dapat membuat klip VOD menggunakan segmen yang dihapus. Proses penghapusan bersifat asinkron dan mungkin memerlukan waktu hingga 24 jam untuk diselesaikan.
Tentukan kunci untuk manifes guna mengaktifkan pembuatan klip VOD. Anda merujuk ke kunci ini saat benar-benar membuat klip. Hanya manifes HLS yang didukung.
"manifests": [
{
...
"key": "manifest_hls"
}
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER: nomor project Google Cloud Anda; ini terletak di kolom Project number di halaman IAM SettingsLOCATION: lokasi untuk membuat channel; gunakan salah satu region yang didukungMenampilkan lokasius-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
CHANNEL_ID: ID yang ditentukan pengguna untuk channel yang akan dibuat; nilai ini harus terdiri dari 1-63 karakter, diawali dan diakhiri dengan[a-z0-9], dan dapat berisi tanda hubung (-) di antara karakterINPUT_ID: ID yang ditentukan pengguna untuk endpoint inputBUCKET_NAME: nama bucket Cloud Storage yang Anda buat untuk menyimpan file manifes dan segmen live stream
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
"createTime": CREATE_TIME,
"target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
"verb": "create",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": false
}
Perintah ini membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak progres permintaan. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.
Memulai channel
Untuk memulai saluran, gunakan
metode projects.locations.channels.start.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER: nomor project Google Cloud Anda; ini terletak di kolom Project number di halaman IAM SettingsLOCATION: lokasi tempat channel Anda berada; gunakan salah satu region yang didukungMenampilkan lokasius-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
CHANNEL_ID: ID yang ditentukan pengguna untuk saluran
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
"createTime": CREATE_TIME,
"target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID",
"verb": "start",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": false
}
Perintah ini membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak progres permintaan. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.
Mengirim aliran input
Buka jendela terminal baru. Jalankan perintah berikut, menggunakan INPUT_STREAM_URI dari bagian Get input endpoint details:
ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
-acodec aac -vcodec h264 -f flv INPUT_STREAM_URI
Membuat klip VOD
Untuk membuat klip VOD, gunakan
metode projects.locations.channels.clips.create.
Gunakan kolom outputUri untuk menentukan lokasi penyimpanan
file klip dan manifes klip di Cloud Storage. Anda dapat menggunakan bucket yang sama dengan yang Anda buat untuk manifes live stream atau bucket yang berbeda. Anda juga dapat menambahkan nama direktori ke nama bucket (misalnya, my-bucket/vod-clip).
Gunakan kolom manifestKey dalam
array clipManifests untuk menentukan manifes tempat menyimpan
klip. Dalam contoh konfigurasi saluran di halaman ini, kunci ini ditetapkan ke manifest_hls.
Gunakan kolom outputType untuk menentukan salah satu format output clip
yang didukung: MANIFEST (default) atau MP4. Dalam contoh konfigurasi saluran di
halaman ini, kolom ini ditetapkan ke MANIFEST, yang menghasilkan manifes VOD
yang mirip dengan output saluran.
Anda dapat menggabungkan beberapa bagian waktu dari live stream menjadi satu klip
dengan menambahkan objek timeSlice ke array slices.
"outputUri": "gs://my-bucket",
"clipManifests":[
{
"manifestKey": "manifest_hls"
}
],
"slices":[
{
"timeSlice": {
"markinTime": "2022-07-08T23:03:20.000Z",
"markoutTime": "2022-07-08T23:04:20.000Z"
}
},
{
"timeSlice": {
"markinTime": "2022-07-08T23:05:20.000Z",
"markoutTime": "2022-07-08T23:06:20.000Z"
}
}
]
Perhatikan hal berikut:
- Setiap klip harus berisi minimal satu
timeSlicedislices. - Kolom
clipManifests.manifestKeyharus merujuk ke manifes HLS yang ditentukan di saluran induk klip. Jika permintaan pembuatan tugas clip berhasil, URI manifes klip yang dihasilkan akan ditampilkan di kolomclipManifests.outputUri. URI ini berada dalam jalur yang ditentukan oleh kolomoutputUriklip. - Array
clipManifestshanya mendukung satu manifes per permintaan. Jika ingin membuat beberapa manifes untuk tugas klip yang sama, Anda harus membagi manifes menjadi beberapa permintaan tugas klip. - Slice klip harus homogen; setiap elemen harus berjenis
timeSlice. - Kumpulan objek
timeSlicetidak boleh tumpang-tindih dan dalam urutan kronologis.markinTimeharus lebih awal darimarkoutTimedi setiaptimeSlice. - Jika
markinTimeterbaru dari klip lebih awal dari waktu mulai channel atau awal periode retensi, waktu tanda masuk akan ditetapkan ke waktu yang lebih lambat dari keduanya. - Jika
markoutTimeterbaru dari klip lebih lambat dari waktu berhenti channel,markoutTimeakan ditetapkan ke waktu berhenti channel. JikamarkoutTimeterbaru dari klip lebih lambat dari waktu jam dinding sistem saat ini, makamarkoutTimeakan ditetapkan ke waktu saat API benar-benar memulai tugas pemotongan. - Untuk klip dengan jenis output
MANIFEST, durasi maksimumnya adalah 24 jam. Untuk klip dengan jenis outputMP4, durasi maksimumnya adalah 6 jam.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER: nomor project Google Cloud Anda; ini terletak di kolom Project number di halaman IAM SettingsLOCATION: lokasi tempat channel Anda berada; gunakan salah satu region yang didukungMenampilkan lokasius-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
CHANNEL_ID: ID yang ditentukan pengguna untuk saluranCLIP_ID: ID yang ditentukan pengguna untuk klip VODMARK_IN_TIME: waktu epoch Unix tanda masuk dalam manifes live stream asli; menggunakan stempel waktu dalam format "Zulu" UTC RFC3339 (misalnya,2014-10-02T15:01:23Z)MARK_OUT_TIME: waktu epoch Unix yang ditandai dalam manifes live stream asli; menggunakan stempel waktu dalam format "Zulu" UTC RFC3339 (misalnya,2014-10-02T15:01:23Z)BUCKET_NAME: nama bucket Cloud Storage yang Anda buat untuk menyimpan manifes klip VOD dan file segmen; Anda dapat menggunakan bucket yang sama dengan yang Anda buat untuk manifes live stream atau bucket yang berbeda; Anda juga dapat menambahkan nama direktori ke nama bucket (misalnya,my-bucket/vod-clip)
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/operations/OPERATION_ID",
"metadata": {
"@type": "type.googleapis.com/google.cloud.video.livestream.v1.OperationMetadata",
"createTime": CREATE_TIME,
"target": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID/clips/CLIP_ID",
"verb": "create",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": false
}
Perintah ini membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak progres permintaan. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.
Mendapatkan klip VOD
Untuk mendapatkan klip VOD, gunakan metode
projects.locations.channels.clips.get.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER: nomor project Google Cloud Anda; ini terletak di kolom Project number di halaman IAM SettingsLOCATION: lokasi tempat channel Anda berada; gunakan salah satu region yang didukungMenampilkan lokasius-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
CHANNEL_ID: ID yang ditentukan pengguna untuk saluranCLIP_ID: ID yang ditentukan pengguna untuk klip VOD
Untuk mengirim permintaan Anda, perluas salah satu opsi berikut:
Anda akan melihat respons JSON seperti berikut:
{
"name": "projects/PROJECT_NUMBER/locations/LOCATION/channels/CHANNEL_ID/clips/CLIP_ID",
"createTime": CREATE_TIME,
"startTime": START_TIME,
"updateTime": UPDATE_TIME,
"state": "SUCCEEDED",
"outputUri": "gs://BUCKET_NAME",
"slices": [
{
"timeSlice": {
"markinTime": "MARK_IN_TIME",
"markoutTime": "MARK_OUT_TIME"
}
}
],
"features": {},
"clipManifests": [
{
"manifestKey": "manifest_hls",
"outputUri": "gs://BUCKET_NAME/main.m3u8"
}
]
}
Manifes yang dihasilkan berada di URI yang ditentukan di
kolom clipManifests.outputUri. Nama file
manifes sama dengan nilai kolom
manifests.fileName saluran induk.
Respons harus berisi hal berikut:
{
...
"state": "SUCCEEDED"
...
}
Hanya 1.000 data tugas klip terbaru per saluran yang tersedia
menggunakan
metode
projects.locations.channels.clips.get. Semua data tugas klip yang lebih lama dari batas akan dihapus. Anda harus mengelola file klip yang dihasilkan
yang ditentukan oleh
outputUri;
Live Stream API tidak menghapus file ini dari Cloud Storage.
Memverifikasi konten bucket
Buka bucket Cloud Storage seperti yang ditentukan di kolom outputUri klip. Pastikan folder tersebut berisi file dan direktori berikut:
- Manifes level teratas untuk klip dengan nama yang sama seperti
manifests.fileNameyang ditentukan dalam konfigurasi channel (misalnya,main.m3u8); Anda dapat memutar manifes ini menggunakan pemutar media online - Direktori untuk setiap
muxStreams.keyyang ditentukan di saluran (misalnya,mux_video_ts)- Playlist untuk klip (misalnya,
index-1.m3u8) - Direktori yang diberi nama menggunakan format
YYYYMMDDTHHMMSSZ(misalnya,20220708T203309Z/); direktori ini menyimpan segmen klip VOD- Beberapa file
segment-number.tssegmen yang membentuk klip VOD
- Beberapa file
- Playlist untuk klip (misalnya,
Memutar klip VOD
Untuk memutar file media yang dihasilkan di Shaka Player, selesaikan langkah-langkah berikut:
- Buat bucket Cloud Storage yang Anda buat dapat dibaca oleh publik.
- Untuk mengaktifkan cross-origin resource
sharing (CORS) di bucket Cloud Storage, lakukan tindakan berikut:
- Buat file JSON yang berisi hal berikut:
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ] -
Jalankan perintah berikut setelah mengganti
JSON_FILE_NAMEdengan nama file JSON yang Anda buat di langkah sebelumnya:gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- Buat file JSON yang berisi hal berikut:
- Di bucket Cloud Storage, temukan file yang dihasilkan. Klik Copy URL di kolom Public access file.
- Buka Shaka Player, pemutar live stream online.
- Klik Konten Kustom di menu navigasi atas.
- Klik tombol +.
Tempelkan URL publik file ke kotak Manifest URL.

Ketik nama di kotak Name.
Klik Simpan.
Klik Putar.
Anda akan melihat pola pengujian diputar sebagai live stream.
Peristiwa jeda iklan dan slate
Jika Anda membuat peristiwa jeda iklan untuk live stream, klip VOD tidak akan berisi iklan. API membuat playlist dengan titik henti sementara iklan yang diganti dengan tag berikut:
#EXT-X-CUE-OUT: AD_BREAK_DURATION
#EXT-X-CUE-IN
Slate yang muncul di awal atau akhir klip VOD akan otomatis dihapus. Slate yang muncul dalam streaming, yang dikelilingi oleh konten live stream, akan dipertahankan dalam klip VOD yang dihasilkan.