ApsaraVideo Live では、後で再生するためにライブストリームをリアルタイムで録画できます。このトピックでは、ライブストリーミング録画機能について説明します。
機能紹介
ApsaraVideo Live は、プッシュクライアントからリアルタイムでデータをストリーミングします。ストリーム終了後に再度視聴するには、ライブストリーミング録画機能を使用する必要があります。
ライブストリーミング録画機能は、ライブセンターからストリームデータを録画し、指定したストレージの場所に保存します。利用可能なストレージ方法は、レコーディングして VOD に保存する と レコーディングして OSS に保存する の 2 つです。
ライブストリーミング録画の仕組み
ライブストリーミング録画プロセスでは、プッシュされたライブストリームを取得し、音声と動画を TS コンテナフォーマットの個別のメディアセグメントにカプセル化して保存します。ライブストリーミング録画は、以下の原則に従います。
ライブストリーミング録画は、RTMP や FLV から TS への変換など、音声と動画のコンテナフォーマットのみを変更します。エンコーディングレイヤーで音声または動画のコンテンツを変更することはありません。たとえば、プッシュされたストリームに映像の乱れがある場合、録画されたファイルにも映像の乱れが含まれます。
ライブストリーミング録画には、ご利用のストレージアドレスに録画を書き込む権限があります。書き込んだ録画ファイルを含め、ストレージアドレスにあるファイルを変更または削除する権限はありません。ご利用のストレージアドレスにある録画ファイルの管理は、お客様の責任となります。
ライブストリーミング録画機能を使用すると、録画サービス料金が発生します。デフォルトでは、録画は TS/M3U8 ファイル形式で保存されます。トランスコーディングとコンテナフォーマットの変換が必要な場合は、追加で録画コンテナフォーマット変換料金が発生します。課金ルールの詳細については、「ライブストリーミング録画料金」をご参照ください。
利用条件
音声および動画のエンコード形式
ライブストリーミング録画では、まずライブストリームを TS ファイルにセグメント化するため、プッシュされたストリームの音声および動画のエンコード形式は、TS コンテナフォーマットの要件を満たす必要があります。FLV および ISO/IEC 13818-1 規格に基づき、ライブストリーミング録画は以下のエンコード形式のみをサポートします。
動画:H.264、HEVC、MPEG-4
音声:AAC、MP3
ライブストリームに他のエンコード形式を使用した音声または動画が含まれている場合、ライブストリーミング録画が失敗することがあります。たとえば、録画が生成されない、録画が黒い画面になる、録画に音声がないなどの問題が発生する可能性があります。その他の予期せぬ問題が発生することもあります。
異常なライブストリームの処理
標準ストリーム (エンコード要件を満たし、フレームレートとタイムスタンプが安定している) ✅ 録画は 100% 生成されます。
軽微な異常があるストリーム (時折のフレームレートの変動やタイムスタンプのジャンプ) ✅ システムが互換性のためにこれらの問題を自動的に処理します。
重大な異常があるストリーム (長時間の動画フレームの欠落、タイムスタンプの乱れ、またはキーフレームの欠落) ❌ 録画の成功は保証されません。
機能比較
ライブストリームは、ApsaraVideo VOD または OSS のいずれかに録画して保存できます。これら 2 つの方法は異なるシナリオに適しています。必要に応じてストレージ方法を選択できます。
ストレージ方法 | 関連プロダクトまたはサービス | サポートされる録画方法 | コンテナフォーマット | シナリオ |
VOD への録画と保存 | ApsaraVideo VOD の有効化 |
|
| 動画編集、再生、動画サムネイルの設定など、録画コンテンツのポストプロダクションに最適です。 |
OSS への録画と保存 | OSS の有効化 |
| ストレージに重点を置いた、録画コンテンツの管理に最適です。 |
同じライブストリームに対して両方のストレージ方法を設定することはできません。
すべての録画において、ライブストリームはまず TS ファイルにセグメント化され、その後、指定されたコンテナフォーマットの録画ファイルにパッケージ化されます。TS/M3U8 以外のフォーマットには、コンテナフォーマット変換料金が課金されます。
自動録画のルール
ドメイン名、アプリケーション名、またはストリーム名を指定して、ドメイン名配下のすべてのアプリケーション、アプリケーション内のすべてのライブストリーム、または特定のライブストリームを録画できます。AppName と StreamName にアスタリスク (*) を設定すると、すべてのアプリケーション名とすべてのストリーム名を表すことができます。
録画テンプレートを設定して録画を OSS または VOD に保存する場合、複数のテンプレートを設定できます。ライブストリームが複数の録画テンプレートに一致する場合、優先度ルールによってどのテンプレートが有効になるかが決まります。次の表に優先度を示します。数値が小さいほど優先度が高くなります。
優先度 | DomainName | AppName | StreamName |
1 | ✓ | ✓ | ✓ |
2 | ✓ | ✓ | * |
3 | ✓ | * | * |
チェックマーク (✓) は、パラメーターがアスタリスク (*) ではなく特定の値で設定されていることを示します。アスタリスク (*) は、パラメーターがすべての値に一致するように設定されていることを示します。
VOD への録画と保存
前提条件
ライブストリームの録画を ApsaraVideo VOD に保存するには、ApsaraVideo VOD サービスを有効化し、ストレージバケットを管理する必要があります。
録画は ApsaraVideo VOD に保存され、ストレージ料金が発生します。詳細については、「基本サービス課金」をご参照ください。
VOD システムバケットを有効にする場合、VOD システムバケットのリージョンは、設定するドメイン名のライブセンターのリージョンと同じである必要があります。
ApsaraVideo Live は、金融クラウドのアカウントに対する VOD への録画をサポートしていません。
機能設定
ApsaraVideo Live は、VOD への録画と保存の設定を追加するために 2 つの方法を提供します。
設定を完了した後、録画設定を有効にするには、ストリームプッシュを再起動する必要があります。
ストリームが 180 秒間中断された後、録画が生成されます。
方法 1:コンソールを使用
ApsaraVideo Live コンソールにログインします。
左側のナビゲーションウィンドウで、機能管理 > ライブストリームのレコーディング を選択します。ライブストリームのレコーディング ページで、VOD に保存して設定する タブをクリックします。
設定するストリーミングドメインを選択し、追加 をクリックします。
録画テンプレートを設定します。

