すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo Live:タイムシフト

最終更新日:Aug 20, 2026

タイムシフトを使用すると、視聴者はライブストリームを開始時刻から現在時刻まで再生できます。このトピックでは、タイムシフトの仕組みとリクエストの送信方法について説明します。

ユースケース

タイムシフト機能を使用すると、視聴者は再生中にライブストリームを巻き戻すことができます。たとえば、スポーツのライブ放送中に、視聴者はタイムシフトを使用してイベントの一部を再視聴できます。

仕組み

ApsaraVideo Live は、ストリームを TS セグメントに分割し、HLS プロトコルを使用して視聴者に配信します。視聴者からの M3U8 プレイリストのリクエストには、常に更新される TS セグメントのアドレスリストが含まれます。標準の HLS ライブストリーミングでは、TS セグメントのアドレスと対応する TS ファイルは保存されません。このため、ライブストリームを巻き戻すことはできません。タイムシフトを有効にすると、ApsaraVideo Live は TS セグメントの情報とファイルを保存します。これにより、ライブストリームの開始時点から現在時刻まで、ビデオの巻き戻しが可能になります。

制限事項

タイムシフトは、最大 100,000 人の同時視聴者数をサポートしています。より多くの視聴者をサポートするには、チケットを送信してください。詳細については、「お問い合わせ」をご参照ください。

使用方法

説明
  • タイムシフト機能の使用には、タイムシフト料金が発生します。料金は、タイムシフトのデータ書き込み量とタイムシフト再生の仕様に基づいて請求されます。課金ルールの詳細については、「タイムシフト料金」をご参照ください。

  • タイムシフト機能に対応しているリージョンの詳細については、「サポート対象リージョン」をご参照ください。

タイムシフトを使用するには、次の 2 つの手順を完了する必要があります。

  1. タイムシフト機能を設定します。

    説明

    タイムシフトのためにライブストリームのコンテンツを保存するには、この機能を有効にする必要があります。

  2. クライアントからリクエストを送信して、タイムシフト機能を使用します。

タイムシフトの設定

コンソールでのタイムシフト設定

  1. ApsaraVideo Live コンソールにログインします。

  2. 左側メニューで、機能管理 > タイムシフト を選択し、タイムシフト ページに移動します。

  3. 設定するストリーミングドメインを選択します。

  4. 追加 をクリックします。

  5. タイムシフトを設定します。

    以下の表では、タイムシフト設定のパラメーターについて説明します。

    パラメーター

    説明

    [アプリケーション名]

    アプリケーション名。この設定は、アプリケーション名 がストリーム取り込みに使用される アプリケーション名 と一致する場合にのみ有効になります。名前は最大 255 文字で、数字、大文字、小文字、ハイフン (-)、アンダースコア (_) を含めることができます。名前の先頭にハイフンとアンダースコアは使用できません。ドメインレベルでタイムシフトを設定するには、アスタリスク (*) を入力します。

    [StreamName]

    ストリーム名。アスタリスク (*) を設定すると、指定した AppName 配下のすべてのライブストリームに設定を適用できます。

    [トランスコーディングストリーム]

    • [ソースストリームのみ]:オリジナルストリームのみがタイムシフトをサポートします。

    • [トランスコーディングストリームが含まれる]:オリジナルストリームとトランスコードされたストリームの両方がタイムシフトをサポートします。

    [タイムシフトコンテンツの保持日数]

    ApsaraVideo Live では、以下の保持期間が提供されます。

    • 1日

    • 3日

    • 7日

    • 15日

    • 30日

    説明
    • タイムシフトを設定した後、設定を有効にするには、ストリームを再プッシュする必要があります。

    • ストリーミングドメインに対応する URL を使用して、タイムシフトされたストリームに直接アクセスできます。URL 仕様の詳細については、「タイムシフトのルール」をご参照ください。

    • プライマリストリーミングドメインがサブストリーミングドメインに関連付けられている場合は、サブストリーミングドメインのタイムシフトを有効にする必要があります。そうしないと、タイムシフト設定はサブストリーミングドメインに対して有効になりません。

  6. [OK] をクリックします。

API を使用したタイムシフトの設定

