タイムシフトを使用すると、視聴者はライブストリームを開始時刻から現在時刻まで再生できます。このトピックでは、タイムシフトの仕組みとリクエストの送信方法について説明します。
ユースケース
タイムシフト機能を使用すると、視聴者は再生中にライブストリームを巻き戻すことができます。たとえば、スポーツのライブ放送中に、視聴者はタイムシフトを使用してイベントの一部を再視聴できます。
仕組み
ApsaraVideo Live は、ストリームを TS セグメントに分割し、HLS プロトコルを使用して視聴者に配信します。視聴者からの M3U8 プレイリストのリクエストには、常に更新される TS セグメントのアドレスリストが含まれます。標準の HLS ライブストリーミングでは、TS セグメントのアドレスと対応する TS ファイルは保存されません。このため、ライブストリームを巻き戻すことはできません。タイムシフトを有効にすると、ApsaraVideo Live は 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} です。
以下の表に、パラメーターの各変数を示します。
|
タイプ |
フォーマット |
単位 |
ゾーン |
|
時間の種類。有効な値は次のとおりです。
|
時間フォーマット。有効な値は次のとおりです。
|
時間単位。有効な値は次のとおりです。
|
タイムゾーン。有効な値:0〜9。UTC+* を示します。0 は UTC を示し、8 は中国標準時を示します。 説明
フォーマットを unix に設定した場合は、ゾーンを 0 に設定します。 |
以下に、タイムシフトパラメーターの例を示します。
-
lhs_start_human_s_8=20170809200010 -
lhs_start_unix_s_0=1502280113 -
lhs_end_human_s_8=20170809200010 -
lhs_vodend_unix_s_0=1502280113 -
lhs_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 のカプセル化サービスは、低遅延 HTTP ライブストリーミング (LL-HLS) や CMAF コンテナフォーマットなどの最新プロトコルを使用することで、遅延を削減します。LL-HLS は、より短いセグメント (0.2〜1 秒) とブロッキングプレイリストロードを使用することで、3〜5 秒のエンドツーエンド遅延を実現します。CMAF フォーマットは、従来の TS よりも幅広いデバイスとブラウザの互換性を提供し、H.265 などの新しいコーデックをサポートしています。
ライブストリームのカプセル化機能に慣れていない場合は、「ライブストリームのカプセル化」をご参照ください。
このセクションでは、ライブストリームのカプセル化設定が完了していることを前提としています。
カプセル化済みストリームをタイムシフト再生するために、タイムシフト設定を変更する必要はありません。カプセル化済みストリームの URL にタイムシフトパラメーターを追加するだけです。
次の例は、再生 URL を示しています。
http://<DomainName>/<AppName>/<StreamName-EncapsulationFormat.m3u8>?aliyunols=on&lhs_offset_unix_s_0=300&auth_key=3sdda******
-
カプセル化済みストリームをタイムシフト再生するには、ストリームを再プッシュする必要があります。
-
カプセル化およびトランスコード済みのストリームをタイムシフト再生するには、カプセル化およびトランスコード済みのストリームの URL にタイムシフトパラメーターを追加するだけです。
関連ドキュメント
タイムシフトの API の詳細については、「タイムシフト」をご参照ください。