次の表に、録画テンプレートのパラメーターを説明します。
パラメーター
説明
アプリケーション名
動画のアプリケーション名。入力した アプリケーション名 は、設定が有効になるために、ストリームプッシュの アプリケーション名 と同じである必要があります。ドメイン名配下のすべてのアプリケーションのライブストリームを録画する場合は、ワイルドカード文字 (*) を入力します。
ストリーム名
VOD への録画は、ストリームレベルの録画をサポートしています。特定のストリーム名を入力します。指定した [AppName] 配下のすべてのストリームを録画するには、アスタリスク (*) を入力します。
説明[AppName] と [StreamName] パラメーターには、英字、数字、ハイフン (-)、アンダースコア (_) を含めることができます。長さは 255 文字に制限されています。
ストレージアドレス
現在のリージョンの VOD サービスで作成されたストレージアドレスを選択できます。ストレージアドレスが見つからない場合は、[更新] をクリックして同期します。
録画時間
録画時間 は、ライブストリームから生成されるビデオオンデマンド (VOD) ファイルの最大時間です。有効範囲は 15 分から 360 分です。指定された録画周期を超えると、システムは録画命名規則に基づいて新しいファイルを生成します。デフォルトの ts セグメントの長さは 30 秒です。
トランスコード設定
リストからトランスコーディングルールを選択して、VOD サービスで録画された動画をトランスコーディングします。動画を異なる仕様にトランスコーディングしたり、トランスコーディングせずに元の品質を維持したりできます。
録画トランスコーディングテンプレートの操作の詳細については、「ApsaraVideo VOD トランスコーディング設定」をご参照ください。
説明ApsaraVideo VOD トランスコーディングテンプレートのリージョンは、現在のドメイン名のリージョンと同じである必要があります。たとえば、現在のドメイン名が中国 (上海) リージョンにある場合、ApsaraVideo VOD トランスコーディングテンプレートも中国 (上海) リージョンにある必要があります。
自動マージ
この機能を有効にすると、ライブストリームの録画が終了した後、複数の録画周期ファイルが自動的に 1 つの録画にマージされ、VOD に保存されます。
説明複数周期の録画の自動マージを有効にすると、ApsaraVideo VOD の編集・制作機能とトランスコーディング機能が使用されます。課金の詳細については、「編集・制作の課金」および「メディアアセットのトランスコーディング課金」をご参照ください。
トランスコードテンプレートを自動的にマージする
ドロップダウンリストからトランスコーディングテンプレートを選択します。これは ApsaraVideo VOD から取得されます。システムは、トランスコーディングテンプレートの設定に基づいて、マージされた動画のトランスコーディングを実行します。詳細については、「トランスコーディングテンプレート」をご参照ください。
説明ApsaraVideo VOD トランスコーディングテンプレートのリージョンは、現在のドメイン名のリージョンと同じである必要があります。たとえば、現在のドメイン名が中国 (上海) リージョンにある場合、ApsaraVideo VOD トランスコーディングテンプレートも中国 (上海) リージョンにある必要があります。
[OK] をクリックします。
方法 2:API を使用
VOD へのライブストリーム録画設定の追加 API を呼び出して設定を追加できます。以下は SDK の呼び出し例です。
// このファイルは自動生成されたものです。編集しないでください。
package demo;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.live20161101.models.*;
import com.aliyun.sdk.service.live20161101.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;
//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.io.*;
public class AddLiveRecordVodConfig {
public static void main(String[] args) throws Exception {
// HttpClient の設定
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // 接続タイムアウト時間を設定します。デフォルトは 10 秒です。
.responseTimeout(Duration.ofSeconds(10)) // 応答タイムアウト時間を設定します。デフォルトは 20 秒です。
.maxConnections(128) // 接続プールサイズを設定します。
.maxIdleTimeOut(Duration.ofSeconds(50)) // 接続プールのタイムアウトを設定します。デフォルトは 30 秒です。
// プロキシを設定します。
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001))
.setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>"))
// https 接続の場合は、証明書を設定するか、証明書を無視する必要があります (.ignoreSSL(true))
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// ak、secret、token を含む認証情報を設定します。
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// 環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
.accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
//.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // STS トークンを使用
.build());
// クライアントを設定します。
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // リージョン ID
//.httpClient(httpClient) // 設定された HttpClient を使用します。それ以外の場合は、デフォルトの HttpClient (Apache HttpClient) を使用します。
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // サービスレベルの設定
// クライアントレベルの設定を上書きします。エンドポイント、Http リクエストパラメーターなどを設定できます。
.overrideConfiguration(
ClientOverrideConfiguration.create()
// エンドポイントについては、https://api.aliyun.com/product/live をご参照ください。
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// API リクエストのパラメーター設定
AddLiveRecordVodConfigRequest addLiveRecordVodConfigRequest = AddLiveRecordVodConfigRequest.builder()
.regionId("<Your RegionId>")
.domainName("<Your DomainNmae>")
.appName("<Your AppName>")
.streamName("<Your StreamName>")
.vodTranscodeGroupId("<Your VodTranscodeGroupId>")
// リクエストレベルの設定を上書きします。Http リクエストパラメーターなどを設定できます。
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// API リクエストの戻り値を非同期で取得します。
CompletableFuture<AddLiveRecordVodConfigResponse> response = client.addLiveRecordVodConfig(addLiveRecordVodConfigRequest);
// API リクエストの戻り値を同期で取得します。
AddLiveRecordVodConfigResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// 戻り値を非同期で処理します。
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // 例外を処理します。
System.out.println(throwable.getMessage());
return null;
});*/
// 最後に、クライアントを閉じます。
client.close();
}
}上記のサンプルコードは、ドメイン名 <DomainName> の VOD への録画を設定します。AppName は <AppName>、StreamName は <StreamName> です。録画されたコンテンツはトランスコーディングされず (VOD_NO_TRANSCODE)、ApsaraVideo VOD システムバケット <StorageLocation> に保存されます。
AppName と StreamName の設定の詳細については、「自動録画のルール」をご参照ください。
録画コンテンツのトランスコーディング
VOD はデフォルトで M3U8 形式で録画を保存します。他の形式で録画を保存するには、[録画トランスコーディングテンプレート] を設定できます。
addLiveRecordVodConfigRequest.setVodTranscodeGroupId("<TranscodeGroupId>");VOD システムでトランスコーディングテンプレートを設定する必要があります。詳細については、「トランスコーディングテンプレート」をご参照ください。
<TranscodeGroupId> は、[VOD] で設定された [トランスコーディングテンプレートグループ ID] です。
トランスコーディングを設定すると、録画がトランスコーディングされ、トランスコーディング URL が生成されます。元のファイルは保持されます。
OSS への録画と保存
前提条件
ライブストリーム録画を設定して録画を OSS に保存するには、次の操作を完了する必要があります。
OSS を有効化し、バケットを作成します。詳細については、「バケットの作成」をご参照ください。
重要録画ファイルを OSS に保存すると、ストレージ料金が発生します。詳細については、「ストレージ料金」をご参照ください。
録画を保存する OSS バケットの [リージョン] は、録画用に設定されたドメイン名のリージョンと一致する必要があります。たとえば、ライブストリームのドメイン名が中国 (上海) リージョンにある場合、バケットも中国 (上海) リージョンにある必要があります。
ApsaraVideo Live が OSS にデータを書き込むための権限を設定します。この権限付与は、通常、ApsaraVideo Live サービスを有効化するときに自動的に行われます。
重要誤ってこの権限を削除した場合は、[クラウドリソースへのアクセスを承認] をクリックして再度権限を付与できます。
権限の付与には Alibaba Cloud アカウントを使用することを推奨します。RAM ユーザーを使用する場合、そのユーザーには
ram:CreateRole、ram:GetRole、ram:ListPoliciesForRole、およびram:AttachPolicyToRoleの権限が必要です。これらの権限を RAM ユーザーに付与するとセキュリティリスクが生じるため、推奨されません。
機能設定
ApsaraVideo Live は、OSS への録画と保存の設定を追加するために 2 つの方法を提供します。
設定を完了した後、録画設定を有効にするには、ストリームプッシュを再起動する必要があります。
ストリームが設定されたストリーム中断のマージ期間 (デフォルトでは 180 秒) を超えて中断された後、録画が生成されます。
方法 1:コンソールを使用
ApsaraVideo Live コンソールにログインします。
左側のナビゲーションウィンドウで、機能管理 > ライブストリームのレコーディング を選択します。ライブストリームのレコーディング ページで、OSS に保存して設定する タブをクリックします。
ストリーミングドメインを選択し、追加 をクリックします。
録画テンプレートを設定します。