// このファイルは自動生成されたものです。編集しないでください。
package com.aliyun.sample;
import com.aliyun.tea.*;
public class Sample {
    /**
     * <b>説明</b> :
     * <p>認証情報を使用してクライアントを初期化します。</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.live20161101.Client createClient() throws Exception {
        // 本番環境では、より安全な認証情報不要の方法を使用することを推奨します。認証情報の設定方法の詳細については、https://www.alibabacloud.com/help/document_detail/378657.html をご参照ください。
        com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
                .setCredential(credential);
        // エンドポイントについては、https://api.alibabacloud.com/product/live をご参照ください。
        config.endpoint = "live.aliyuncs.com";
        return new com.aliyun.live20161101.Client(config);
    }
    public static void main(String[] args_) throws Exception {
        com.aliyun.live20161101.Client client = Sample.createClient();
        com.aliyun.live20161101.models.OpenLiveShiftRequest openLiveShiftRequest = new com.aliyun.live20161101.models.OpenLiveShiftRequest()
                .setRegionId("<Your RegionId>")
                .setDomainName("<Your DomainName>")
                .setAppName("<Your AppName>")
                .setStreamName("<Your StreamName>");
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // コードをコピーして実行する際は、ご自身で API レスポンスを出力してください。
            client.openLiveShiftWithOptions(openLiveShiftRequest, runtime);
        } catch (TeaException error) {
            // これはデモンストレーションのみを目的としています。本番環境では、例外を慎重に処理し、無視しないようにしてください。
            // エラーメッセージ
            System.out.println(error.getMessage());
            // 診断アドレス
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        } catch (Exception _error) {
            TeaException error = new TeaException(_error.getMessage(), _error);
            // これはデモンストレーションのみを目的としています。本番環境では、例外を慎重に処理し、無視しないようにしてください。
            // エラーメッセージ
            System.out.println(error.getMessage());
            // 診断アドレス
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}
説明
  • AppName をアスタリスク (*) に設定すると、指定したドメイン配下のすべてのライブストリームに設定を適用できます。

  • StreamName をアスタリスク (*) に設定すると、指定した AppName 配下のすべてのライブストリームに設定を適用できます。

  • 設定を追加した後、DescribeLiveShiftConfigs API を呼び出して、特定のドメインのタイムシフト設定をクエリできます。

  • Java SDK の使用方法の詳細については、「Java SDK ユーザーガイド」をご参照ください。

  • 設定を有効にするには、ストリームを再プッシュする必要があります。

  • パラメーターの詳細については、「OpenLiveShift」をご参照ください。

タイムシフト再生のリクエスト

タイムシフトを設定すると、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} です。

以下の表に、パラメーターの各変数を示します。

タイプ

フォーマット

単位

ゾーン

時間の種類。有効な値は次のとおりです。

  • start:再生開始時刻。

  • end:再生終了時刻。

  • vodend:ビデオオンデマンド (VOD) モードでの再生終了時刻を指定します。

    説明

    タイプが vodend の場合、再生は VOD モードになります。サーバーは、指定された時間範囲内のすべての TS セグメントの完全なプレイリストを一度に返し、endlist タグを付けて終了します。

  • offset:巻き戻しのオフセット時間。

時間フォーマット。有効な値は次のとおりです。

  • unix:UNIX タイムスタンプ。

  • human:YYYYMMDDHHMMSS 形式。例:20170809230130。

時間単位。有効な値は次のとおりです。

  • s:秒。

  • ms:ミリ秒。

タイムゾーン。有効な値: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_startlhs_offset の両方を指定した場合、lhs_offset が優先されます。

  • lhs_end/lhs_vodend はオプションのパラメーターです。lhs_end/lhs_vodend を指定しない場合、再生はアップストリーミングが終了するまでライブモードで継続されます。

  • lhs_end を指定した場合、再生は指定された lhs_end 時刻までライブモードで継続されます。

  • lhs_vodend を指定した場合、再生は指定された lhs_vodend 時刻までビデオオンデマンド (VOD) モードで継続されます。VOD モードでは、すべての TS セグメントが一度に返され、プレーヤーのプログレスバーを使用して早送りや巻き戻しができます。

  • lhs_endlhs_vodend の両方を指定した場合、lhs_vodend が優先されます。

特定の startend の時刻がわからない場合は、タイムシフトタイムラインをクエリして取得できます。

次の例は、タイムシフトタイムラインをクエリする方法を示しています。

// 角度括弧 (<>) 内の値を実際の値に置き換えます。
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。例:http://{domain}/openapi/timeline/query{domain} はストリーミングドメインです。

パラメーター

  • aliyunols (必須):on (固定値)

  • app (必須):アプリケーション名。

  • stream (必須):ストリーム名。

  • format (必須):ts (固定値)

    説明

    現在、API は [ts] 形式のタイムシフトデータのみのクエリに対応しています。

  • lhs_start_unix_s_0 (必須):クエリ時間範囲の開始を示す UNIX タイムスタンプ。例:1724295706。単位:秒。

  • lhs_end_unix_s_0 (必須):クエリ時間範囲の終了を示す UNIX タイムスタンプ。例:1724317306。単位:秒。

  • auth_key: 認証キー。このキーは、ストリーミング URL で使用されるキーと[同じ]暗号化アルゴリズムを使用します。認証と暗号化に詳しくない場合は、「認証コードの例」をご参照ください。

一般的なエラー処理

  • 403:auth_key 値の暗号化プロセスが正しいかどうかを確認してください。

次の例は、レスポンスのサンプルです。

{
  "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 の詳細については、「タイムシフト」をご参照ください。