入力ストリームを準リアルタイムでプレビューする

このページでは、入力ストリームを非常に低いレイテンシでプレビューして、潜在的な問題やイベントをほぼリアルタイムで検出する方法について説明します。これにより、ストリームの一時停止、広告の挿入、スレートの表示などの修正措置を講じて、視聴者に高品質の視聴エクスペリエンスを提供できます。

プレビュー コンテンツは次の形式で利用できます。

  • 形式: MPEG-TS
  • 動画:
    • 解像度: 640x480
    • コーデック: H.264
    • フレームレート: 25 フレーム/秒(FPS)
  • 音声
    • コーデック: AAC
    • サンプリング レート: 48 kHz
    • プロトコル: HTTPS

始める前に

このページでは、HLS ライブ ストリームのクイックスタート始める前にの手順が完了していることを前提としています。

入力エンドポイントを作成する

入力エンドポイントを作成するには、projects.locations.inputs.create メソッドを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_NUMBER: Google Cloud プロジェクト番号。これは、IAM 設定ページの [プロジェクト番号] フィールドにあります。
  • LOCATION: 入力エンドポイントを作成するロケーション。サポートされているリージョンのいずれかを使用します。
    ロケーションを表示
    • 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: 作成する新しい入力エンドポイントのユーザー定義の識別子(入力ストリームの送信先)。この値は 1~63 文字で、先頭と末尾は [a-z0-9] で、文字の間にダッシュ(-)を含めることができます。たとえば、my-input です。

リクエストの本文(JSON):

{
  "type": "RTMP_PUSH"
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "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
}

このコマンドは、リクエストの進行状況を追跡するために使用できる長時間実行オペレーション(LRO)を作成します。詳しくは、長時間実行オペレーションの管理をご覧ください。

   # 入力エンドポイントの詳細

入力エンドポイントの詳細を取得するには、projects.locations.inputs.get メソッドを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_NUMBER: Google Cloud プロジェクト番号。これは、IAM 設定ページの [プロジェクト番号] フィールドにあります。
  • LOCATION: 入力エンドポイントが配置されているロケーション。サポートされているリージョンのいずれかを使用します。
    ロケーションを表示
    • 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: 入力エンドポイントのユーザー定義の識別子

リクエストを送信するには、次のいずれかのオプションを開きます。

次のような JSON レスポンスが返されます。

{
  "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"
}

uri フィールドを探して、返された INPUT_STREAM_URI をコピーし、後で入力ストリームを送信するセクションで使用します。

チャンネルを作成する

チャネルを作成するには、projects.locations.channels.create メソッドを使用します。次のサンプルでは、HLS ライブ ストリームを生成するチャネルを作成します。ライブ ストリームは、単一の高解像度(1280x720)のレンディションで構成されます。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_NUMBER: Google Cloud プロジェクト番号。これは、IAM 設定ページの [プロジェクト番号] フィールドにあります。
  • LOCATION: チャネルを作成するロケーション。サポートされているリージョンのいずれかを使用します。
    ロケーションを表示
    • 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: 作成するチャネルのユーザー定義の識別子。この値は 1~63 文字で、先頭と末尾は [a-z0-9] で、文字の間にダッシュ(-)を含めることができます。
  • INPUT_ID: 入力エンドポイントのユーザー定義の識別子
  • BUCKET_NAME: ライブ ストリームのマニフェスト ファイルとセグメント ファイルを保持するために作成した Cloud Storage バケットの名前

リクエストの本文(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
    }
  ]
}

リクエストを送信するには、次のいずれかのオプションを展開します。

次のような JSON レスポンスが返されます。

{
  "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
}

このコマンドは、リクエストの進行状況を追跡するために使用できる長時間実行オペレーション(LRO)を作成します。詳しくは、長時間実行オペレーションの管理をご覧ください。

チャネルを開始する

チャネルを開始するには、projects.locations.channels.start メソッドを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_NUMBER: Google Cloud プロジェクト番号。これは、IAM 設定ページの [プロジェクト番号] フィールドにあります。
  • LOCATION: チャネルがあるロケーション。サポートされているリージョンのいずれかを使用します。
    ロケーションを表示
    • 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: チャネルのユーザー定義の識別子。

リクエストを送信するには、次のいずれかのオプションを開きます。

次のような JSON レスポンスが返されます。

{
  "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
}

このコマンドは、リクエストの進行状況を追跡するために使用できる長時間実行オペレーション(LRO)を作成します。詳しくは、長時間実行オペレーションの管理をご覧ください。

エンコーダをインストールする

API を使用するには、API によって処理される入力ストリームを生成するエンコーダが必要です。

このページでは、ffmpeg を使用して入力ストリームを生成する方法を説明しているので、ffmpeg をインストールします。 これは、次の場所でCloud Shell で次のコマンドを使用してインストールできます。

sudo apt install ffmpeg

入力ストリームを送信する

新しいターミナル ウィンドウを開きます。入力エンドポイントの詳細を取得するセクションの INPUT_STREAM_URI を使用して、次のコマンドを実行します。このコマンドはテスト ストリームを生成します。

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

エンドポイント URL とベアラー トークンを取得する

