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

ApsaraVideo Live:Alibaba Cloud 専用の暗号化

最終更新日:Nov 05, 2025

Alibaba Cloud 専用の暗号化は、ライブストリームを暗号化できます。このトピックでは、Alibaba Cloud 専用の暗号化の利点、アーキテクチャ、および使用方法について説明します。

説明
  • ビデオは、HTTP Live Steaming (HLS) および Flash Video (FLV) フォーマットでのみ生成できます。

  • Alibaba Cloud 専用の暗号化を使用して暗号化されたビデオを再生するには、ApsaraVideo Player のみを使用できます。

  • HTML5 互換性については、ブラウザがサポートする HTML5 プレーヤーの機能にあるAlibaba Cloud 専用の暗号化で暗号化された動画の再生機能の説明をご参照ください。

背景

ユーザーは、ライブストリームに対して 1 回限りの料金を支払い、ホットリンク保護が設定されている正規のストリーミング URL からビデオファイルをダウンロードできます。ビデオファイルがダウンロードされると、ビデオファイルの再配布は制御できなくなります。したがって、ホットリンク保護だけでは、ライブストリームの著作権を保護するのに十分ではありません。

メリット

Alibaba Cloud 専用の暗号化はビデオデータを暗号化します。オンプレミスデバイスにダウンロードされたビデオファイルは暗号化されます。これにより、不正な再配布が防止されます。専用の暗号化は、ビデオの漏洩やホットリンクを防止でき、オンライン教育、金融、業界トレーニング、プレミアム TV 番組など、オンラインの著作権で保護されたビデオの幅広い分野に適用できます。

Alibaba Cloud は、独自の暗号化アルゴリズムを利用して高レベルのセキュリティを提供し、便利で効率的かつ安全な方法でビデオのリソースを保護できます。

  • 各メディアファイルには専用の暗号鍵があります。これにより、単一のキーが漏洩した場合に多くのビデオファイルが公開されるのを防ぎます。

  • ApsaraVideo Live は、包括的な権限管理システムを提供します。RAM ユーザーを作成し、再生認証情報を使用してアクセス権限を制御できます。

  • ApsaraVideo Live は、暗号文キーと平文キーを使用してエンベロープ暗号化システムを提供します。平文キーは保存されず、メモリ内のデータを処理するためにのみ使用されます。

  • ApsaraVideo Live は、安全なプレーヤーカーネル SDK を提供します。

全体的なアーキテクチャ

Alibaba Cloud 専用の暗号化プロセスは、暗号化とトランスコーディング、および復号後の再生で構成されます。

  • 暗号化とトランスコーディング: 次のフローチャートのステップ 1 から 3。

    ストリーマーがライブストリームをライブセンターにアップストリーミングした後、ApsaraVideo Live は KMS を使用して平文キーと暗号文キーを生成します。次に、ApsaraVideo Live は平文キーを使用して、ライブストリームのオーディオとビデオに [対称] 暗号化を実行し、暗号文キーをビデオにカプセル化します。

  • 復号と再生: 次のフローチャートのステップ 4 から 11。

    ライブストリームを再生するために、再生クライアントは AppServer に再生リクエストを送信してストリーミング URL を取得します。次に、再生クライアントはストリーミング URL を使用して ApsaraVideo Live にビデオストリームをリクエストします。ApsaraVideo Live は、トランスコードおよび暗号化されたビデオと暗号文キーを ApsaraVideo Player SDK に送信します。

    再生クライアントは、暗号文キーを使用して、暗号化された平文キーを ApsaraVideo Live にリクエストします。次に、ApsaraVideo Live は暗号文キーを使用して KMS に平文キーをリクエストします。再生クライアントは、復号された平文キーを ApsaraVideo Player SDK に送信し、SDK はビデオを復号して再生します。

使用方法

Alibaba Cloud 専用の暗号化は、トランスコーディングテンプレートを使用して設定されます。ApsaraVideo Live コンソールを使用するか、API 操作を呼び出してテンプレートを設定できます。

重要

Alibaba Cloud 専用の暗号化を使用するには、KMS キー ID を指定する必要があります。キーがない場合は、KMS コンソールに移動して作成します。キーのリージョンがドメイン名が存在するリージョンと同じであることを確認してください。詳細については、「CMK の作成」をご参照ください。

方法 1: ApsaraVideo Live コンソールを使用できます。詳細については、「デフォルトのトランスコーディング」および「カスタムトランスコーディング」をご参照ください。

方法 2: API 操作を呼び出して Alibaba Cloud 専用の暗号化を設定します。

  1. ビデオ暗号化トランスコーディングテンプレートを設定するには、AddLiveStreamTranscode 操作を呼び出してデフォルトのトランスコーディング設定を追加するか、AddCustomLiveStreamTranscode 操作を呼び出してカスタムトランスコーディング設定を追加します。次に、EncryptParameters パラメーターを設定します。このパラメーターで、EncryptTypealiyun に設定します。

    次のサンプルコードは、Java 用サーバー 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 AddLiveStreamTranscode {
        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();*/
    
            // AccessKey ID、AccessKey シークレット、トークンなどの認証情報を設定します。
            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 を使用します。それ以外の場合は、デフォルトの Apache HttpClient が使用されます。
                    //.serviceConfiguration(Configuration.create()) // サービスレベルの設定。
                    // クライアントレベルの設定を上書きします。エンドポイントや HTTP リクエストパラメーターなどを設定できます。
                    .overrideConfiguration(
                            ClientOverrideConfiguration.create()
                                      // エンドポイントについては、https://api.aliyun.com/product/live をご参照ください。
                                    .setEndpointOverride("live.aliyuncs.com")
                            //.setConnectTimeout(Duration.ofSeconds(30))
                    )
                    .build();
    
            // API リクエストのパラメーターを設定します。
            AddLiveStreamTranscodeRequest addLiveStreamTranscodeRequest = AddLiveStreamTranscodeRequest.builder()
                    .regionId("<Your RegionId>")
                    .domain("<Your Domain>")
                    .app("<Your App Name>")
                    .template("<Your Template>")
                    .encryptParameters("<Your EncryptParameters>")
                    // リクエストレベルの設定を上書きします。HTTP リクエストヘッダーなどのパラメーターを設定できます。
                    // .requestConfiguration(RequestConfiguration.create().setHttpHeaders(new HttpHeaders()))
                    .build();
    
            // API 応答を非同期に取得します。
            CompletableFuture<AddLiveStreamTranscodeResponse> response = client.addLiveStreamTranscode(addLiveStreamTranscodeRequest);
            // API 応答を同期的に取得します。
            AddLiveStreamTranscodeResponse 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();
        }
    
    }
    説明
    • トランスコーディング設定に変更が加えられた場合、設定を有効にするにはストリームを再アップストリーミングする必要があります。

    • Java 用サーバー SDK の詳細については、「Java 用サーバー SDK の使用」をご参照ください。

  2. その他の関連 API 操作:

    API 操作

    説明

    デフォルトのトランスコーディング設定の更新

    デフォルトのトランスコーディング設定を更新します。

    UpdateCustomLiveStreamTranscode

    カスタムトランスコーディング設定を更新します。

    DescribeLiveStreamTranscodeInfo

    ストリーミングドメインのトランスコーディング設定を照会します。

    DeleteLiveStreamTranscode

    トランスコーディング設定を削除します。

参考

ビデオ暗号化機能を使用すると、KMS へのアクセス権限を取得するために AliyunServiceRoleForLiveKes ロールが自動的に作成されます。詳細については、「ビデオ暗号化のサービスリンクロールの管理」をご参照ください。