Membuat sesi DVR

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 Settings
  • LOCATION: lokasi tempat membuat endpoint input; gunakan salah satu region yang didukung
    Menampilkan lokasi
    • us-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 Settings
  • LOCATION: lokasi endpoint input Anda berada; gunakan salah satu region yang didukung
    Menampilkan lokasi
    • us-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 Settings
  • LOCATION: lokasi untuk membuat channel; gunakan salah satu region yang didukung
    Menampilkan lokasi
    • us-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 karakter
  • INPUT_ID: ID yang ditentukan pengguna untuk endpoint input
  • BUCKET_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 Settings
  • LOCATION: lokasi tempat channel Anda berada; gunakan salah satu region yang didukung
    Menampilkan lokasi
    • us-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 di dvrWindows.
  • 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 kolom dvrManifests.outputUri. URI ini berada di jalur yang ditentukan oleh kolom outputUri 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 dari endTime di setiap timeInterval.
  • startTime dan endTime 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 dari timeInterval terakhir di dvrWindows 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 Settings
  • LOCATION: lokasi tempat channel Anda berada; gunakan salah satu region yang didukung
    Menampilkan lokasi
    • us-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
  • DVR_SESSION_ID: ID yang ditentukan pengguna untuk sesi DVR
  • INTERVAL_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 Settings
  • LOCATION: lokasi tempat channel Anda berada; gunakan salah satu region yang didukung
    Menampilkan lokasi
    • us-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
  • DVR_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:

  1. Buat bucket Cloud Storage yang Anda buat dapat dibaca secara publik.
  2. Untuk mengaktifkan cross-origin resource sharing (CORS) di bucket Cloud Storage, lakukan tindakan berikut:
    1. Buat file JSON yang berisi hal berikut:
      [
        {
          "origin": ["https://shaka-player-demo.appspot.com/"],
          "responseHeader": ["Content-Type", "Range"],
          "method": ["GET", "HEAD"],
          "maxAgeSeconds": 3600
        }
      ]
    2. 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
  3. Di bucket Cloud Storage, temukan file yang dihasilkan. Klik Copy URL di kolom Public access file.
  4. Buka Shaka Player, pemutar live stream online.
  5. Klik Konten Kustom di menu navigasi atas.
  6. Klik tombol +.
  7. Tempelkan URL publik file ke kotak Manifest URL.

  8. Ketik nama di kotak Name.

  9. Klik Simpan.

  10. Klik Putar.

Anda akan melihat pola pengujian diputar sebagai live stream.

Video pola pengujian

Peristiwa jeda iklan

Jika Anda membuat peristiwa jeda iklan untuk live stream, sesi DVR akan berisi segmen iklan seperti yang muncul di live stream.