Halaman ini menunjukkan cara membuat sesi perekam video digital (DVR) dari live stream menggunakan Live Stream API. Anda dapat melihat sesi DVR selama live stream berlangsung dan setelahnya.
Perbedaan antara sesi DVR dan klip channel
Sesi DVR mirip dengan klip channel (juga dikenal sebagai klip VOD) 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 bersama dengan 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 lama 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 klip channel, lihat Membuat klip VOD dari live stream.
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
projects.locations.inputs.create
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER
: nomor project Google Cloud Anda; nomor ini berada di kolom Project number di halaman IAM SettingsLOCATION
: lokasi tempat membuat endpoint input; gunakan salah satu region yang didukungMenampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-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; nomor ini berada di kolom Project number di halaman IAM SettingsLOCATION
: lokasi endpoint input Anda berada; gunakan salah satu region yang didukungMenampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
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
dan salin INPUT_STREAM_URI yang ditampilkan untuk digunakan nanti di bagian Kirim streaming pengujian 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 render beresolusi tinggi (1280x720).
Untuk mengaktifkan pembuatan sesi DVR, tambahkan objek retentionConfig
ke konfigurasi saluran.
"retentionConfig": {
"retentionWindowDuration": {
"seconds": 86400
}
},
Jika retensi diaktifkan untuk channel live stream, segmen dan manifes
live stream akan dipertahankan untuk membuat sesi DVR. 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 berakhir, file segmen, manifes live stream, dan manifes DVR akan otomatis dihapus dari Cloud Storage. Anda tidak dapat membuat sesi DVR menggunakan segmen yang dihapus. Proses penghapusan bersifat asinkron dan mungkin memerlukan waktu hingga 24 jam untuk diselesaikan.
Tentukan kunci untuk manifes guna mengaktifkan pembuatan sesi DVR. Anda merujuk ke kunci ini saat benar-benar membuat sesi. 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; nomor ini berada di kolom Project number di halaman IAM SettingsLOCATION
: lokasi untuk membuat channel; gunakan salah satu region yang didukungMenampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-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; nomor ini berada di kolom Project number di halaman IAM SettingsLOCATION
: lokasi tempat channel Anda berada; gunakan salah satu region yang didukungMenampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
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 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 streaming pengujian 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 sesi DVR
Untuk membuat sesi DVR, gunakan
metode projects.locations.channels.dvrSessions.create
.
Gunakan kolom manifestKey
dalam
array dvrManifests
untuk menentukan manifes tempat konten
disimpan. Dalam contoh konfigurasi saluran di halaman ini, kunci ini ditetapkan ke manifest_hls
.
Anda dapat menggabungkan beberapa bagian waktu dari live stream ke dalam satu sesi DVR
dengan menambahkan objek timeInterval
ke
array dvrWindows
.
"dvrManifests": [
{
"manifestKey": "manifest_hls"
}
],
"dvrWindows": [
{
"timeInterval": {
"startTime": "2022-07-08T23:03:20.000Z",
"endTime": "2022-07-08T23:04:20.000Z"
}
},
{
"timeInterval": {
"startTime": "2022-07-08T23:05:20.000Z",
"endTime": "2022-07-08T23:06:20.000Z"
}
}
]
Perhatikan hal berikut:
- Setiap sesi DVR harus berisi minimal satu
timeInterval
didvrWindows
. - Kolom
dvrManifests.manifestKey
harus merujuk ke manifes HLS yang ditentukan di saluran induk sesi DVR. Jika permintaan pembuatan sesi DVR berhasil, URI manifes DVR yang dihasilkan akan ditampilkan di kolomdvrManifests.outputUri
. URI ini berada di jalur yang ditentukan oleh kolomoutputUri
saluran. - Array
dvrManifests
hanya mendukung satu manifes per permintaan. Jika ingin membuat beberapa manifes untuk periode DVR yang sama, Anda harus membagi manifes menjadi beberapa sesi DVR. - Kumpulan objek
timeInterval
tidak boleh tumpang-tindih dan dalam urutan kronologis.startTime
harus lebih awal dariendTime
di setiaptimeInterval
. startTime
danendTime
mengacu pada linimasa live stream. Jika kode waktu tersemat diaktifkan untuk manifes, linimasa ini didasarkan pada kode waktu tersemat yang diberikan dalam streaming input dan dapat berbeda dengan jam dinding.- Total durasi maksimum untuk periode DVR adalah 24 jam.
endTime
daritimeInterval
terakhir didvrWindows
dapat dibiarkan kosong. Dalam hal ini,endTime
dihitung secara otomatis untuk memaksimalkan durasi sesi DVR (yaitu, total durasi 24 jam).- Periode DVR dapat mencakup rentang waktu apa pun, termasuk yang akan datang.
Namun, jumlah sesi DVR dengan
dvrWindows
yang diperpanjang ke waktu mendatang dibatasi hingga satu. - Tidak ada batas jumlah sesi DVR dengan semua periode DVR hanya di masa lalu.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER
: nomor project Google Cloud Anda; nomor ini berada di kolom Project number di halaman IAM SettingsLOCATION
: lokasi tempat channel Anda berada; gunakan salah satu region yang didukungMenampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: ID yang ditentukan pengguna untuk saluranDVR_SESSION_ID
: ID yang ditentukan pengguna untuk sesi DVRINTERVAL_START_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
)INTERVAL_END_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
)
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/dvrSessions/DVR_SESSION_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 sesi DVR
Untuk mendapatkan sesi DVR, gunakan
metode projects.locations.channels.dvrSessions.get
.
Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:
PROJECT_NUMBER
: nomor project Google Cloud Anda; nomor ini berada di kolom Project number di halaman IAM SettingsLOCATION
: lokasi tempat channel Anda berada; gunakan salah satu region yang didukungMenampilkan lokasius-central1
us-east1
us-east4
us-west1
us-west2
northamerica-northeast1
southamerica-east1
asia-east1
asia-east2
asia-south1
asia-northeast1
asia-southeast1
australia-southeast1
europe-north1
europe-west1
europe-west2
europe-west3
europe-west4
CHANNEL_ID
: ID yang ditentukan pengguna untuk saluranDVR_SESSION_ID
: ID yang ditentukan pengguna untuk sesi DVR
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/dvrSessions/DVR_SESSION_ID", "createTime": CREATE_TIME, "startTime": START_TIME, "updateTime": UPDATE_TIME, "state": "SUCCEEDED", "dvrManifests": [ { "manifestKey": "manifest_hls", "outputUri": "gs://BUCKET_NAME/dvr/DVR_SESSION_ID/main.m3u8" } ], "dvrWindows": [ { "timeInterval": { "startTime": "INTERVAL_START_TIME", "endTime": "INTERVAL_END_TIME" } } ] }
Respons harus berisi kolom state
yang menunjukkan
status sesi:
{
...
"state": "PENDING" // DVR session is waiting to be processed (for example, it is waiting for the channel to start)
...
}
Lihat dokumentasi referensi state
untuk mengetahui daftar
status dan deskripsinya.
Memverifikasi konten bucket
Buka bucket Cloud Storage seperti yang ditentukan di kolom
dvrManifests.outputUri
sesi DVR. Pastikan file tersebut
berisi file dan direktori berikut:
- Manifes tingkat atas untuk sesi DVR dengan nama yang sama seperti
manifests.fileName
yang ditentukan dalam konfigurasi saluran (misalnya,main.m3u8
). Anda dapat memutar manifes ini menggunakan pemutar media online. - Subdirektori untuk setiap
muxStreams.key
yang ditentukan di saluran (misalnya,mux_video_ts
). Setiap subdirektori berisi playlist untuk sesi DVR (misalnya,index-1.m3u8
).
Memutar sesi DVR
Untuk memutar file media yang dihasilkan di Shaka Player, selesaikan langkah-langkah berikut:
- Buat bucket Cloud Storage yang Anda buat dapat dibaca secara 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_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, 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
Jika Anda membuat peristiwa jeda iklan untuk live stream, sesi DVR akan berisi segmen iklan seperti yang muncul di live stream.