表 1. 録画テンプレートのパラメーター
パラメーター
説明
アプリケーション名
アプリケーション名。入力した [AppName] は、設定が有効になるために、プッシュ URL の [AppName] と同じである必要があります。ドメイン名レベルで録画するには、アスタリスク (*) を入力します。
ストリーム名
OSS への録画は、ストリームレベルの録画をサポートしています。特定のストリーム名を入力します。指定した [AppName] 配下のすべてのストリームを録画するには、アスタリスク (*) を入力します。
説明[AppName] と [StreamName] パラメーターには、英字、数字、ハイフン (-)、アンダースコア (_) を含めることができます。長さは 255 文字に制限されています。
アスタリスク (*) は単独の値としてのみ入力でき、文字列内のワイルドカード文字としては使用できません。
格納場所
現在のリージョンの OSS で作成されたバケットを選択できます。
説明ストレージバケットには 2 種類あります。
標準バケット:一般的なファイルストレージに使用されます。
メディアバケット:動画トランスコーディング専用です。このタイプのバケットに保存されたファイルは、自動的に MPS トランスコーディングジョブをトリガーできます。
システムはバケットの種類を区別しません。動画トランスコーディングを実行するには、トランスコーディングされたメディアファイルが正しい場所に保存されるように、メディアバケット名をメモしておいてください。
切断のスプライス時間
ストリームの中断期間が指定された結合期間を超えると、新しいファイルが生成されます。中断されたストリームの結合期間は、15 秒から 21,600 秒の値に設定できます。
格納形式
サポートされている形式は flv、m3u8、mp4、cmaf です。
説明少なくとも 1 つのストレージ形式を設定する必要があります。CMAF 形式は M3U8 形式と同時に選択することはできません。
命名規則
デフォルトのストレージパスは record/{AppName}/{StreamName}/{EscapedStartTime }_{EscapedEndTime } です。
例:
[AppName] が liveApp**** で、[StreamName] が liveStream**** の場合、[m3u8] 形式の録画のストレージパスは record/liveApp****/liveStream****/{EscapedStartTime}_{EscapedEndTime } です。
TS ファイルの長さ
単一セグメントの期間。デフォルト値は 30 秒です。値は 5 秒から 30 秒の範囲で指定できます。
録画時間
録画時間 は 15 分から 360 分の値に設定できます。サポートされる最大録画時間は 6 時間です。指定された録画周期を超えると、システムは録画命名規則に基づいて新しいファイルを生成します。
説明録画周期は、ライブストリームから変換された VOD ファイルの最大時間です。
トランスコーディング済みストリームの録画を設定します。(オプション)
重要ライブストリームトランスコーディング機能を使用する場合、トランスコーディングの標準、解像度、およびトランスコーディングされたストリームの合計時間に基づいて課金されます。詳細については、「ライブストリームトランスコーディング料金」をご参照ください。

