Pratinjau streaming input secara hampir real-time

Halaman ini menjelaskan cara melihat pratinjau streaming input Anda, dengan latensi yang sangat rendah, untuk mendeteksi potensi masalah atau peristiwa secara hampir real-time. Hal ini memungkinkan Anda mengambil tindakan korektif, seperti menjeda streaming, menyisipkan iklan, atau menampilkan layar, untuk mempertahankan pengalaman menonton berkualitas tinggi bagi penonton Anda.

Konten pratinjau tersedia dalam format berikut:

  • Format: MPEG-TS
  • Video:
    • Resolusi: 640x480
    • Codec: H.264
    • Kecepatan frame: 25 frame per detik (FPS)
  • Audio
    • Codec: AAC
    • Frekuensi sampling: 48 kHz
    • Protokol: HTTPS

Sebelum memulai

Halaman ini mengasumsikan bahwa Anda telah menyelesaikan langkah-langkah di bagian Sebelum memulai dari Panduan memulai untuk live stream HLS.

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 Google Cloud project Anda; nomor ini ada di kolom Project number di halaman IAM Settings
  • LOCATION: lokasi tempat membuat endpoint input; gunakan salah satu region yang didukung
    Tampilkan 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 mengirimkan 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.

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
}

Perintah ini membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak progres permintaan Anda. 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 Google Cloud project Anda; nomor ini ada di kolom Project number di halaman IAM Settings
  • LOCATION: lokasi tempat endpoint input Anda berada; gunakan salah satu region yang didukung
    Tampilkan 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 Kirimkan aliran input.

Membuat saluran

Untuk membuat saluran, gunakan metode projects.locations.channels.create. Contoh berikut membuat channel yang menghasilkan live stream HLS. Live stream terdiri dari satu rendering definisi tinggi (1280x720).

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_NUMBER: nomor Google Cloud project Anda; nomor ini ada di kolom Project number di halaman IAM Settings
  • LOCATION: lokasi tempat membuat channel; gunakan salah satu region yang didukung
    Tampilkan 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 segmen dan manifes live stream

Meminta isi JSON:

{
  "inputAttachments": [
    {
      "key": "my-input",
      "input": "projects/PROJECT_NUMBER/locations/LOCATION/inputs/INPUT_ID"
    }
  ],
  "output": {
    "uri": "gs://BUCKET_NAME"
  },
  "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
}

Perintah ini membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak progres permintaan Anda. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.

Mulai channel

Untuk memulai channel, gunakan metode projects.locations.channels.start.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_NUMBER: nomor Google Cloud project Anda; nomor ini ada di kolom Project number di halaman IAM Settings
  • LOCATION: lokasi tempat channel Anda berada; gunakan salah satu region yang didukung
    Tampilkan 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

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 Anda. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.

Menginstal encoder

Untuk menggunakan API, Anda memerlukan encoder untuk membuat aliran input yang diproses oleh API.

Instal ffmpeg karena halaman ini membahas cara menggunakan ffmpeg untuk membuat aliran input. Anda dapat menginstalnya di Cloud Shell menggunakan perintah berikut.

sudo apt install ffmpeg

Kirimkan aliran input

Buka jendela terminal baru. Jalankan perintah berikut, menggunakan INPUT_STREAM_URI dari bagian Mendapatkan detail endpoint input. Perintah ini menghasilkan aliran pengujian.

ffmpeg -re -f lavfi -i "testsrc=size=1280x720 [out0]; sine=frequency=500 [out1]" \
  -acodec aac -vcodec h264 -f flv INPUT_STREAM_URI

Mendapatkan URL endpoint dan token pembawa

Untuk mendapatkan URL endpoint untuk konten pratinjau dan token pembawa yang diperlukan untuk autentikasi, gunakan metode projects.locations.inputs.preview.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_NUMBER: nomor Google Cloud project Anda; nomor ini ada di kolom Project number di halaman IAM Settings
  • LOCATION: lokasi tempat endpoint input Anda berada; gunakan salah satu region yang didukung
    Tampilkan 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:

{
  "uri":  ENDPOINT_URL, # For example, "preview.k3fhpvei3vvf.us-central1.livestream.goog/inputs/my-preview-input",
  "bearerToken": "BEARER_TOKEN"
}

Anda akan menggunakan nilai dari kolom uri dan bearerToken di bagian berikutnya.

Menampilkan konten pratinjau

Anda memiliki opsi utama berikut untuk menampilkan konten pratinjau:

mpegts.js

mpegts.js adalah library yang tersedia di GitHub untuk memutar streaming MPEG-TS di browser web.

