タイムシフトは、ライブストリームがまだ進行中であるときに、視聴者が最初からライブストリームを見ることを可能にする。 このトピックでは、タイムシフトの仕組みと、この機能を使用するリクエストの送信方法について説明します。
タイムシフトの仕組み
タイムシフトは、HTTPライブストリーミング (HLS) プロトコルに基づいています。 HLSは、ライブストリームをTSセグメントに分解し、M3U8インデックスファイルを生成して、TSセグメントの順序をリアルタイムで記録します。 ライブストリームをリクエストすると、TSセグメントのURLを含むインデックスファイルが返されます。 一般に、TSセグメントおよび対応するURLは格納されない。 したがって、ライブストリームを巻き戻して以前にストリーミングされたコンテンツを表示することはできません。 この問題を解決するには、タイムシフトを有効にして、TSセグメントをObject Storage Service (OSS) バケットに保存し、対応するURLをデータセットに最大30日間保存します。 保持期間の指定方法については、「タイムシフトの設定」をご参照ください。
使用上の注意
この機能により、最大100,000人の視聴者が同時にライブストリームを視聴できます。 上限を引き上げたい場合は、チケットを起票してください。 詳細については、お問い合わせをご参照ください。
タイムシフトの有効化
タイムシフトを有効にするには、次のいずれかの方法を使用します。
方法1: ApsaraVideo Liveコンソールでタイムシフトを有効にします。 詳細については、「タイムシフトの設定」をご参照ください。
方法2: OpenLiveShift操作を呼び出します。
次のサンプルコードは、Java用サーバーSDKを使用してAPI操作を呼び出す方法の例を示しています。
// Replace the placeholder values with actual values.
DefaultProfile profile = DefaultProfile.getProfile("<regionId>", "<ALIBABA_CLOUD_ACCESS_KEY_ID>", "<ALIBABA_CLOUD_ACCESS_KEY_SECRET>");
IAcsClient client = new DefaultAcsClient(profile);
OpenLiveShiftRequest openLiveShiftRequest = new OpenLiveShiftRequest();
openLiveShiftRequest.setDomainName("<DomainName>");
openLiveShiftRequest.setAppName("<AppName>");
openLiveShiftRequest.setStreamName("<StreamName>");
// The retention period. Unit: day. Valid values: 1 to 30. Default value: 7.
openLiveShiftRequest.setVision("<5>");
// Specifies whether to ignore the time-shifted data of transcoded streams. Valid values: true and false. Default value: true.
openLiveShiftRequest.setIgnoreTranscode("<true>");
//
// Code for other features.
//
try {
OpenLiveShiftResponse openLiveShiftResponse = client.getAcsResponse(openLiveShiftRequest);
System.out.println(new Gson().toJson(openLiveShiftResponse));
// todo something.
} catch (ServerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClientException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
AppNameパラメーターをアスタリスク (*) に設定すると、指定されたドメイン名のすべてのライブストリームでタイムシフトが有効になります。
StreamNameパラメーターをアスタリスク (*) に設定すると、指定したアプリケーションのすべてのライブストリームでタイムシフトが有効になります。
DescribeLiveShiftConfigsを呼び出して、ドメイン名のタイムシフト設定を照会できます。
Java用サーバーSDKの詳細については、「Java用サーバーSDKの使用」をご参照ください。
タイムシフト表示のリクエストを送信する
タイムシフト表示のリクエストを作成するには、必要なパラメーターをライブストリームのHLS URLに追加します。 必要なパラメーターの形式は、lhs_{type }_{ format }_{ unit }_{ zone}
です。 リクエストの例
http://example.com/AppName/StreamName.m3u8?aliyunols=on&lhs_start_human_s_8=20171024160220&lhs_end_human_s_8=20171024160420
aliyunols
パラメーターをonに設定する必要があります。
次の表で、関連パラメーターについて説明します。
パラメーター | 説明 |
type | 時間のタイプ。 有効な値:
|
フォーマット | 時間形式。 有効な値:
|
unit | 時間の単位。 有効な値:
説明 ApsaraVideo Liveコンソールで、特定のドメイン名の有効な時間範囲と利用可能な時間シフトデータを照会できます。 詳細については、「使用状況統計」をご参照ください。 統計を取得するためのリクエストを送信することもできます。 詳細については、次のセクションを参照してください。 |
ゾーン | タイムゾーン。 有効な値: 0〜9。 値0はUTCタイムゾーンを指定します。 値8は、UTC + 8のタイムゾーンを指定します。 説明 formatパラメーターがunixに設定されている場合、zoneパラメーターを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分巻き戻します。
タイムシフト表示の有効な時間範囲を照会する
タイムシフト表示の有効な時間範囲を照会するリクエストを送信できます。 リクエストは、http://{domain}/openapi/timeline/query
の形式で、必要なパラメーターをリクエストURLに追加して作成されます。 例:
// An unsigned URL
http://example.com/openapi/timeline/query?aliyunols=on&app=bbb&stream=cc&format=ts&lhs_end_unix_s_0=1513334270&lhs_start_unix_s_0=1513334255
// A signed URL
http://example.com/openapi/timeline/query?auth_key=1606204918-0-0-3e898a5f491fedb113d17aad7c091dde&aliyunols=on&app=zzb-test&stream=zzb-shiyi&format=ts&lhs_start_unix_s_0=1606200900&lhs_end_unix_s_0=1606202520
項目 | 説明 |
リクエストメソッド | GET |
URL | リクエストのURL。 形式: |
必要なパラメーター |
|
レスポンス例:
{
"retCode": 0,
"description": "success",
"content": {
"current": 1514269063,
"timeline": [
{
"start": 1514269054,
"end": 1514269058
},
{
"start": 1514269058,
"end": 1514269062
}
]
}
}
パラメーター | 説明 |
現在 | 現在のシステム時刻 プレイヤーは時間をこのパラメーターの値に合わせます。 |
timeline | タイムシフト表示の有効な時間範囲。 |
start | UNIXタイムスタンプ形式でタイムシフト表示に使用できるセグメントの開始時刻。 単位は秒です。 |
end | UNIXタイムスタンプ形式でタイムシフト表示に使用できるセグメントの終了時刻。 単位は秒です。 |