表 2. トランスコーディング済みストリームの録画のパラメーター
パラメーター
説明
トランスコード済みストリームの記録
トランスコード済みストリームの記録 スイッチをオンにして、パラメーターを設定します。
格納形式
サポートされている形式は [flv]、[m3u8]、[mp4]、および [cmaf] です。
説明少なくとも 1 つのストレージ形式を設定する必要があります。CMAF 形式は M3U8 形式と同時に選択することはできません。
命名規則
デフォルトのストレージパスは transcodeRecord/{AppName}/{StreamName}_{Transcoding Template ID}/{EscapedStartTime }_{EscapedEndTime } です。
例:
[AppName] が liveApp****、[StreamName] が liveStream****、[トランスコーディングテンプレート ID] が lld の場合、[m3u8] 形式の録画の実際のストレージパスは transcodeRecord/liveApp****/liveStream****_lld/{EscapedStartTime}_{EscapedEndTime } です。
TS ファイルの長さ
単一セグメントの期間。デフォルト値は 30 秒です。値は 5 秒から 30 秒の範囲で指定できます。
録画時間
録画周期は 15 分から 360 分の範囲です。最大録画時間は 6 時間です。時間が 6 時間を超えると、システムは録画命名規則に基づいて新しいファイルを生成します。
説明録画周期は、ライブストリームから変換された VOD ファイルの最大時間です。
トランスコード設定 ID
特定のトランスコーディングテンプレート (最大 10 個) またはすべてのトランスコーディングテンプレートを選択できます。
トランスコーディングテンプレートを有効にするには、その [AppName] が録画テンプレートの AppName と同じである必要があります。トランスコーディングテンプレートがない場合は、まず追加してください。詳細については、「デフォルトのトランスコーディング」をご参照ください。
[OK] をクリックします。
方法 2:API を使用
録画設定の追加 API を呼び出して設定を追加できます。以下は SDK の呼び出し例です。
// このファイルは自動生成されたものです。編集しないでください。
package demo;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.live20161101.models.*;
import com.aliyun.sdk.service.live20161101.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;
//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.io.*;
public class AddLiveAppRecordConfig {
public static void main(String[] args) throws Exception {
// HttpClient の設定
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // 接続タイムアウト時間を設定します。デフォルトは 10 秒です。
.responseTimeout(Duration.ofSeconds(10)) // 応答タイムアウト時間を設定します。デフォルトは 20 秒です。
.maxConnections(128) // 接続プールサイズを設定します。
.maxIdleTimeOut(Duration.ofSeconds(50)) // 接続プールのタイムアウトを設定します。デフォルトは 30 秒です。
// プロキシを設定します。
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001))
.setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>"))
// https 接続の場合は、証明書を設定するか、証明書を無視する必要があります (.ignoreSSL(true))
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// ak、secret、token を含む認証情報を設定します。
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// 環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
.accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
//.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // STS トークンを使用
.build());
// クライアントを設定します。
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // リージョン ID
//.httpClient(httpClient) // 設定された HttpClient を使用します。それ以外の場合は、デフォルトの HttpClient (Apache HttpClient) を使用します。
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // サービスレベルの設定
// クライアントレベルの設定を上書きします。エンドポイント、Http リクエストパラメーターなどを設定できます。
.overrideConfiguration(
ClientOverrideConfiguration.create()
// エンドポイントについては、https://api.aliyun.com/product/live をご参照ください。
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// API リクエストのパラメーター設定
AddLiveAppRecordConfigRequest addLiveAppRecordConfigRequest = AddLiveAppRecordConfigRequest.builder()
.domainName("<Your DomainName>")
.appName("<Your AppName>")
.ossEndpoint("<Your OSSEndpoint>")
.ossBucket("<Your OSSBucket>")
.streamName("<Your StreamName>")
// リクエストレベルの設定を上書きします。Http リクエストパラメーターなどを設定できます。
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// API リクエストの戻り値を非同期で取得します。
CompletableFuture<AddLiveAppRecordConfigResponse> response = client.addLiveAppRecordConfig(addLiveAppRecordConfigRequest);
// API リクエストの戻り値を同期で取得します。
AddLiveAppRecordConfigResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// 戻り値を非同期で処理します。
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // 例外を処理します。
System.out.println(throwable.getMessage());
return null;
});*/
// 最後に、クライアントを閉じます。
client.close();
}
}上記のサンプルコードは、<DomainName> ドメイン名の OSS への録画を設定します。AppName は <AppName>、StreamName は <StreamName>、ストレージ形式は [m3u8] で、録画は <OssBucket> に保存されます。
<OssBucket> のリージョンの <OssEndpoint> は、OSS ドキュメントの「リージョンとエンドポイント」で確認できます。
AppName と StreamName の設定の詳細については、「自動録画のルール」をご参照ください。
トランスコーディング済みストリームの録画
録画サイズを削減したい場合は、トランスコーディング済みストリームを録画できます。このプロセスでは、動画の品質を維持しながら、動画ビットレートを調整し、動画圧縮率を高めます。OSS への録画機能は、トランスコーディング済みストリームとオリジナルストリームの両方を同時に保存することをサポートしています。また、トランスコーディング済みストリームのみ、またはオリジナルストリームのみを保存することもサポートしています。
ライブストリームトランスコーディング機能を使用する場合、トランスコーディングの標準、解像度、およびトランスコーディングされたストリームの合計時間に基づいて課金されます。詳細については、「ライブストリームトランスコーディング料金」をご参照ください。
カスタム録画ポリシー
[機能設定] でライブストリーミング録画機能が設定されている場合、ライブコンテンツはストリームプッシュ中に自動的に録画されます。このプロセスは 自動録画 と呼ばれます。
ただし、ビジネスロジックに基づいて特定のライブストリームを録画するかどうかを決定したい場合があります。ライブストリーミング録画機能は、このシナリオに対して 2 つのソリューションを提供します。
ライブセンターが業務システムにコールバックを送信し、ライブストリームを録画する必要があるかどうかを問い合わせます。ライブセンターが録画が必要であることを示す応答を受信した後に録画が開始されます。これはオンデマンド録画と呼ばれます。
業務システムからライブストリーミングサービスを呼び出してライブコンテンツを録画する方法を手動録画と呼びます。
オンデマンド録画

