Membuat overlay statis

Halaman ini menunjukkan cara membuat gambar overlay statis di bagian atas live stream. Gambar overlay statis akan tetap ditampilkan selama live stream berlangsung. Anda dapat mengonfigurasi resolusi dan posisi gambar overlay statis.

Menyiapkan autentikasi dan project Google Cloud Anda

Jika Anda belum membuat Project Google Cloud dan kredensial, lihat Sebelum memulai.

Mengupload gambar ke bucket Cloud Storage

  1. Di konsol Google Cloud, buka halaman Browser Cloud Storage.
    Buka halaman Browser Cloud Storage
  2. Klik nama bucket Anda untuk membukanya.
  3. Klik Upload files.
  4. Pilih file gambar (JPEG atau PNG) untuk diupload dari mesin lokal Anda. Anda dapat menggunakan contoh gambar overlay ini.

Gambar Anda sekarang disimpan di bucket Cloud Storage.

Membuat aset

Aset adalah video atau gambar yang dapat digunakan dengan Live Stream API. Buat aset gambar untuk digunakan sebagai overlay statis.

Untuk membuat aset, gunakan Metode projects.locations.assets.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 asset; 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
  • ASSET_ID: ID yang ditentukan pengguna untuk aplikasi baru aset yang akan dibuat. 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-asset.
  • ASSET_URI: URI gambar di Bucket Cloud Storage yang akan digunakan, seperti gs://my-bucket/my-image.png

Meminta isi JSON:

{
  "image": {
    "uri": "ASSET_URI"
  }
}

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/assets/ASSET_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Salin teks yang dikembalikan OPERATION_ID untuk digunakan di bagian berikutnya.

Memeriksa hasilnya

Gunakan metode projects.locations.operations.get untuk memeriksa apakah aset sudah dibuat. Jika responsnya berisi "done: false", ulangi perintah hingga responsnya berisi "done: true".

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 aset 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
  • OPERATION_ID: ID untuk operasi

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,
    "endTime": END_TIME,
    "target": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
    "verb": "create",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": true,
  "response": {
    "@type": "type.googleapis.com/google.cloud.video.livestream.v1.Asset",
    "name": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
    "createTime": CREATE_TIME,
    "updateTime": UPDATE_TIME,
    "image": {
      "uri": "ASSET_URI"
    },
    "crc32c": "ae1EJg==",
    "state": "ACTIVE"
  }
}

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.

Isi JSON permintaan:

{
  "type": "RTMP_PUSH"
}

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
}

Anda dapat memeriksa hasil pembuatan input menggunakan ID operasi baru.

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 channel

Untuk membuat channel, gunakan Metode projects.locations.channels.create.

Perhatikan array staticOverlays dalam konfigurasi saluran:

"staticOverlays": [
  {
    "asset": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
    "position": {
      "x": 0.5,
      "y": 0.5
    },
    "resolution": {
      "w": 0.1
    },
    "opacity": 0.8
  }
],

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
  • ASSET_ID: ID yang ditentukan pengguna untuk aset

Meminta isi JSON:

{
  "inputAttachments": [
    {
      "key": "my-input",
      "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
    }
  ],
  "output": {
    "uri": "gs://BUCKET_NAME"
  },
  "staticOverlays": [
    {
      "asset": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
      "position": {
        "x": 0.5,
        "y": 0.5
      },
      "resolution": {
        "w": 0.1
      },
      "opacity": 0.8
    },
  ],
  "elementaryStreams": [
    {
      "key": "es_video",
      "videoStream": {
        "h264": {
          "profile": "high",
          "widthPixels": 1280,
          "heightPixels": 720,
          "bitrateBps": 3000000,
          "frameRate": 30
        }
      }
    },
    {
      "key": "es_audio",
      "audioStream": {
        "codec": "aac",
        "channelCount": 2,
        "bitrateBps": 160000
      }
    }
  ],
  "muxStreams": [
    {
      "key": "mux_video_ts",
      "container": "ts",
      "elementaryStreams": ["es_video", "es_audio"],
      "segmentSettings": { "segmentDuration": "2s" }
    }
  ],
  "manifests": [
    {
      "key": "manifest_hls",
      "fileName": "main.m3u8",
      "type": "HLS",
      "muxStreams": [
        "mux_video_ts"
      ],
      "maxSegmentCount": 5
    }
  ]
}

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
}

Anda dapat memeriksa hasil pembuatan channel menggunakan ID operasi baru.

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
}

Anda dapat memeriksa hasil awal channel menggunakan ID operasi baru.

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

Memutar live stream yang dibuat

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 File main.m3u8. 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 overlay muncul di atas live stream.

Video uji pola