プレビュー コンテンツのエンドポイント URL と認証に必要なベアラー トークンを取得するには、projects.locations.inputs.preview メソッドを使用します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_NUMBER: Google Cloud プロジェクト番号。これは、IAM 設定ページの [プロジェクト番号] フィールドにあります。
  • LOCATION: 入力エンドポイントが配置されているロケーション。サポートされているリージョンのいずれかを使用します。
    ロケーションを表示
    • 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: 入力エンドポイントのユーザー定義の識別子

リクエストを送信するには、次のいずれかのオプションを開きます。

次のような JSON レスポンスが返されます。

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

uri フィールドと bearerToken フィールドの値は、次のセクションで使用します。

プレビュー コンテンツを表示する

プレビュー コンテンツを表示する主なオプションは次のとおりです。

  • HTML5 ストリーム プレーヤーの mpegts.js
  • コマンドライン メディア プレーヤーの FFplay

mpegts.js

mpegts.js は、ウェブブラウザで MPEG-TS ストリームを再生するために GitHub で入手できるライブラリです。

前の手順で受け取った bearerToken フィールドと uri フィールドの値を、次の HTML にコピーします。次の HTML から HTML ファイルを作成し、ブラウザで開きます。

<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>

関連付けられたライブ ストリームよりもレイテンシが低いテストパターンが再生されます。このストリーム プレーヤーは、ストリームの最初の音声トラックのみを再生できます。

テストパターンの動画

FFplay

FFplay は、FFmpeg ライブラリを使用する汎用性の高いコマンドライン メディア プレーヤーです。FFplay のダウンロードは、FFmpeg のダウンロード ページで確認できます。

新しいターミナル ウィンドウを開きます。前の手順で受け取った bearerToken フィールドと uri フィールドの値を次のコマンドにコピーして実行します。

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

関連付けられたライブ ストリームよりもレイテンシが低いテストパターンが再生されます。ffplay は、A キーを押して音声トラックを切り替えることをサポートしています。

テストパターンの動画

クリーンアップ

このページで使用したリソースについて、 Google Cloud アカウントに課金されないようにするには、次の操作を行います。

チャネルを停止する

projects.locations.channels.stop メソッドを使用してチャネルを停止します。チャネルは削除する前に停止する必要があります。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_NUMBER: Google Cloud プロジェクト番号。これは、IAM 設定ページの [プロジェクト番号] フィールドにあります。
  • LOCATION: チャネルがあるロケーション。サポートされているリージョンのいずれかを使用します。
    ロケーションを表示
    • 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: チャネルのユーザー定義の識別子。

リクエストを送信するには、次のいずれかのオプションを開きます。

次のような JSON レスポンスが返されます。

{
  "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
}

このコマンドは、リクエストの進行状況を追跡するために使用できる長時間実行オペレーション(LRO)を作成します。詳しくは、長時間実行オペレーションの管理をご覧ください。

入力ストリームを停止する

ffmpeg を使用して入力ストリームを送信した場合、チャネルを停止すると接続が自動的に切断されます。

チャネルを削除する

projects.locations.channels.delete メソッドを使用してチャネルを削除します。チャネルで使用されている入力エンドポイントを削除する前に、そのチャネルを削除する必要があります。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_NUMBER: Google Cloud プロジェクト番号。これは、IAM 設定ページの [プロジェクト番号] フィールドにあります。
  • LOCATION: チャネルがあるロケーション。サポートされているリージョンのいずれかを使用します。
    ロケーションを表示
    • 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: チャネルのユーザー定義の識別子。

リクエストを送信するには、次のいずれかのオプションを開きます。

次のような JSON レスポンスが返されます。

{
  "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
}

このコマンドは、リクエストの進行状況を追跡するために使用できる長時間実行オペレーション(LRO)を作成します。詳しくは、長時間実行オペレーションの管理をご覧ください。

入力エンドポイントを削除する

projects.locations.inputs.delete メソッドを使用して、入力エンドポイントを削除します。

リクエストのデータを使用する前に、次のように置き換えます。

  • PROJECT_NUMBER: Google Cloud プロジェクト番号。これは、IAM 設定ページの [プロジェクト番号] フィールドにあります。
  • LOCATION: 入力エンドポイントが配置されているロケーション。サポートされているリージョンのいずれかを使用します。
    ロケーションを表示
    • 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: 入力エンドポイントのユーザー定義の識別子

リクエストを送信するには、次のいずれかのオプションを開きます。

次のような JSON レスポンスが返されます。

{
  "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
}

このコマンドは、リクエストの進行状況を追跡するために使用できる長時間実行オペレーション(LRO)を作成します。詳しくは、長時間実行オペレーションの管理をご覧ください。

Cloud Storage バケットを削除する

  1. Google Cloud コンソールで、Cloud Storage の [ブラウザ] ページに移動します。

    [Cloud Storage ブラウザ] ページに移動

  2. 作成したバケットの横にあるチェックボックスをオンにします。

  3. [削除] をクリックします。

  4. 表示されるダイアログ ウィンドウで、[削除] をクリックしてバケットとそのコンテンツを削除します。