Membuat klip VOD dari live stream

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 IAM
  • LOCATION: lokasi untuk membuat input endpoint; menggunakan salah satu wilayah yang didukung
    Tampilkan lokasi
    • us-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 IAM
  • LOCATION: lokasi endpoint input Anda berlokasi; menggunakan salah satu wilayah yang didukung
    Tampilkan lokasi
    • us-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 IAM
  • LOCATION: lokasi untuk membuat saluran; menggunakan salah satu wilayah yang didukung
    Tampilkan lokasi
    • us-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 karakter
  • INPUT_ID: ID yang ditentukan pengguna untuk endpoint input
  • BUCKET_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 IAM
  • LOCATION: lokasi channel Anda berlokasi; menggunakan salah satu wilayah yang didukung
    Tampilkan lokasi
    • us-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 di slices.
  • 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 kolom clipManifests.outputUri. URI ini adalah di jalur yang ditentukan oleh kolom outputUri 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 dari markoutTime di setiap timeSlice.
  • 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 terbaru markoutTime 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 IAM
  • LOCATION: lokasi channel Anda berlokasi; menggunakan salah satu wilayah yang didukung
    Tampilkan lokasi
    • us-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
  • CLIP_ID: ID yang ditentukan pengguna untuk klip VOD
  • MARK_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 IAM
  • LOCATION: lokasi channel Anda berlokasi; menggunakan salah satu wilayah yang didukung
    Tampilkan lokasi
    • us-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
  • CLIP_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

Putar klip VOD

Untuk memutar file media yang dihasilkan di Shaka Player, selesaikan langkah-langkah berikut:

  1. Buat bucket Cloud Storage yang Anda buat agar dapat dibaca oleh publik.
  2. Untuk mengaktifkan resource lintas asal (CORS) di bucket Cloud Storage, lakukan langkah 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, cari instance . 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. Tempel URL publik file ke kotak Manifest URL.

  8. Ketik nama di kotak Nama.

  9. Klik Simpan.

  10. Klik Play.

Anda akan melihat pola pengujian diputar saat live stream.

Video uji pola

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.