オンデマンド録画を実装するには、業務システムが「オンデマンド録画コールバック」で説明されているように、ライブストリーミングサービスの呼び出し用の URL を提供する必要があります。
次のサンプルコードは、オンデマンド録画を設定する方法を示しています。
// OnDemand フィールドを 1 に設定して、HTTP コールバックによるオンデマンド録画を有効にします。
addLiveAppRecordConfigRequest.setOnDemand(1);また、ドメインレベルの録画コールバック設定の追加 API を呼び出して録画コールバックを設定することもできます。
手動録画
手動録画を実装するには、自動録画機能を無効にする必要があります。次のサンプルコードは、その方法を示しています。
// OnDemand フィールドを 7 に設定して、自動録画を無効にします。
addLiveAppRecordConfigRequest.setOnDemand(7);その後、ライブストリーム中に、リアルタイム録画命令 API を呼び出して、必要に応じて録画を開始できます。
録画の停止
自動録画、[オンデマンド録画]、または 手動録画 を使用して開始された録画は、リアルタイム録画命令 API を呼び出すことで停止できます。
// このファイルは自動生成されたものです。編集しないでください。
package demo;
import com.aliyun.auth.credentials.Credential;
import com.aliyun.auth.credentials.provider.StaticCredentialProvider;
import com.aliyun.core.http.HttpClient;
import com.aliyun.core.http.HttpMethod;
import com.aliyun.core.http.ProxyOptions;
import com.aliyun.httpcomponent.httpclient.ApacheAsyncHttpClientBuilder;
import com.aliyun.sdk.service.live20161101.models.*;
import com.aliyun.sdk.service.live20161101.*;
import com.google.gson.Gson;
import darabonba.core.RequestConfiguration;
import darabonba.core.client.ClientOverrideConfiguration;
import darabonba.core.utils.CommonUtil;
import darabonba.core.TeaPair;
//import javax.net.ssl.KeyManager;
//import javax.net.ssl.X509TrustManager;
import java.net.InetSocketAddress;
import java.time.Duration;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.io.*;
public class RealTimeRecordCommand {
public static void main(String[] args) throws Exception {
// HttpClient の設定
/*HttpClient httpClient = new ApacheAsyncHttpClientBuilder()
.connectionTimeout(Duration.ofSeconds(10)) // 接続タイムアウト時間を設定します。デフォルトは 10 秒です。
.responseTimeout(Duration.ofSeconds(10)) // 応答タイムアウト時間を設定します。デフォルトは 20 秒です。
.maxConnections(128) // 接続プールサイズを設定します。
.maxIdleTimeOut(Duration.ofSeconds(50)) // 接続プールのタイムアウトを設定します。デフォルトは 30 秒です。
// プロキシを設定します。
.proxy(new ProxyOptions(ProxyOptions.Type.HTTP, new InetSocketAddress("<YOUR-PROXY-HOSTNAME>", 9001))
.setCredentials("<YOUR-PROXY-USERNAME>", "<YOUR-PROXY-PASSWORD>"))
// https 接続の場合は、証明書を設定するか、証明書を無視する必要があります (.ignoreSSL(true))
.x509TrustManagers(new X509TrustManager[]{})
.keyManagers(new KeyManager[]{})
.ignoreSSL(false)
.build();*/
// ak、secret、token を含む認証情報を設定します。
StaticCredentialProvider provider = StaticCredentialProvider.create(Credential.builder()
// 環境変数 ALIBABA_CLOUD_ACCESS_KEY_ID と ALIBABA_CLOUD_ACCESS_KEY_SECRET が設定されていることを確認してください。
.accessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
.accessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"))
//.securityToken(System.getenv("ALIBABA_CLOUD_SECURITY_TOKEN")) // STS トークンを使用
.build());
// クライアントを設定します。
AsyncClient client = AsyncClient.builder()
.region("<Your RegionId>") // リージョン ID
//.httpClient(httpClient) // 設定された HttpClient を使用します。それ以外の場合は、デフォルトの HttpClient (Apache HttpClient) を使用します。
.credentialsProvider(provider)
//.serviceConfiguration(Configuration.create()) // サービスレベルの設定
// クライアントレベルの設定を上書きします。エンドポイント、Http リクエストパラメーターなどを設定できます。
.overrideConfiguration(
ClientOverrideConfiguration.create()
// エンドポイントについては、https://api.aliyun.com/product/live をご参照ください。
.setEndpointOverride("live.aliyuncs.com")
//.setConnectTimeout(Duration.ofSeconds(30))
)
.build();
// API リクエストのパラメーター設定
RealTimeRecordCommandRequest realTimeRecordCommandRequest = RealTimeRecordCommandRequest.builder()
.regionId("<Your RegionId>")
.command("<Your Command>")
.domainName("<Your DomainName>")
.appName("<Your AppName>")
.streamName("<Your StreamName>")
// リクエストレベルの設定を上書きします。Http リクエストパラメーターなどを設定できます。
// .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
.build();
// API リクエストの戻り値を非同期で取得します。
CompletableFuture<RealTimeRecordCommandResponse> response = client.realTimeRecordCommand(realTimeRecordCommandRequest);
// API リクエストの戻り値を同期で取得します。
RealTimeRecordCommandResponse resp = response.get();
System.out.println(new Gson().toJson(resp));
// 戻り値を非同期で処理します。
/*response.thenAccept(resp -> {
System.out.println(new Gson().toJson(resp));
}).exceptionally(throwable -> { // 例外を処理します。
System.out.println(throwable.getMessage());
return null;
});*/
// 最後に、クライアントを閉じます。
client.close();
}
}setCommand("stop") は録画を停止します。
録画を停止すると、ストリーム中断のマージ期間が経過した後に録画ファイルが生成されます。
トランスコーディング済みストリームを録画している場合、<StreamName> を
StreamName_トランスコーディングテンプレート IDの形式に設定する必要があります。
CDN 高速化ドメイン名の設定
録画したライブストリーム動画をネットワーク全体でより高速に配信したい場合は、CDN 高速化ドメイン名を設定できます。CDN は動画をさまざまな場所のノードに配信します。これにより、ユーザーは OSS オリジンに接続する代わりに、最寄りのノードからコンテンツにアクセスできます。この方法は、エッジユーザーのアクセス速度とエクスペリエンスを向上させるだけでなく、直接 OSS アクセスと比較してアウトバウンドトラフィックコストを最大 50% 削減し、ネットワークコストを効果的に節約します。詳細については、「CDN を使用した OSS へのアクセスの高速化」をご参照ください。
関連ドキュメント
ライブストリーミング録画の使用中に問題が発生した場合は、「ライブストリーミング録画に関するよくある質問」をご参照ください。
Java SDK を使用するには、「Java SDK の使用手順」をご参照ください。
録画コールバックの詳細については、「ライブストリーミング録画コールバック」および「オンデマンド録画コールバック」をご参照ください。








