翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
HLS によるビデオ再生
HTTP ライブストリーミング (HLS)
HLS はライブ再生に使用できます。レイテンシーは通常 3 ~ 5 秒ですが、ユースケース、プレーヤー、ネットワークの状態によっては 1 ~ 10 秒になることもあります。サードパーティー製のプレーヤー (Video.js
HLS を使用して Kinesis ビデオストリームを視聴するには、まず StreamingSessionGetHLS URL を使用してストリーミングセッションを作成します。このアクションにより、HLS セッションにアクセスするための URL (セッショントークンを含む) が返されます。次に、この URL をメディアプレーヤーまたはスタンドアロンアプリケーションで使用してストリームを表示できます。
重要
Kinesis Video Streams に送信されたすべてのメディアを HLS で再生できるわけではありません。GetHLSStreamingSessionURL特定のアップロード要件については、を参照してください。
を使用して HLS ストリーミングセッション URL を取得します。 AWS CLI
以下の手順に従って、を使用して Kinesis ビデオストリームの HLS ストリーミングセッション URL を生成します。 AWS CLI
インストール手順については、『AWS Command Line Interface ユーザーガイド』を参照してください。インストール後、認証情報とリージョンを設定します。 AWS CLI
または、 AWS CloudShell AWS CLI をインストールして設定したターミナルを開きます。詳細については、『AWS CloudShell ユーザーガイド』を参照してください。
Kinesis ビデオストリームの HLS URL エンドポイントを取得します。
ターミナルに以下を入力します。
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 ストリーミングセッション URL を入力して HLS ストリームを再生することもできます。
例:HTML で HLS を使用し、 JavaScript
次の例は、 AWS SDK for JavaScript v2 を使用して Kinesis ビデオストリームの HLS ストリーミングセッションを取得し、Web ページで再生する方法を示しています。この例では、動画の再生に以下のプレーヤーを使用します。
サンプルコード全体とホストされているウェブページについては
コード・ウォークスルー・トピック:
JavaScript ブラウザ用 AWS SDK をインポートします。
Web ページに、 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 クライアントを作成して設定します。他の認証方法については、「Web ブラウザーでの認証情報の設定」を参照してください。
const clientConfig = { accessKeyId: '
YourAccessKey
', secretAccessKey: 'YourSecretKey
', region: 'us-west-2
' }; const kinesisVideoClient = new AWS.KinesisVideo(clientConfig);
アプリケーションは、HTML ページの入力ボックスから必要な値を取得します。
HLS 再生用のエンドポイントを取得します。
Kinesis Video Streams クライアントを使用して GetDataEndpoint API を呼び出し、エンドポイントを取得します。
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 アーカイブメディアクライアントを使用して GetHLSStreamingSessionURL API を呼び出し、HLS 再生 URL を取得します。
const getHLSStreamingSessionURLOptions = { StreamName: '
YourStreamName
', PlaybackMode: 'LIVE' }; const getHLSStreamingSessionURLResponse = await kinesisVideoArchivedMediaClient.getHLSStreamingSessionURL(getHLSStreamingSessionURLOptions); const hlsUrl = getHLSStreamingSessionURLResponse.HLSStreamingSessionURL;
HLS ストリームをウェブページに表示します。
HLS ストリーミングセッション URL がある場合、それをビデオプレーヤーに指定します。URL をビデオプレーヤーに指定する方法は、使用するプレーヤーごとに異なります。
HLS 問題のトラブルシューティング
このセクションでは、Kinesis Video Streams で (HLS) HTTP Live Streaming を使用するときに発生する可能性がある問題について説明します。
HLS ストリーミングセッション URL の取得は成功するが、ビデオプレーヤーで再生が失敗する
この状況が発生するのは、HLS ストリーミングセッション URL は GetHLSStreamingSessionURL
を使用して正常に取得できるが、この URL をビデオプレーヤーに指定したときに動画が再生されない場合です。
この状況のトラブルシューティングを行うには、以下を試します。
-
Kinesis Video Streams コンソールでビデオストリームが再生されるかどうかを確認します。コンソールに表示されたエラーを検討します。
-
フラグメント継続時間が 1 秒未満の場合は、1 秒に増やします。フラグメントの期間が短すぎると、動画フラグメントのリクエストが頻繁に行われるため、サービスがプレーヤーを制限する可能性があります。
-
各 HLS ストリーミングセッション URL を 1 つのプレーヤーでのみ使用していることを確認します。1 つの HLS ストリーミングセッション URL を複数のプレーヤーで使用している場合、サービスが受け取るリクエストが多すぎて、プレーヤーがスロットリングされることがあります。
-
HLS ストリーミングセッションに指定したオプションをプレーヤーがすべてサポートしていることを確認してください。以下のパラメータでさまざまな値の組み合わせを試します。
-
ContainerFormat
-
PlaybackMode
-
FragmentSelectorType
-
DiscontinuityMode
-
MaxMediaPlaylistFragmentResults
通常、一部のメディアプレーヤー (HTML5 やモバイルプレイヤーなど) は、fMP4 コンテナ形式の HLS のみをサポートします。他のメディアプレーヤー (Flash やカスタムプレーヤーなど) は MPEG TS コンテナ形式の HLS のみをサポートしている場合があります。トラブルシューティングを開始するには、
ContainerFormat
パラメーターを試してみることをお勧めします。 -
-
各フラグメントに一貫した数のトラックがあることを確認します。ストリーム内のフラグメントが、オーディオトラックとビデオトラックの両方を含むか、ビデオトラックのみを含むかの間で変化していないことを確認します。また、エンコーダー設定 (解像度とフレームレート) が各トラックのフラグメント間で変化していないことも確認してください。
プロデューサーとプレーヤー間のレイテンシーが高すぎる
この状況が発生するのは、動画をキャプチャした時点から動画プレーヤーで再生した時点までのレイテンシーが高すぎる場合です。
動画は HLS を介してフラグメント単位で再生されます。そのため、レイテンシーをフラグメント継続時間未満にすることはできません。レイテンシーには、データのバッファリングと転送の所要時間も含まれます。ソリューションで 1 秒未満のレイテンシーが必要な場合は、代わりに GetMedia
API を使用することを検討してください。
以下のパラメータを調整してレイテンシー全体を短縮できますが、それに伴って画質が低下したり、再バッファリング率が高くなったりする場合があります。
-
フラグメントデュレーション — フラグメントデュレーションは、ビデオエンコーダーが生成するキーフレームの頻度によって制御される、ストリームのディビジョン間のビデオ量です。推奨される値は 1 秒です。フラグメント継続時間が短いほど、動画データをサービスに転送する前にフラグメントが完了するまで待機する時間が少なくなります。また、フラグメントが短いほど、サービスでの処理が高速になります。ただし、フラグメント継続時間が短すぎると、プレーヤーでコンテンツが不足するため、停止してコンテンツをバッファリングしなければならない確率が高くなります。フラグメント継続時間が 500 ミリ秒未満の場合、プロデューサーで作成されるリクエストが多すぎて、サービスでスロットリングされることがあります。
-
ビットレート — ビットレートが低いビデオストリームほど、読み取り、書き込み、送信にかかる時間が短くなります。ただし、通常、ビデオストリームのビットレートが低いほど、画質は低下します。
-
メディアプレイリストのフラグメント数 — レイテンシーの影響を受けやすいプレーヤーは、メディアプレイリスト内の最新のフラグメントのみを読み込む必要があります。ほとんどのプレーヤーは、代わりに一番早いフラグメントから開始します。プレイリスト内のフラグメントの数を減らすことで、前のフラグメントと新しいフラグメントの間の時間間隔を狭めることができます。プレイリストのサイズを小さくすると、プレイリストへの新しいフラグメントの追加が遅れたり、プレーヤーが更新されたプレイリストを取得するのに遅延が生じたりすると、再生中にフラグメントがスキップされる可能性があります。3 ~ 5 個のフラグメントを使用し、プレイリストから最新のフラグメントだけを読み込むように設定されたプレーヤーを使用することをおすすめします。
-
プレーヤーのバッファサイズ — ほとんどの動画プレーヤーでは、最小バッファ時間が設定可能で、通常はデフォルトは 10 秒です。最も低いレイテンシーの場合、この値は 0 秒に設定できます。ただし、そうすると、プレーヤーには遅延を吸収するバッファーがなくなるため、遅延が発生するとフラグメントが生成され、再バッファされます。
-
プレーヤーの「catch アップ」 — 通常、ビデオプレーヤーは、遅延フラグメントが原因でフラグメントのバックログが再生されるなど、バッファーがいっぱいになっても、ビデオバッファーの先頭まで自動的に再生をcatch しません。カスタムプレーヤーでは、これを避けるためにフレームをドロップするか、再生スピードを速くして (1.1 倍など)、バッファの先頭までキャッチアップできます。プレーヤーのキャッチアップに伴って、再生が途切れたり、速度が増したりします。また、バッファサイズが短いと、再バッファリングの回数が増える場合があります。