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 membuat segmen file yang telah disimpan dari {i>live stream<i}. Hanya manifes HLS didukung.
Menyiapkan autentikasi dan project Google Cloud Anda
Jika Anda belum membuat Project Google Cloud dan kredensial, lihat Sebelum memulai.Membuat endpoint input
Untuk membuat endpoint input, gunakan metode
Metode projects.locations.inputs.create
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER
: project Google Cloud Anda nomor; nomor ini terletak di kolom Project number di Halaman Setelan IAMLOCATION
: lokasi untuk membuat input endpoint; menggunakan salah satu wilayah yang didukungTampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-west4
INPUT_ID
: ID yang ditentukan pengguna untuk input baru endpoint yang akan dibuat (tujuan pengiriman stream input Anda). Nilai ini harus terdiri dari 1–63 karakter, diawali dan diakhiri dengan[a-z0-9]
, serta 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 akan membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak perkembangan permintaan Anda. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.
Mendapatkan detail endpoint input
Untuk mendapatkan detail endpoint input, gunakan metode
Metode projects.locations.inputs.get
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER
: project Google Cloud Anda nomor; nomor ini terletak di kolom Project number di Halaman Setelan IAMLOCATION
: lokasi endpoint input Anda berlokasi; menggunakan salah satu wilayah yang didukungTampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-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
, lalu salin kolom yang ditampilkan
INPUT_STREAM_URI untuk digunakan nanti
di bagian Mengirim aliran data input.
Membuat saluran
Untuk membuat channel, gunakan
projects.locations.channels.create
. Contoh berikut membuat channel yang menampilkan HLS live
feed. Live stream terdiri dari satu video definisi tinggi (1280x720)
dan berperforma tinggi.
Untuk memungkinkan pembuatan klip VOD, tambahkan
retentionConfig
ke konfigurasi saluran.
"retentionConfig": {
"retentionWindowDuration": {
"seconds": 86400
}
},
Jika retensi diaktifkan untuk suatu channel live stream, segmen dan manifesnya
file disimpan untuk
membuat klip VOD. Tujuan
Objek retentionWindowDuration
menentukan
durasi penyimpanan output live stream setelah diupload
yang sesuai di Cloud Storage. Periode retensi dimulai pada saat segmen tersebut
yang dibuat di Cloud Storage. Periode retensi data dibatasi hingga 30 hari.
Setelah periode retensi data berlalu, segmen akan otomatis dihapus dari
yang sesuai di Cloud Storage. Anda tidak dapat membuat klip VOD menggunakan segmen yang dihapus. Tujuan
proses penghapusan bersifat asinkron dan
mungkin memerlukan waktu hingga 24 jam untuk diselesaikan.
Tentukan kunci manifes untuk mengaktifkan pembuatan klip VOD. Anda merujuk ke sini saat membuat klip. Hanya manifes HLS yang didukung.
"manifests": [
{
...
"key": "manifest_hls"
}
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER
: project Google Cloud Anda nomor; nomor ini terletak di kolom Project number di Halaman Setelan IAMLOCATION
: lokasi untuk membuat saluran; menggunakan salah satu wilayah yang didukungTampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: ID yang ditentukan pengguna untuk saluran guna membuat; nilai ini harus 1-63 karakter, diawali dan diakhiri dengan[a-z0-9]
, serta dapat berisi tanda hubung (-) di antara karakterINPUT_ID
: ID yang ditentukan pengguna untuk endpoint inputBUCKET_NAME
: nama Cloud Storage bucket yang Anda buat untuk menyimpan manifes live stream dan file segmen
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 akan membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak perkembangan permintaan Anda. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.
Memulai channel
Untuk memulai channel, gunakan
Metode projects.locations.channels.start
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER
: project Google Cloud Anda nomor; nomor ini terletak di kolom Project number di Halaman Setelan IAMLOCATION
: lokasi channel Anda berlokasi; menggunakan salah satu wilayah yang didukungTampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-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 akan membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak perkembangan permintaan Anda. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.
Mengirim stream input
Buka jendela terminal baru. Jalankan perintah berikut, menggunakan INPUT_STREAM_URI dari Bagian Mendapatkan detail endpoint input:
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 manifes klip dan klip di Cloud Storage. Anda dapat menggunakan
yang Anda buat untuk manifes live stream, atau bucket lain. Anda dapat
tambahkan nama direktori ke nama bucket (misalnya,
my-bucket/vod-clip
).
Gunakan kolom manifestKey
di
Array clipManifests
untuk menentukan manifes guna menyimpan klip
dari mereka. Dalam contoh konfigurasi channel di halaman ini,
disetel ke manifest_hls
.
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 setidaknya satu
timeSlice
dislices
. - Kolom
clipManifests.manifestKey
harus mengacu pada manifes HLS yang ditentukan di channel induk klip. Jika pembuatan tugas klip berhasil, maka URI manifes klip yang dihasilkan ditampilkan dalam kolomclipManifests.outputUri
. URI ini adalah di jalur yang ditentukan oleh kolomoutputUri
klip. - Array
clipManifests
hanya mendukung satu manifes per permintaan. Jika ingin membuat beberapa manifes untuk tugas klip yang sama, maka Anda perlu membagi manifes menjadi beberapa permintaan tugas klip. - Slice klip harus homogen; setiap elemen harus berjenis
timeSlice
- Kumpulan objek
timeSlice
tidak boleh tumpang-tindih dan berada urutan kronologis.markinTime
harus lebih awal darimarkoutTime
di setiaptimeSlice
. - Jika
markinTime
klip terbaru lebih awal dari waktu mulai saluran atau awal periode retensi, lalu penandaan waktu ditetapkan ke waktu yang lebih akhir dari keduanya. - Jika
markoutTime
klip terbaru lebih lama dari {i>channel<i}-nya selesai, lalu ia diatur ke waktu berhenti salurannya. Jika yang terbarumarkoutTime
klip lebih lama dari sistem saat ini waktu aktual, maka ini diatur ke waktu saat API benar-benar memulai tugas {i>clipping<i}. - Durasi maksimum untuk klip adalah 24 jam.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER
: project Google Cloud Anda nomor; nomor ini terletak di kolom Project number di Halaman Setelan IAMLOCATION
: lokasi channel Anda berlokasi; menggunakan salah satu wilayah yang didukungTampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: ID yang ditentukan pengguna untuk saluranCLIP_ID
: ID yang ditentukan pengguna untuk klip VODMARK_IN_TIME
: waktu epoch Unix mark-in di manifes live stream asli; menggunakan stempel waktu dalam RFC3339 UTC "Zulu" (misalnya,2014-10-02T15:01:23Z
)MARK_OUT_TIME
: waktu epoch Unix yang di-mark-out di manifes live stream asli; menggunakan stempel waktu dalam RFC3339 UTC "Zulu" (untuk contoh,2014-10-02T15:01:23Z
)BUCKET_NAME
: nama Cloud Storage bucket yang Anda buat untuk menyimpan manifes klip VOD dan file segmen; Anda dapat menggunakan bucket yang sama yang Anda buat untuk manifes live stream atau bucket berbeda; Anda juga dapat menambahkan direktori nama 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 akan membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak perkembangan permintaan Anda. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.
Mendapatkan klip VOD
Untuk mendapatkan klip VOD, gunakan projects.locations.channels.clips.get
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER
: project Google Cloud Anda nomor; nomor ini terletak di kolom Project number di Halaman Setelan IAMLOCATION
: lokasi channel Anda berlokasi; menggunakan salah satu wilayah yang didukungTampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-northeast1
asia-southeast1
australia-southeast1
europe-west1
europe-west2
europe-west3
europe-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 terletak di URI yang ditentukan dalam
Kolom clipManifests.outputUri
. Manifes
sama dengan nama file dari saluran induk
Nilai kolom manifests.fileName
.
Respons harus berisi hal berikut:
{
...
"state": "SUCCEEDED"
...
}
Hanya 1.000 data tugas klip terbaru per channel yang tersedia
menggunakan
projects.locations.channels.clips.get
. Semua catatan tugas klip yang lebih lama dari batas akan dihapus. Anda harus mengelola klip yang dihasilkan
file yang ditentukan oleh
outputUri
;
Live Stream API tidak menghapus file ini dari Cloud Storage.
Memverifikasi konten bucket
Buka bucket Cloud Storage seperti yang ditentukan dalam
Kolom outputUri
. Verifikasi bahwa {i>file<i} itu berisi file-file berikut dan
direktori:
- Manifes tingkat atas untuk klip dengan nama yang sama dengan
manifests.fileName
ditentukan dalam saluran konfigurasi (misalnya,main.m3u8
); Anda dapat memainkan manifes ini menggunakan pemutar media online - Direktori untuk setiap
muxStreams.key
yang ditentukan dalam saluran (misalnya,mux_video_ts
)- Playlist untuk klip tersebut (misalnya,
index-1.m3u8
) - Direktori yang diberi nama menggunakan format
YYYYMMDDTHHMMSSZ
(misalnya,20220708T203309Z/
); direktori ini membekukan segmen klip VOD- Beberapa file
segment-number.ts
segmen yang membentuk klip VOD
- Beberapa file
- Playlist untuk klip tersebut (misalnya,
Putar klip VOD
Untuk memutar file media yang dihasilkan di Shaka Player, selesaikan langkah-langkah berikut:
- Buat bucket Cloud Storage yang Anda buat agar dapat dibaca oleh publik.
- Untuk mengaktifkan resource lintas asal
(CORS) di bucket Cloud Storage, lakukan langkah 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_NAME
dengan 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, cari instance . Klik Copy URL di kolom Public access file.
- Buka Shaka Player, pemutar live stream online.
- Klik Konten Kustom di menu navigasi atas.
- Klik tombol +.
Tempel URL publik file ke kotak Manifest URL.
Ketik nama di kotak Nama.
Klik Simpan.
Klik Play.
Anda akan melihat pola pengujian diputar saat live stream.
Peristiwa slate dan jeda iklan
Jika Anda membuat peristiwa jeda iklan untuk live stream, klip VOD tidak akan berisi iklan. API membuat playlist dengan titik henti sementara iklan diganti dengan tag berikut:
#EXT-X-CUE-OUT: AD_BREAK_DURATION
#EXT-X-CUE-IN
Deretan yang muncul di awal atau akhir klip VOD akan otomatis dihapus. Deretan yang muncul dalam streaming, dikelilingi oleh live stream konten, dipertahankan dalam klip VOD yang dihasilkan.