プレビュー機能を有効にすると、ユーザーはオーディオまたはビデオファイルの所定の期間をプレビューできます。 ほとんどの場合、この機能は、レッスンやTVシリーズなどの有料メディア資産に使用されます。 このトピックでは、プレビュー機能を有効にしてプレビューURLを取得する方法について説明します。
制御ポリシー機能の動作
Alibaba Cloud ApsaraVideo VODはプレビュー機能を提供します。 サーバー側でGetPlayInfo操作を呼び出して、プレビュー期間を指定できます。 この操作はプレビューURLを返します。 または、プレビュー情報を含む署名付きプレビューURLを作成できます。
重要
指定したプレビュー期間がビデオの合計期間を超える場合は、ApsaraVideo VODから返されるプレビューURLを使用して、ビデオ全体を再生できます。
Alibaba Cloud ApsaraVideo VODのプレビュー機能は、Alibaba Cloud CDNに基づいて実装されています。 プレビュー機能の基本原則は、プレーヤーが指定されたプレビュー期間に関する情報を含むCDN高速化プレビューURLを使用してApsaraVideo VODにアクセスすることです。 ファイルが返される前に、システムはURLを検証する必要があります。 プレビューURLが検証に合格した場合、指定されたファイルが返されます。 それ以外の場合、アクセスは拒否され、HTTP 403ステータスコードが返されます。 次の図は、ApsaraVideo VODのプレビュー機能の動作を示しています。

CDNの高速化ドメイン名を設定し、プレビュー機能を有効にします。
重要
プレビュー機能を使用する前に、ドメイン名を設定してプレビュー機能を有効にする必要があります。 詳細については、「プレビュー機能の有効化」をご参照ください。
プレーヤーはプレビューリクエストをApsaraVideo VODに送信します。
ApsaraVideo VODは、プレビューリクエストのドメイン名設定とプレビュー期間設定に基づいてプレビューURLを生成します。
プレイヤーはプレビューURLを使用してCDNからビデオをリクエストします。
制限事項
ApsaraVideo VODでは、MP4およびHLS形式のビデオファイルをプレビューできます。 MP4ファイルのメタデータは、ファイルヘッダーに含まれている必要があります。 ファイルテールにメタデータが含まれているMP4ファイルはプレビューできません。 ApsaraVideo VODがビデオをトランスコードし、そのコンテナ形式をMP4に変換すると、システムはメタデータをファイルヘッダーに配置します。
プレビュー期間は、キーフレームに基づいて決定されます。 ショートビデオにはプレビュー機能を使用しないことをお勧めします。 長い動画の場合は、プレビュー時間を30秒以上に設定することを推奨します。 デフォルトでは、トランスコードされたビデオのキーフレーム間隔は10秒です。
HLSファイルのプレビュー粒度は、各TSセグメントの期間です。 指定されたプレビュー期間と返されたビデオの実際のプレビュー期間は異なる場合があります。 返されるビデオの実際のプレビュー期間は、指定されたプレビュー期間に基づいて切り上げられます。 たとえば、TSセグメントの長さが10秒で、指定されたプレビューの長さが15秒の場合、返されるビデオのプレビューの長さは20秒です。
プレビュー機能を有効にする
操作を呼び出してプレビューURLを取得するか、プレビューURLを作成する前に、ドメイン名を設定してプレビュー機能を有効にする必要があります。 プレビュー機能を有効にするには、次の手順を実行します。
CDNの高速化ドメイン名を設定します。 詳細については、「CDNのドメイン名の追加」をご参照ください。
重要
プレビュー機能を使用するには、CDNの高速化ドメイン名を設定する必要があります。
URL署名を有効にし、サポートプレビューをオンにします。 詳細については、「URL署名」をご参照ください。
重要
ドメイン名でプレビュー機能が有効になっていない場合、ビデオ再生のリクエストにプレビューパラメーターを含めることができず、返されたURLにアクセスできません。 URL署名を設定するときは、サポートプレビューをオンにする必要があります。
次の図は、VODコンソールでプレビュー機能を有効にする方法を示しています。
説明
プレビューURLを手動で作成するには、privateKeyパラメーターを指定して認証値を計算する必要があります。 値は、コンソールで生成または入力されたプライマリキーまたはセカンダリキーの値です。 後続の使用のために上記の値を記録します。

