Alibaba Cloud ApsaraVideo VOD (VOD) はプレビュー機能を提供します。 このトピックでは、プレビュー機能を有効にする方法と、プレビューURLを取得するためのベストプラクティスについて説明します。

概要

プレビュー機能を有効にすると、ユーザーはオーディオまたはビデオファイルの所定の期間をプレビューできます。 この機能は通常、有料メディア資産に使用されます。 サーバー側でGetPlayInfo操作を呼び出して、プレビュー期間を指定できます。 この操作はプレビューURLを返します。 または、プレビュー情報を含むプレビューURLを作成できます。 構築されたURLは署名付きURLです。

重要 指定したプレビュー期間がビデオの合計期間を超える場合は、ApsaraVideo VODから返されるプレビューURLを使用して、ビデオ全体を再生できます。

Alibaba Cloud ApsaraVideo VODのプレビュー機能は、Alibaba Cloud CDNに基づいて実装されています。 プレビュー機能の基本原則は、プレーヤーが指定されたプレビュー期間に関する情報を含む高速化ドメイン名のURLを使用してVODにアクセスすることです。 ファイルが返される前に、VODはURLを検証する必要があります。 プレビューURLが検証に合格した場合、指定されたファイルが返されます。 それ以外の場合、アクセスは拒否され、HTTP 403ステータスコードが返されます。 次の図は、ApsaraVideo VODのプレビュー機能の動作を示しています。

プロセス
  1. CDNの高速化ドメイン名を設定し、プレビュー機能を有効にします。
    重要 プレビュー機能を使用する前に、ドメイン名を設定してプレビュー機能を有効にする必要があります。 詳細については、「プレビュー機能を有効にする」をご参照ください。
  2. プレーヤーはプレビューリクエストをApsaraVideo VODに送信します。
  3. ApsaraVideo VODは、プレビューリクエストのドメイン名設定とプレビュー期間設定に基づいてプレビューURLを生成します。
    ApsaraVideo VODを使用すると、サーバー側でAPI操作を呼び出してプレビューURLを生成したり、プレビューURLを作成したりできます。 詳細については、「GetPlayInfo操作を呼び出して、プレビューURLを取得します。」および「プレビューURLを作成する」をご参照ください。
  4. プレイヤーはプレビューURLを使用してCDNからビデオをリクエストします。

制限事項

  • ApsaraVideo VODでは、MP4およびHLS形式のビデオファイルをプレビューできます。 MP4ファイルのメタデータは、ファイルヘッダーに含まれている必要があります。 ファイルテールにメタデータが含まれているMP4ファイルはプレビューできません。 ApsaraVideo VODがビデオをトランスコードし、そのコンテナ形式をMP4に変換すると、システムはメタデータをファイルヘッダーに配置します。
  • プレビュー期間は、キーフレームに基づいて決定されます。 ショートビデオにはプレビュー機能を使用しないことをお勧めします。 長い動画の場合は、プレビュー時間を30秒以上に設定することを推奨します。 デフォルトでは、トランスコードされたビデオのキーフレーム間隔は10秒です。
    コード変換テンプレートのキーフレーム間隔を変更できます。 詳細については、「t1959251.html#multiTask3221」をご参照ください。
  • HLSファイルのプレビュー粒度は、各TSセグメントの期間です。 指定されたプレビュー期間と返されたビデオの実際のプレビュー期間は異なる場合があります。 返されるビデオの実際のプレビュー期間は、指定されたプレビュー期間に基づいて切り上げられます。 たとえば、TSセグメントの長さが10秒で、指定されたプレビューの長さが15秒の場合、返されるビデオのプレビューの長さは20秒です。

プレビュー機能を有効にする

