このページでは、ライブ ストリームの上に静的なオーバーレイ画像を生成する方法について説明します。静的なオーバーレイ画像は、ライブ配信全体で維持されます。静的オーバーレイ画像の解像度と位置を構成できます。
Google Cloud プロジェクトと認証を設定する
Google Cloud プロジェクトと認証情報を作成していない場合は、始める前にをご覧ください。画像を Cloud Storage バケットにアップロードします。
- Google Cloud コンソールで、[Cloud Storage ブラウザ] ページに移動します。
[Cloud Storage ブラウザ] ページに移動 - バケットの名前をクリックしてバケットを開きます。
- [ファイルをアップロード] をクリックします。
- ローカルマシンからアップロードする画像ファイル(JPEG または PNG)を選択します。このサンプル オーバーレイ画像を使用できます。
画像は Cloud Storage バケットに保存されました。
アセットを作成する
アセットとは、Live Stream API で使用できる動画または画像です。静的オーバーレイとして使用する画像アセットを作成します。
アセットを作成するには、projects.locations.assets.create メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER: プロジェクト番号。IAM 設定ページの [プロジェクト番号] フィールドにあります。 Google CloudLOCATION: アセットを作成するロケーション。以下に示すサポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
ASSET_ID: 作成する新しいアセットのユーザー定義の識別子。この値は 1~63 文字で、先頭と末尾は[a-z0-9]で、文字の間にダッシュ(-)を含めることができます。たとえば、my-assetです。ASSET_URI: Cloud Storage バケットで使用する画像の URI(例:gs://my-bucket/my-image.png)。
リクエストの本文(JSON):
{
"image": {
"uri": "ASSET_URI"
}
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような 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/assets/ASSET_ID",
"verb": "create",
"requestedCancellation": false,
"apiVersion": "v1"
},
"done": false
}
返された OPERATION_ID をコピーして、次のセクションで使用します。
結果を確認する
アセットが作成されたかどうかを確認するには、projects.locations.operations.get メソッドを使用します。レスポンスに "done: false" が含まれている場合は、レスポンスに "done: true" が含まれるまでコマンドを繰り返します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER: プロジェクト番号。IAM 設定ページの [プロジェクト番号] フィールドにあります。 Google CloudLOCATION: アセットがあるロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
OPERATION_ID: オペレーションの 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,
"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"
}
}
入力エンドポイントを作成する
入力エンドポイントを作成するには、projects.locations.inputs.create メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER: プロジェクト番号。IAM 設定ページの [プロジェクト番号] フィールドにあります。 Google CloudLOCATION: 入力エンドポイントを作成するロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-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
}
新しいオペレーション ID を使用して、入力作成オペレーションの結果を確認できます。
# 入力エンドポイントの詳細
入力エンドポイントの詳細を取得するには、projects.locations.inputs.get メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER: プロジェクト番号。IAM 設定ページの [プロジェクト番号] フィールドにあります。 Google CloudLOCATION: 入力エンドポイントが配置されているロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-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 ソッドを使用します。
チャネル構成の staticOverlays 配列に注目してください。
"staticOverlays": [
{
"asset": "projects/PROJECT_NUMBER/locations/LOCATION/assets/ASSET_ID",
"position": {
"x": 0.5,
"y": 0.5
},
"resolution": {
"w": 0.1
},
"opacity": 0.8
}
],
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER: プロジェクト番号。IAM 設定ページの [プロジェクト番号] フィールドにあります。 Google CloudLOCATION: チャネルを作成するロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-west4
CHANNEL_ID: 作成するチャネルのユーザー定義の識別子。この値は 1~63 文字で、先頭と末尾は[a-z0-9]で、文字の間にダッシュ(-)を含めることができます。INPUT_ID: 入力エンドポイントのユーザー定義の識別子BUCKET_NAME: ライブ ストリームのマニフェスト ファイルとセグメント ファイルを保持するために作成した Cloud Storage バケットの名前ASSET_ID: アセットのユーザー定義の識別子。
リクエストの本文(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
}
]
}
リクエストを送信するには、次のいずれかのオプションを展開します。
次のような 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
}
新しいオペレーション ID を使用して、チャネル作成オペレーションの結果を確認できます。
チャネルを開始する
チャネルを開始するには、projects.locations.channels.start メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER: プロジェクト番号。IAM 設定ページの [プロジェクト番号] フィールドにあります。 Google CloudLOCATION: チャネルがあるロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示us-central1us-east1us-east4us-west1us-west2northamerica-northeast1southamerica-east1asia-east1asia-east2asia-south1asia-northeast1asia-southeast1australia-southeast1europe-north1europe-west1europe-west2europe-west3europe-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
}
新しいオペレーション ID を使用して、チャネル開始オペレーションの結果を確認できます。
入力ストリームを送信する
新しいターミナル ウィンドウを開きます。入力エンドポイントの詳細を取得するセクションの 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
生成されたライブ ストリームを再生する
Shaka Player で生成されたメディア ファイルを再生するには、次の手順に従います。
- 作成した Cloud Storage バケットを一般公開します。
- Cloud Storage バケットでクロスオリジン リソース シェアリング(CORS)を有効にするには、次のようにします。
- 次の内容を含む JSON ファイルを作成します。
[ { "origin": ["https://shaka-player-demo.appspot.com/"], "responseHeader": ["Content-Type", "Range"], "method": ["GET", "HEAD"], "maxAgeSeconds": 3600 } ] -
JSON_FILE_NAMEを前の手順で作成した JSON ファイルの名前に置き換えてから、次のコマンドを実行します。gcloud storage buckets update gs://BUCKET_NAME --cors-file=JSON_FILE_NAME.json
- 次の内容を含む JSON ファイルを作成します。
- Cloud Storage バケットで、生成された
main.m3u8ファイルを探します。ファイルの [公開アクセス] 列で [URL をコピー] をクリックします。 - オンライン ライブ ストリーム プレーヤーの Shaka Player に移動します。
- 上部のナビゲーション バーにある [CUSTOM CONTENT](カスタム コンテンツ)をクリックします。
- [+] ボタンをクリックします。
ファイルの公開 URL を [Manifest URL] ボックスに貼り付けます。

[Name] ボックスに名前を入力します。
[保存] をクリックします。
[Play] をクリックします。
ライブ配信の上にオーバーレイが表示されます。