翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
による動画再生 HLS
HTTP ライブストリーミング (HLS)
ライブ再生HLSには を使用できます。レイテンシーは通常 3~5 秒ですが、ユースケース、プレイヤー、ネットワークの状態に応じて 1~10 秒になる場合があります。プログラムまたは手動でHLSストリーミングセッション を提供することでURL、サードパーティーのプレイヤー (Video.js
を使用して Kinesis ビデオストリームを表示するにはHLS、まず G セッション を使用してストリーミングetHLSStreamingURLセッションを作成します。このアクションは、セッションにアクセスするための URL (HLSセッショントークンを含む) を返します。その後、URLメディアプレーヤーまたはスタンドアロンアプリケーションで を使用してストリームを表示できます。
重要
Kinesis Video Streams に送信されたすべてのメディアを を通じて再生できるわけではありませんHLS。特定のアップロード要件GetHLSStreamingSessionURLについては、「」を参照してください。
AWS CLI を使用してHLSストリーミングセッションを取得する URL
を使用して Kinesis ビデオストリームURLのHLSストリーミングセッション AWS CLI を生成するには、以下の手順に従います。
インストール手順については、AWS Command Line Interface 「 ユーザーガイド」を参照してください。インストール後、認証情報とリージョンを使用して を設定します AWS CLI。
または、 AWS CLI がインストールされ、設定されている AWS CloudShell ターミナルを開きます。詳細については、『AWS CloudShell ユーザーガイド』を参照してください。
Kinesis ビデオストリームのHLSURLエンドポイントを取得します。
ターミナルに次のように入力します。
aws kinesisvideo get-data-endpoint \ --api-name GET_HLS_STREAMING_SESSION_URL \ --stream-name
YourStreamName
次のようなレスポンスが表示されます。
{ "DataEndpoint": "https://b-
1234abcd
.kinesisvideo.aws-region
.amazonaws.com" }返されたエンドポイントにHLSストリーミングセッションURLリクエストを行います。
次のようなレスポンスが表示されます。
{ "HLSStreamingSessionURL": "https://b-
1234abcd
.kinesisvideo.aws-region
.amazonaws.com/hls/v1/getHLSMasterPlaylist.m3u8?SessionToken=CiAz...DkRE6M
~" }重要
許可されていないエンティティがアクセスできる場所に、このトークンを共有したり保存したりしないでください。トークンがストリームのコンテンツへのアクセスを提供します。 AWS 認証情報で使用するのと同じ方法でトークンを保護します。
これURLと任意のHLSプレイヤーを使用してHLSストリームを表示できます。
例えば、VLCメディアプレーヤーを使用します。
Apple Safari または Microsoft Edge HLS ブラウザの Location バーURLにHLSストリーミングセッションを入力して、ストリームを再生することもできます。
例: HTMLと HLSで を使用する JavaScript
次の例は、 for JavaScript v2 を使用して AWS SDK Kinesis ビデオストリームのHLSストリーミングセッションを取得し、ウェブページで再生する方法を示しています。この例では、動画の再生に以下のプレーヤーを使用します。
完全なサンプルコード
コードウォークスルーのトピック:
ブラウザ用の JavaScript のインポート AWS SDK
ウェブページに次のスクリプトタグを含めて、 for JavaScript v2 を AWS SDKプロジェクトにインポートします。
<script src="https://cdnjs.cloudflare.com/ajax/libs/aws-sdk/2.490.0/aws-sdk.min.js"></script>
詳細については、AWS SDK JavaScript「」のドキュメントを参照してください。
Kinesis Video Streams クライアントのセットアップ
でストリーミングビデオにアクセスするにはHLS、まず Kinesis Video Streams クライアントを作成して設定します。その他の認証方法については、「ウェブブラウザでの認証情報の設定」を参照してください。
const clientConfig = { accessKeyId: '
YourAccessKey
', secretAccessKey: 'YourSecretKey
', region: 'us-west-2
' }; const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
アプリケーションは、HTMLページの入力ボックスから必要な値を取得します。
HLS 再生するエンドポイントを取得する
Kinesis Video Streams クライアントを使用して を呼び出しGetDataEndpointAPI、エンドポイントを取得します。
const getDataEndpointOptions = { StreamName: '
YourStreamName
', APIName: 'GET_HLS_STREAMING_SESSION_URL' }; const getDataEndpointResponse = await kinesisVideoClient .getDataEndpoint(getDataEndpointOptions) .promise(); const hlsDataEndpoint = getDataEndpointResponse.DataEndpoint;
このコードはエンドポイントを hlsDataEndpoint
変数に保存します。
Kinesis Video Streams アーカイブメディアクライアントのセットアップ
Kinesis Video Streams アーカイブメディアクライアントのクライアント設定で、前のステップで取得したエンドポイントを指定します。
const archivedMediaClientConfig = { accessKeyId: '
YourAccessKey'
, secretAccessKey: 'YourSecretKey'
, region: 'us-west-2
', endpoint: hlsDataEndpoint }; const kinesisVideoArchivedMediaClient = new AWS.KinesisVideoArchivedMedia(archivedMediaClientConfig);
HLS ストリーミングセッションを取得する URL
Kinesis Video Streams アーカイブメディアクライアントを使用して を呼び出しGetHLSStreamingSessionURLAPI、HLS再生 を取得しますURL。
const getHLSStreamingSessionURLOptions = { StreamName: '
YourStreamName
', PlaybackMode: 'LIVE' }; const getHLSStreamingSessionURLResponse = await kinesisVideoArchivedMediaClient .getHLSStreamingSessionURL(getHLSStreamingSessionURLOptions) .promise(); const hlsUrl = getHLSStreamingSessionURLResponse.HLSStreamingSessionURL;
ウェブページにHLSストリームを表示する
HLS ストリーミングセッション ができたらURL、それをビデオプレーヤーに提供します。URL をビデオプレーヤーに提供する方法は、使用するプレーヤーに固有です。
HLS 問題のトラブルシューティング
このセクションでは、Kinesis Video Streams でHTTPライブストリーミング (HLS) を使用する際に発生する可能性のある問題について説明します。
HLS ストリーミングセッションの取得はURL成功しますが、ビデオプレーヤーでの再生は失敗します
この状況は、 URLを使用してHLSストリーミングセッションを正常に取得できるがGetHLSStreamingSessionURL
、 がビデオプレーヤーに提供されるとビデオURLが再生されない場合に発生します。
この状況のトラブルシューティングを行うには、以下を試します。
-
Kinesis Video Streams コンソールでビデオストリームが再生されるかどうかを確認します。コンソールに表示されたエラーを検討します。
-
フラグメント継続時間が 1 秒未満の場合は、1 秒に増やします。フラグメントの期間が短すぎると、ビデオフラグメントのリクエストが頻繁に行われるため、サービスによってプレイヤーがスロットリングされる可能性があります。
-
各HLSストリーミングセッションURLが 1 人のプレイヤーによってのみ使用されていることを確認します。複数のプレイヤーが 1 つのHLSストリーミングセッション を使用している場合URL、サービスが受信するリクエストが多すぎてスロットリングされる可能性があります。
-
プレイヤーがHLSストリーミングセッションに指定するすべてのオプションをサポートしていることを確認します。以下のパラメータでさまざまな値の組み合わせを試します。
-
ContainerFormat
-
PlaybackMode
-
FragmentSelectorType
-
DiscontinuityMode
-
MaxMediaPlaylistFragmentResults
一部のメディアプレーヤー ( HTML5やモバイルプレーヤーなど) は、通常 HLS fMP4 コンテナ形式でのみサポートします。他のメディアプレーヤー (フラッシュプレーヤーやカスタムプレーヤーなど) HLSは、TS MPEG コンテナ形式でのみ をサポートする場合があります。トラブルシューティングを開始するには、
ContainerFormat
パラメータを試すことをお勧めします。 -
-
各フラグメントに一貫した数のトラックがあることを確認します。ストリーム内のフラグメントが、オーディオトラックとビデオトラックの両方を持つ間とビデオトラックのみを持つ間に変化していないことを確認します。また、エンコーダーの設定 (解像度とフレームレート) が各トラックのフラグメント間で変化していないことも確認します。
プロデューサーとプレーヤー間のレイテンシーが高すぎる
この状況が発生するのは、動画をキャプチャした時点から動画プレーヤーで再生した時点までのレイテンシーが高すぎる場合です。
動画はフラグメントHLSごとに再生されます。そのため、レイテンシーをフラグメント継続時間未満にすることはできません。レイテンシーには、データのバッファリングと転送の所要時間も含まれます。ソリューションで 1 秒未満のレイテンシーが必要な場合は、GetMedia
API代わりに の使用を検討してください。
以下のパラメータを調整してレイテンシー全体を短縮できますが、それに伴って画質が低下したり、再バッファリング率が高くなったりする場合があります。
-
フラグメント期間 – フラグメント期間は、ビデオエンコーダーによって生成されたキーフレームの頻度によって制御されるストリーム内の分割間のビデオの量です。推奨される値は 1 秒です。フラグメント継続時間が短いほど、動画データをサービスに転送する前にフラグメントが完了するまで待機する時間が少なくなります。また、フラグメントが短いほど、サービスでの処理が高速になります。ただし、フラグメント継続時間が短すぎると、プレーヤーでコンテンツが不足するため、停止してコンテンツをバッファリングしなければならない確率が高くなります。フラグメント継続時間が 500 ミリ秒未満の場合、プロデューサーで作成されるリクエストが多すぎて、サービスでスロットリングされることがあります。
-
ビットレート – ビットレートが低いビデオストリームでは、読み取り、書き込み、送信にかかる時間が短くなります。ただし、通常、ビデオストリームのビットレートが低いほど、画質は低下します。
-
メディアプレイリストのフラグメント数 – レイテンシーの影響を受けやすいプレイヤーは、メディアプレイリスト内の最新のフラグメントのみをロードする必要があります。ほとんどのプレイヤーは、代わりに最も早いフラグメントから開始します。プレイリスト内のフラグメントの数を減らすことで、以前のフラグメントと新しいフラグメントの時間分離を短縮できます。プレイリストのサイズが小さいほど、再生中にフラグメントがスキップされる可能性があります。これは、プレイリストに新しいフラグメントを追加するのに遅延がある場合や、プレイヤーが更新されたプレイリストを取得するのに遅延がある場合です。プレイリストから最新のフラグメントのみをロードするように設定されたプレイヤーを使用するには、3~5 個のフラグメントを使用することをお勧めします。
-
プレイヤーバッファサイズ – ほとんどのビデオプレイヤーには設定可能な最小バッファ期間があり、通常は 10 秒のデフォルトです。最も低いレイテンシーの場合、この値は 0 秒に設定できます。ただし、そうすることで、遅延を発生させるためのバッファがプレイヤーにないため、フラグメントの生成に遅延が発生した場合にプレイヤーはリバッフィングします。
-
プレイヤーの「キャッチアップ」 — 遅延したフラグメントによってフラグメントのバックログが再生されるなど、バッファがいっぱいになると、ビデオプレーヤーは通常、ビデオバッファの前面まで再生を自動的にキャッチしません。カスタムプレーヤーでは、これを避けるためにフレームをドロップするか、再生スピードを速くして (1.1 倍など)、バッファの先頭までキャッチアップできます。プレーヤーのキャッチアップに伴って、再生が途切れたり、速度が増したりします。また、バッファサイズが短いと、再バッファリングの回数が増える場合があります。