操作を呼び出してプレビューURLを取得するか、プレビューURLを作成する前に、ドメイン名を設定してプレビュー機能を有効にする必要があります。 プレビュー機能を有効にするには、次の手順を実行します。

  1. CDNの高速化ドメイン名を設定します。 詳細については、「t1959258.html#multiTask802」をご参照ください。
    重要 プレビュー機能を使用するには、CDNの高速化ドメイン名を設定する必要があります。
  2. URL認証を有効にし、サポートプレビューをオンにします。 詳細については、「t1959280.html#multiTask774」をご参照ください。
    重要 ドメイン名でプレビュー機能が有効になっていない場合、ビデオ再生のリクエストにプレビューパラメーターを含めることができず、返されたURLにアクセスできません。 URL認証を設定するときは、サポートプレビューをオンにする必要があります。

    次の図は、VODコンソールでプレビュー機能を有効にする方法を示しています。

    プレビューURLを手動で作成するには、privateKeyパラメーターを指定して認証値を計算する必要があります。 値は、コンソールで生成または入力されたプライマリキーまたはセカンダリキーの値です。 後続の使用のために上記の値を記録する。
    プレビュー機能を有効にする
  3. Back-to-origin of Rangeを有効にし、ドメイン名のドラッグ /ドロップ再生を行います。 詳細については、「オブジェクトのチャンク化」および「t1994890.html#task_1994890」をご参照ください。

GetPlayInfo操作を呼び出して、プレビューURLを取得します。

ApsaraVideo VODを使用すると、GetPlayInfo操作を呼び出してビデオのプレビューURLを取得できます。 詳細については、「GetPlayInfo」をご参照ください。 サーバーSDKを統合し、SDKを使用してこの操作を呼び出し、プレビューURLを取得できます。 プレビューURLを取得するには、次の手順を実行します。

重要 この操作を呼び出す前に、プレビュー機能が有効になっていることを確認してください。 詳細については、「プレビュー機能を有効にする」をご参照ください。
  1. ビジネス要件に基づいてサーバーSDKを統合します。 詳細については、「」をご参照ください。「サーバーSDKリファレンス」をご参照ください。
  2. SDKを使用してGetPlayInfo操作を呼び出します。 この操作を呼び出すときに、PlayConfigPreviewTimeを使用してプレビュー期間を指定できます。 サーバーは、プレビュー期間の設定に基づいてプレビューURLを返します。 PlayConfigパラメーターの詳細については、「リクエストパラメーター」をご参照ください。
プレビューURLを取得するためのサンプルコード (Java)
  • 他のプログラミング言語のサンプルコードの詳細については、「OpenAPI」をご参照ください。

com.alibaba.fastjson.JSONObjectをインポートします。com.aliyuncs.DefaultAcsClientをインポートします。com.aliyuncs.profile.DefaultProfileをインポートします。com.aliyuncs.exceptions.ClientExceptionをインポートします。com.aliyuncs.vod.mo del.v20170321.GetPlayInfoRequestをインポートします。com.aliyuncs.vod.mo del.v20170321.GetPlayInfoResponseをインポートします。/**
 * @ 日付2021/12/30
 * /
public class VodPreviewTest {
    public static void main(String[] args) throws ClientException {
        // ApsaraVideo VODのリージョンを指定します。 詳細については、「ApsaraVideo VODのリージョンID」をご参照ください。 
        String regionId = "cn-shanghai";
        // Alibaba CloudアカウントのAccessKey IDを指定します。 
        文字列accessKeyId = "<your accessKeyId>";
        // Alibaba CloudアカウントのAccessKey Secretを指定します。 
        文字列accessKeySecret = "<your accessKeySecret>";
        // ビデオのIDを指定します。 例: 533606af570e4db4961248d0978b **** 。 VODコンソールでビデオをアップロードした後、VODコンソールにログインし、[メディアファイル]> [オーディオ /ビデオ] を選択してビデオのIDを表示します。 CreateUploadVideo操作を呼び出してビデオをアップロードする場合、ビデオのIDはレスポンスのVideoIdの値になります。 
        String videoId = "<your videoId>";
        DefaultAcsClientクライアント=InitVodClient(regionId、accessKeyId、accessKeySecret);
        GetPlayInfoResponseレスポンス=null;
        try {
            応答=getPlayInfo (クライアント、videoId);
        } catch (Exception e) {
            e.printStackTrace();
        }
        System.out.println("response = " + JSONObject.toJSONString (応答));

    }

    /**
     * クライアントを初期化します。
     *
     * @ param regionId
     * @ param accessKeyId
     * @ param accessKeySecret
     * @return
     * @throws ClientException
     */
    public static DefaultAcsClient InitVodClient(String regionId, String accessKeyId, String accessKeySecret) throws ClientException {
        DefaultProfile profile = DefaultProfile.getProfile(regionId、accessKeyId、accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        return client;
    }

    /**
     * ビデオ再生URLを取得します。
     *
     * @param client
     * @ param videoId
     * @return
     * @throws Exception
     */
    public static GetPlayInfoResponse getPlayInfo(DefaultAcsClientクライアント、String videoId) throws Exception {
        GetPlayInfoRequest request=新しいGetPlayInfoRequest();
        request.setVideoId(videoId);
        // 有効期間を秒単位で指定します。 既定値: 3600。
        request.setAuthTimeout(3600L);
        request.setFormats("mp4");
        JSONObject playConfig = new JSONObject();
        // プレビュー時間を秒単位で指定します。 最小値:1
        playConfig.put("PreviewTime" 、"30");
        request.setPlayConfig(playConfig.toJSONString());
        return client.getAcsResponse(request);
    }
}
                