Salin nilai dari kolom bearerToken dan uri yang Anda terima pada langkah sebelumnya ke dalam HTML berikut. Buat file HTML dari HTML berikut dan buka di browser.

<html>
  <head>
  <script src="https://xqq.im/mpegts.js/dist/mpegts.js"></script>
  <video id="video" autoplay controls muted></video>
  <script>
    function main() {
      if (!mpegts.getFeatureList().mseLivePlayback) {
        console.log("MSE live playback is not supported by the browswer!")
        return;
      }
      var videoElement = document.getElementById("video");
      player = mpegts.createPlayer(
        {
          type: "mse",
          isLive: true,
          <!-- Placeholder: Replace ENDPOINT_URL with the actual endpoint URL -->
          url: "ENDPOINT_URL",
        },
        {
          headers: {
            <!-- Placeholder: Replace BEARER_TOKEN with the actual bearer token -->
            Authorization: "BEARER_TOKEN",
          },
        }
      );
      player.attachMediaElement(videoElement);
      player.load();
      player.play();
    }
    main();
  </script>
  </body>
</html>

Anda akan melihat pola pengujian diputar dengan latensi yang lebih rendah daripada live stream terkait. Pemutar streaming ini hanya dapat memutar trek audio pertama dalam streaming.

Video pola pengujian

FFplay

FFplay adalah pemutar media command line serbaguna yang menggunakan library FFmpeg. Anda dapat menemukan download untuk FFplay dari halaman Download FFmpeg.

Buka jendela terminal baru. Salin nilai dari kolom bearerToken dan uri yang Anda terima di langkah sebelumnya ke dalam perintah berikut, lalu jalankan.

ffplay -headers "Authorization: Bearer BEARER_TOKEN" \
  -fflags nobuffer -flags low_delay -probesize 32 -analyzeduration 0 \
  ENDPOINT_URL

Anda akan melihat pola pengujian diputar dengan latensi yang lebih rendah daripada live stream terkait. ffplay mendukung peralihan antara trek audio dengan menekan tombol 'A'.

Video pola pengujian

Pembersihan

Agar akun Google Cloud Anda tidak dikenai biaya untuk resource yang digunakan di halaman ini, ikuti langkah-langkah berikut.

Menghentikan channel

Gunakan metode projects.locations.channels.stop untuk menghentikan saluran. Anda harus menghentikan channel sebelum dapat menghapusnya.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_NUMBER: nomor Google Cloud project Anda; nomor ini ada di kolom Project number di halaman IAM Settings
  • LOCATION: lokasi tempat channel Anda berada; gunakan salah satu region yang didukung
    Tampilkan 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

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": "stop",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Perintah ini membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak progres permintaan Anda. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.

Hentikan aliran input

Jika Anda menggunakan ffmpeg untuk mengirimkan aliran input, koneksi akan otomatis terputus setelah Anda menghentikan channel.

Menghapus channel

Gunakan metode projects.locations.channels.delete untuk menghapus channel. Anda harus menghapus channel sebelum dapat menghapus endpoint input yang digunakan oleh channel.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_NUMBER: nomor Google Cloud project Anda; nomor ini ada di kolom Project number di halaman IAM Settings
  • LOCATION: lokasi tempat channel Anda berada; gunakan salah satu region yang didukung
    Tampilkan 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

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": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Perintah ini membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak progres permintaan Anda. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.

Menghapus endpoint input

Gunakan metode projects.locations.inputs.delete untuk menghapus endpoint input.

Sebelum menggunakan salah satu data permintaan, lakukan penggantian berikut:

  • PROJECT_NUMBER: nomor Google Cloud project Anda; nomor ini ada di kolom Project number di halaman IAM Settings
  • LOCATION: lokasi tempat endpoint input Anda berada; gunakan salah satu region yang didukung
    Tampilkan 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/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": "delete",
    "requestedCancellation": false,
    "apiVersion": "v1"
  },
  "done": false
}

Perintah ini membuat operasi yang berjalan lama (LRO) yang dapat Anda gunakan untuk melacak progres permintaan Anda. Lihat Mengelola operasi yang berjalan lama untuk mengetahui informasi selengkapnya.

Menghapus bucket Cloud Storage

  1. Di konsol Google Cloud , buka halaman Browser Cloud Storage.

    Membuka halaman Browser Cloud Storage

  2. Pilih kotak centang di samping bucket yang Anda buat.

  3. Klik Hapus.

  4. Di jendela dialog yang muncul, klik Hapus untuk menghapus bucket dan isinya.