このページでは、Live Stream API を使用してライブ ストリームからビデオ オンデマンド(VOD)クリップを作成する方法について説明します。VOD クリップは、ライブ ストリームから保存された HLS マニフェスト ファイルとセグメント ファイルで構成されています。HLS マニフェストのみがサポートされています。
Google Cloud プロジェクトと認証の設定
Google Cloud プロジェクトと認証情報を作成していない場合は、始める前にをご覧ください。入力エンドポイントを作成する
入力エンドポイントを作成するには、projects.locations.inputs.create
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER
: IAM 設定ページの [プロジェクト番号] フィールドにある Google Cloud プロジェクト番号LOCATION
: 入力エンドポイントを作成するロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示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
: 作成する新しい入力エンドポイントのユーザー定義の識別子(入力ストリームの送信先)。この値は 1~63 文字で、先頭と末尾は[a-z0-9]
で、文字の間にダッシュ(-)を含めることができます。たとえば、my-input
です。
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような 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
: IAM 設定ページの [プロジェクト番号] フィールドにある Google Cloud プロジェクト番号LOCATION
: 入力エンドポイントが配置されているロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示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
: 入力エンドポイントのユーザー定義の識別子
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような 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)のレンディションで構成されます。
VOD クリップの作成を有効にするには、チャネル構成に retentionConfig
オブジェクトを追加します。
"retentionConfig": {
"retentionWindowDuration": {
"seconds": 86400
}
},
ライブ配信チャンネルで保持が有効になっている場合、セグメント ファイルとマニフェスト ファイルは VOD クリップを作成するために保持されます。retentionWindowDuration
オブジェクトには、Cloud Storage にアップロードされた後、ライブ配信の出力を保存する時間を指定します。保持期間は、Cloud Storage でセグメントが作成された時点から始まります。保持期間は 30 日間に制限されています。保持期間が経過すると、セグメントは Cloud Storage から自動的に削除されます。削除されたセグメントを使用して VOD クリップを作成することはできません。削除プロセスは非同期で、完了までに 24 時間ほどかかることがあります。
VOD クリップの作成を有効にするには、マニフェストのキーを指定します。実際にクリップを作成するときに、このキーを参照します。HLS マニフェストのみがサポートされています。
"manifests": [
{
...
"key": "manifest_hls"
}
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER
: IAM 設定ページの [プロジェクト番号] フィールドにある Google Cloud プロジェクト番号LOCATION
: チャネルを作成するロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示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
: 作成するチャネルのユーザー定義の識別子。この値は 1~63 文字で、先頭と末尾は[a-z0-9]
で、文字の間にダッシュ(-)を含めることができます。INPUT_ID
: 入力エンドポイントのユーザー定義の識別子BUCKET_NAME
: ライブ ストリームのマニフェスト ファイルとセグメント ファイルを保持するために作成した Cloud Storage バケットの名前
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような 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
: IAM 設定ページの [プロジェクト番号] フィールドにある Google Cloud プロジェクト番号LOCATION
: チャネルがあるロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示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
: チャネルのユーザー定義の識別子。
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような 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)を作成します。詳しくは、長時間実行オペレーションの管理をご覧ください。
入力ストリームを送信する
新しいターミナル ウィンドウを開きます。入力エンドポイントの詳細を取得するセクションの 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
VOD クリップを作成する
VOD クリップを作成するには、projects.locations.channels.clips.create
メソッドを使用します。
outputUri
フィールドを使用して、Cloud Storage にクリップとクリップ マニフェスト ファイルを保存する場所を指定します。ライブ配信マニフェスト用に作成したバケットと同じバケットを使用することも、別のバケットを使用することもできます。バケット名にディレクトリ名を追加することもできます(例: my-bucket/vod-clip
)。
clipManifests
配列の manifestKey
フィールドを使用して、クリップを保存するマニフェストを指定します。このページのチャネル構成の例では、このキーは manifest_hls
に設定されています。
slices
配列に timeSlice
オブジェクトを追加すると、ライブ配信の複数のタイムセクションを 1 つのクリップにまとめることができます。
"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"
}
}
]
次の点にご注意ください。
- 各クリップには、
slices
にtimeSlice
が少なくとも 1 つ含まれている必要があります。 clipManifests.manifestKey
フィールドは、クリップの親チャンネルで定義された HLS マニフェストを参照する必要があります。クリップジョブの作成リクエストが成功すると、生成されたクリップ マニフェストの URI がclipManifests.outputUri
フィールドに返されます。この URI は、クリップのoutputUri
フィールドで指定されたパスにあります。clipManifests
配列は、リクエストごとに 1 つのマニフェストのみをサポートします。同じクリップジョブに対して複数のマニフェストを生成する場合は、マニフェストを複数のクリップジョブ リクエストに分割する必要があります。- クリップ スライスは均質である必要があります。すべての要素は
timeSlice
型である必要があります。 timeSlice
オブジェクトのセットは重複せず、時系列順に並べられている必要があります。markinTime
は、すべてのtimeSlice
でmarkoutTime
より前である必要があります。- クリップの最新の
markinTime
がチャンネルの開始時間または保持期間の開始時間よりも前の場合、マークイン時間は 2 つの時間のうち遅い方に設定されます。 - クリップの最新の
markoutTime
がチャンネルの停止時間より後の場合は、チャンネルの停止時間に設定されます。クリップの最新のmarkoutTime
が現在のシステムの壁時計時間より後の場合、API がクリッピング タスクを実際に開始した時刻に設定されます。 - クリップの最大時間は 24 時間です。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER
: IAM 設定ページの [プロジェクト番号] フィールドにある Google Cloud プロジェクト番号LOCATION
: チャネルがあるロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示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
: チャネルのユーザー定義の識別子。CLIP_ID
: VOD クリップのユーザー定義の識別子。MARK_IN_TIME
: RFC3339 UTC「Zulu」形式のタイムスタンプを使用した、元のライブ配信マニフェストのマークイン Unix エポック時間。(例:2014-10-02T15:01:23Z
)。MARK_OUT_TIME
: 元のライブ配信マニフェストのマークアウトの Unix エポック時間。RFC3339 UTC「Zulu」形式のタイムスタンプを使用します(例:2014-10-02T15:01:23Z
)。BUCKET_NAME
: VOD クリップのマニフェスト ファイルとセグメント ファイルを保持するために作成した Cloud Storage バケットの名前。ライブ ストリームのマニフェスト用に作成したバケットと同じバケットを使用するか、別のバケットを使用できます。また、バケット名にディレクトリ名を追加することもできます(my-bucket/vod-clip
など)。
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような 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/clips/CLIP_ID", "verb": "create", "requestedCancellation": false, "apiVersion": "v1" }, "done": false }
このコマンドは、リクエストの進行状況を追跡するために使用できる長時間実行オペレーション(LRO)を作成します。詳しくは、長時間実行オペレーションの管理をご覧ください。
VOD クリップを取得する
VOD クリップを取得するには、projects.locations.channels.clips.get
メソッドを使用します。
リクエストのデータを使用する前に、次のように置き換えます。
PROJECT_NUMBER
: IAM 設定ページの [プロジェクト番号] フィールドにある Google Cloud プロジェクト番号LOCATION
: チャネルがあるロケーション。サポートされているリージョンのいずれかを使用します。ロケーションを表示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
: チャネルのユーザー定義の識別子。CLIP_ID
: VOD クリップのユーザー定義の識別子。
リクエストを送信するには、次のいずれかのオプションを開きます。
次のような JSON レスポンスが返されます。
{ "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" } ] }
生成されたマニフェストは、clipManifests.outputUri
フィールドで指定された URI にあります。マニフェストのファイル名は、親チャネルの manifests.fileName
フィールド値と同じです。
レスポンスには以下が含まれます。
{
...
"state": "SUCCEEDED"
...
}
projects.locations.channels.clips.get
メソッドを使用すると、チャンネルごとに最新の 1,000 件のクリップジョブ レコードのみが使用できます。上限を超えたクリップジョブ レコードは削除されます。生成されたクリップ ファイルは outputUri
で指定する必要があります。Live Stream API はこれらのファイルを Cloud Storage から削除しません。
バケットの内容を確認する
クリップの outputUri
フィールドで指定されているように、Cloud Storage バケットを開きます。次のファイルとディレクトリが含まれていることを確認します。
- チャンネル構成で指定された
manifests.fileName
と同じ名前のクリップのトップレベル マニフェスト(main.m3u8
など)。このマニフェストは、オンライン メディア プレーヤーを使用して再生できます。 - チャネルで指定された
muxStreams.key
ごとにディレクトリ(例:mux_video_ts
)- クリップの再生リスト(例:
index-1.m3u8
) YYYYMMDDTHHMMSSZ
の形式(20220708T203309Z/
など)で名前が付けられたディレクトリ。このディレクトリには VOD クリップのセグメントが格納されます。- VOD クリップを構成する複数のセグメント
segment-number.ts
ファイル
- VOD クリップを構成する複数のセグメント
- クリップの再生リスト(例:
VOD クリップを再生する
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 バケットで、生成されたファイルを探します。ファイルの [公開アクセス] 列で [URL をコピー] をクリックします。
- オンライン ライブ ストリーム プレーヤーの Shaka Player に移動します。
- 上部のナビゲーション バーにある [CUSTOM CONTENT](カスタム コンテンツ)をクリックします。
- [+] ボタンをクリックします。
ファイルの公開 URL を [Manifest URL] ボックスに貼り付けます。
[Name] ボックスに名前を入力します。
[Save] をクリックします。
[Play] をクリックします。
ライブ ストリームとしてテストパターンが再生されます。
ミッドロール挿入点イベントとスレート イベント
ライブ配信にミッドロール挿入点イベントを作成した場合、VOD クリップには広告は含まれません。API は、広告ブレークポイントが次のタグに置き換えられた再生リストを生成します。
#EXT-X-CUE-OUT: AD_BREAK_DURATION
#EXT-X-CUE-IN
VOD クリップの先頭または末尾に表示されるスレートは自動的に削除されます。ストリーム内に表示されるスレートは、ライブ配信コンテンツに囲まれて生成された VOD クリップに保持されます。