Back-to-origin of Rangeをオンにし、ドメイン名の再生をドラッグ /ドロップします。 詳細については、「オブジェクトのチャンク化」および「ビデオ検索」をご参照ください。
GetPlayInfo操作を呼び出して、プレビューURLを取得します。
ApsaraVideo VODを使用すると、GetPlayInfo操作を呼び出してビデオのプレビューURLを取得できます。 詳細については、「GetPlayInfo」をご参照ください。 ApsaraVideo VOD SDKを統合し、SDKを使用してこの操作を呼び出し、プレビューURLを取得できます。 プレビューURLを取得するには、次の手順を実行します。
重要
この操作を呼び出す前に、プレビュー機能が有効になっていることを確認してください。 詳細については、「プレビュー機能の有効化」をご参照ください。
ビジネス要件に基づいてApsaraVideo VOD SDKを統合します。 詳細については、次をご参照ください: ApsaraVideo VOD SDKクイックスタート
SDKを使用して、GetPlayInfo操作を呼び出します。 この操作を呼び出すときに、PlayConfigのPreviewTimeを使用してプレビュー期間を指定できます。 サーバーは、プレビュー期間の設定に基づいてプレビューURLを返します。 PlayConfigパラメーターの詳細については、「リクエストパラメーター」をご参照ください。
プレビューURLを取得するためのサンプルコードをJavaで表示する
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoRequest;
import com.aliyuncs.vod.model.v20170321.GetPlayInfoResponse;
public class VodPreviewTest {
public static void main(String[] args) throws ClientException {
String regionId = "cn-shanghai";
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
String videoId = "<your videoId>";
DefaultAcsClient client = InitVodClient(regionId, accessKeyId, accessKeySecret);
GetPlayInfoResponse response = null;
try {
response = getPlayInfo(client, videoId);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("response = " + JSONObject.toJSONString(response));
}
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;
}
public static GetPlayInfoResponse getPlayInfo(DefaultAcsClient client, String videoId) throws Exception {
GetPlayInfoRequest request = new GetPlayInfoRequest();
request.setVideoId(videoId);
request.setAuthTimeout(3600L);
request.setFormats("mp4");
JSONObject playConfig = new JSONObject();
playConfig.put("PreviewTime", "30");
request.setPlayConfig(playConfig.toJSONString());
return client.getAcsResponse(request);
}
}
プレビューURLを作成する
ApsaraVideo VODを使用すると、プレビュー情報を含む署名付きURLを作成できます。 署名付きURLを作成するには、次の手順を実行します。
重要
プレビューURLを作成する前に、プレビュー機能が有効になっていることを確認してください。 詳細については、「プレビュー機能の有効化」をご参照ください。
プレビューパラメーターを含む署名付きURLを作成します。 署名付きプレビューURLのMD5ハッシュ値を計算する場合、プレビュー期間の計算に使用するpreviewTime
を追加する必要があります。
ビデオのURLのMD5ハッシュ計算 | プレビューURLのMD5ハッシュ計算 |
ビデオのURLのMD5ハッシュ計算 | プレビューURLのMD5ハッシュ計算 |
MD5(uri-timestamp-rand-uid-PrivateKey)
| MD5(uri-timestamp-rand-uid-PrivateKey-previewTime)
|
説明
MD5ハッシュ計算のパラメーターと、署名付きURLの作成に使用されるメソッドの詳細については、「URL認証の設定」をご参照ください。 ビデオ全体を再生する場合は、previewTimeパラメーターを設定しないでください。
構築された署名付き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;
import java.net.URL;
import org.apache.commons.lang3.StringUtils;
private String generateRand() {
return UUID.randomUUID().toString().replaceAll("-", "");
}
private String md5(String str) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
md5.update(str.getBytes("UTF-8"));
return bytesToHex(md5.digest());
} catch (Exception e) {
e.printStackTrace();
}
}
public String genAuthKey(String object, String privateKey, Long expireTime, Long previewTime) {
String rand = "0";
String uid = "0";
if (StringUtils.isBlank(privateKey)) {
return "";
}
rand = generateRand();
long timestamp = System.currentTimeMillis() / 1000 + (expireTime == null ? 0 : expireTime);
String authStr = timestamp + "-" + rand + "-" + uid;
String md5Str = object + "-" + authStr + "-" + privateKey;
if(previewTime!=0)
md5Str = md5Str + "-" + previewTime;
String auth_key = authStr + "-" + this.md5(md5Str);
return auth_key;
}
public void previewTest() throws Exception {
try {
String key = "<Your PrivateKey>";
String fileUrl = "<Your File URL>";
URL url = new URL(fileUrl);
String file = url.getFile();
Long previewTime = 120L;
Long 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();
}
}