タイムシフト機能を使用すると、ライブストリームを開始時刻から現在時刻まで再生できます。このトピックでは、タイムシフトの仕組みとリクエストの送信方法について説明します。
利用シーン
タイムシフト機能により、視聴者は再生中にライブストリームを巻き戻すことができます。例えば、スポーツのライブブロードキャスト中に、視聴者はタイムシフトを使用して、映画やテレビ番組を視聴するようにイベントの一部を再視聴できます。
仕組み
ApsaraVideo Live のストリームは、Transport Stream (TS) セグメントに分割され、HTTP Live Streaming (HLS) プロトコルを使用して視聴者に配信されます。視聴者からの M3U8 プレイリストのリクエストには、常に更新される TS セグメントアドレスのリストが含まれています。標準の HLS ライブストリーミングでは、TS セグメントアドレスとそれに対応する TS ファイルは保存されません。これは、ライブストリームを巻き戻すことができないことを意味します。タイムシフト機能を有効にすると、TS セグメントの情報とファイルが保存されます。これにより、ライブストリームの開始から現在時刻までビデオを巻き戻すことができます。
制限事項
タイムシフトは、最大 100,000 人の同時視聴者をサポートします。より多くの視聴者をサポートするには、チケットを送信してください。チケットの送信方法の詳細については、「お問い合わせ」をご参照ください。
機能の利用
タイムシフトを使用するには、次の 2 つのステップを完了する必要があります。
タイムシフト機能の設定
説明ライブストリームのコンテンツを保存し、タイムシフトを有効にするには、この機能を設定する必要があります。
クライアントからのタイムシフト機能利用リクエストの送信
タイムシフト機能の設定
タイムシフト機能の利用
タイムシフトを設定すると、ApsaraVideo Live はライブストリームの TS セグメントファイルを保存します。その後、クライアントはタイムシフト再生リクエストを送信して、ライブコンテンツを再生できます。
次の例は、タイムシフト再生リクエストを示しています。
http://<DomainName>/<AppName>/<StreamName.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******例に示すように、タイムシフトリクエストは M3U8 ファイルのライブストリーミング URL に似ていますが、2 つの追加パラメーターが含まれています。aliyunols=on は固定フィールドで、lhs_offset_unix_s_0=300 は 300 秒の巻き戻しを示します。
CDN を介してタイムシフトリクエストを送信する場合、
aliyunols=onパラメーターを含める必要があります。現在、タイムシフト再生は
M3U8形式のライブストリーミング URL のみをサポートしています。ApsaraVideo Player を使用して、タイムシフトされたコンテンツを再生できます。ApsaraVideo Player の使用方法の詳細については、「Player SDK」をご参照ください。
この例では、ライブコンテンツは 300 秒巻き戻されます。タイムシフトされたコンテンツを再生する場合、lhs_offset_unix_s_0 パラメーターを使用して再生時間を設定できます。パラメーターの形式は lhs_{type}_{format}_{unit}_{zone} です。
次の表に、パラメーターの変数を説明します。
type | format | unit | zone |
時間タイプ。有効値:
| タイムシフトの時間形式。有効値:
| タイムシフトの時間単位。有効値:
| タイムゾーン。有効値:0 から 9。これは UTC+* を示します。0 は UTC を示し、8 は中国標準時を示します。 説明 format を unix に設定した場合、zone を 0 に設定してください。 |
次の例は、タイムシフトパラメーターを示しています。
lhs_start_human_s_8=20170809200010lhs_start_unix_s_0=1502280113lhs_end_human_s_8=20170809200010lhs_vodend_unix_s_0=1502280113lhs_offset_unix_ms_0=1800000(30 分巻き戻し)
lhs_startまたはlhs_offsetのいずれかを指定する必要があります。lhs_startとlhs_offsetの両方を指定した場合、タイムシフト再生はlhs_offsetに基づいて行われます。lhs_end/lhs_vodendはオプションのパラメーターです。lhs_end/lhs_vodendを指定しない場合、再生はアップストリーミングが終了するまでライブモードで継続されます。lhs_endを指定した場合、再生は指定されたlhs_end時刻までライブモードで継続されます。lhs_vodendを指定した場合、再生は指定されたlhs_vodend時刻まで VOD モードで継続されます。VOD モードでは、すべての TS セグメントが一度に返されます。プレーヤーのプログレスバーを使用して早送りや巻き戻しができます。lhs_endとlhs_vodendの両方を指定した場合、lhs_vodendが優先されます。
ビジネスで特定の start と end の時刻がわからない場合は、タイムシフトのタイムラインをクエリして取得できます。
次の例は、タイムシフトのタイムラインをクエリする方法を示しています。
// 角度括弧 (<>) 内の値を実際の値に置き換えてください。
http://<DomainName>/openapi/timeline/query?aliyunols=on&app=<AppName>&stream=<StreamName>&format=ts&lhs_start_unix_s_0=<StartTime>&lhs_end_unix_s_0=<endTime>&auth_key=<auth_key>以下に例を示します。
名前 | 説明 |
リクエストメソッド | GET |
URL | リクエスト URL。例: |
パラメーター |
|
一般的なエラー処理 |
|
次の例は、サンプル応答を示しています。
{
"retCode": 0,
"description": "success",
"content": {
"current": 1514269063,
"timeline": [
{
"start": 1514269054,
"end": 1514269058
}
]
}
}パラメーター | 説明 |
current | 現在のシステム時刻。プレーヤーはこのフィールドを使用して時刻を同期できます。 |
timeline | 有効なタイムシフト期間。開始と終了の UNIX タイムスタンプが含まれます。 |
start | 有効なセグメントの開始時刻 (UNIX タイムスタンプ)。単位:秒。 |
end | 有効なセグメントの終了時刻 (UNIX タイムスタンプ)。単位:秒。 |
通常、1 回のアップストリーミングで 1 つのタイムラインオブジェクトが生成されます。start 時刻はライブストリームの開始時刻に近く、end 時刻は現在時刻またはライブストリームの終了時刻に近いです。ただし、ストリームの中断、再アップストリーミング、ネットワークの変動などの要因により、複数のタイムラインオブジェクトが生成される場合があります。
コンソールで特定のドメインのタイムシフトデータ量をクエリできます。詳細については、「使用量のクエリ」をご参照ください。
高度な利用
タイムシフトによるトランスコードストリームの再生
タイムシフト機能とトランスコード機能を組み合わせて、トランスコードされたストリームを再生できます。タイムシフトでトランスコードされたストリームを再生するには、まずトランスコードを設定する必要があります。トランスコードの設定方法の詳細については、「ライブストリームのトランスコード」をご参照ください。
このセクションでは、トランスコード設定が完了していることを前提としています。
タイムシフトを設定する際には、トランスコードされたストリームのタイムシフトデータも生成する必要があります。次の例は、サンプルコードを示しています。
// タイムシフトデータを生成する際に、対応するトランスコードストリームを無視するかどうかを指定します。有効値: true および false。デフォルト値: true。
openLiveShiftRequest.setIgnoreTranscode("<false>");タイムシフト再生を有効にするには、トランスコードされたストリーム URL にタイムシフトパラメーターを追加します。
次の例は、再生 URL を示しています。
http://<DomainName>/<AppName>/<StreamName_TranscodingTemplateID.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******タイムシフトでトランスコードされたストリームを再生するには、ストリームを再アップストリーミングする必要があります。
ストリームフェッチングによってトリガーされるトランスコード設定の場合、タイムシフトでトランスコードされたストリームを再生してもトランスコードはトリガーされません。トランスコードをトリガーするには、事前にライブのトランスコードストリームを再生する必要があります。また、アップストリーミングによってトランスコードがトリガーされるように設定することもできます。
現在、タイムシフト機能はマルチビットレートのトランスコードストリームをサポートしていません。
タイムシフトによるカプセル化ストリームの再生
タイムシフトでカプセル化されたストリームを再生するには、タイムシフト 機能と ライブストリームのカプセル化 機能を組み合わせて使用します。
ApsaraVideo Live は、ライブストリームカプセル化サービスをサポートしています。このサービスは、CMAF や Low-Latency HTTP Live Streaming (LL-HLS) などの再生プロトコルをサポートし、ライブストリーミングの遅延を効果的に削減します。ライブストリームカプセル化を有効にすると、ApsaraVideo Live ストリームは TS または CMAF セグメントに分割されます。セグメントは、指定された HLS または LL-HLS プロトコルを使用して視聴者に配信されます。視聴者がリクエストする M3U8 プレイリストには、常に更新されるセグメントアドレスのリストが含まれています。HLS と比較して、LL-HLS はストリームを 0.2 秒から 1 秒の持続時間でより小さなパーツに分割できます。また、M3U8 プレイリストとパーツのブロッキングロードもサポートしています。これにより、エンドツーエンドの遅延を 3〜5 秒という低さで実現します。TS 形式と比較して、CMAF コンテナフォーマットはより広範なデバイスやブラウザでサポートされています。また、H.265 などの新しいコーデックもサポートしています。
ライブストリームカプセル化機能に慣れていない場合は、「ライブストリームカプセル化」をご参照ください。
このセクションでは、ライブストリームカプセル化設定が完了していることを前提としています。
タイムシフトでカプセル化されたストリームを再生するには、タイムシフト設定を変更する必要はありません。カプセル化されたストリーム URL にタイムシフトパラメーターを追加するだけです。
次の例は、再生 URL を示しています。
http://<DomainName>/<AppName>/<StreamName-ContainerFormat.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******タイムシフトでカプセル化されたストリームを再生するには、ストリームを再アップストリーミングする必要があります。
カプセル化およびトランスコードされたストリームをタイムシフトで再生するには、カプセル化およびトランスコードされたストリーム URL にタイムシフトパラメーターを追加するだけです。
関連ドキュメント
タイムシフトの API の詳細については、「タイムシフト」をご参照ください。