プレビューURLを作成する

ApsaraVideo VODを使用すると、プレビュー情報を含む署名付きURLを作成できます。 署名付きURLを作成するには、次の手順を実行します。

重要 プレビューURLを作成する前に、プレビュー機能が有効になっていることを確認してください。 詳細については、「プレビュー機能を有効にする」をご参照ください。
  1. プレビューパラメーターを含む署名付きURLを作成します。 署名付きプレビューURLのMD5ハッシュ値を計算する場合、プレビュー期間の計算に使用するpreviewTimeを追加する必要があります。
    ビデオのURLのMD5ハッシュ計算 プレビューURLのMD5ハッシュ計算
    MD5(uri-timestamp-rand-uid-PrivateKey) MD5(uri-timestamp-rand-uid-PrivateKey-previewTime)
    MD5ハッシュ計算のパラメーターと、署名付きURLの作成に使用されるメソッドの詳細については、「URL認証の設定」をご参照ください。 ビデオ全体を再生する場合は、previewTimeパラメーターを設定しないでください。
  2. 構築された署名付きURLの末尾に &end= を追加し、その後にpreviewTimeを追加します。
JARパッケージに必要な依存関係を結合するためのサンプルコード (Java)
<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.4</version>
</dependency>
プレビューURLを作成するためのサンプルコード (Java)
    import java.util.UUID;
    impor t java.net.URL;
    impor t org.apache.com mons.lang3.StringUtils;
    private String generateRand() {
        UUID.randomUUID().toString().replaceAll("-", ""); を返します。
    }
    プライベート文字列md5(String str) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(str.getBytes("UTF-8"));
            bytesToHex(md5.digest()) を返します。
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    public String genAuthKey(String object, String privateKey, Long expireTime, Long previewTime) {
        String rand = "0";
        文字列uid = "0";
        if (StringUtils.isBlank(privateKey)) {
            "" を返します。
        }
        rand = generateRand();
        long timestamp = System.currentTimeMillis() / 1000 + (expireTime == null? 0 : expireTime);
        文字列authStr = timestamp + "-" + rand + "-" + uid;
        文字列md5Str = object + "-" + authStr + "-" + privateKey;
        if(previewTime!=0)
            md5Str = md5Str + "-" + previewTime;
        文字列auth_key = authStr + "-" + this.md5(md5Str);
        auth_keyを返します。
    }

    public void previewTest() が例外をスロー {
        try {
            String key = "<Your PrivateKey>";// VODコンソールで設定したプライマリキーまたはセカンダリキー。 詳細については、「プレビュー機能を有効にする」をご参照ください。 
            String fileUrl = "<Your File URL>";// ファイルのURL。 例: http://example.aliyundoc.com/test/bee21427ca3346848835c1bd786054c5-19bd8528c1d51576cd726cf86471ca0 ****.mp4。
            URL url=新しいURL(fileUrl);
            String file = url.getFile();
            Long previewTime=120L; // プレビュー期間。 
            長いexpireTime = 1800L;
            String auth_key =genAuthKey(file, key, expireTime, previewTime);
            fileUrl = fileUrl + "?auth_key=" + auth_key;
            if(previewTime! =0)
                fileUrl = fileUrl + "&end=" + previewTime;
            System.out.println(fileUrl);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }