プレビュー機能を有効にすると、ユーザーはオーディオまたはビデオファイルの所定の期間をプレビューできます。 ほとんどの場合、この機能は、レッスンや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;
/**
* @date 2021/12/30
*/
public class VodPreviewTest {
public static void main(String[] args) throws ClientException {
// Specify the region in which ApsaraVideo VOD is activated. For more information, see Region IDs of ApsaraVideo VOD.
String regionId = "cn-shanghai";
// The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M.
// We recommend that you not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised.
// In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET.
// Specify your AccessKey ID.
String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
// Specify your AccessKey secret.
String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");
// Specify the ID of the video. Example: 533606af570e4db4961248d0978b****. If you upload a video by using the ApsaraVideo VOD console, you can choose Media Files > Audio/Video in the left-side navigation pane of the ApsaraVideo VOD console to view the ID of the video. If you upload a video by calling the CreateUploadVideo operation, the ID of the video is the value of VideoId in the response.
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));
}
/**
* Initialize the client.
*
* @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;
}
/**
* Obtain the preview URL.
*
* @param client
* @param videoId
* @return
* @throws Exception
*/
public static GetPlayInfoResponse getPlayInfo(DefaultAcsClient client, String videoId) throws Exception {
GetPlayInfoRequest request = new GetPlayInfoRequest();
request.setVideoId(videoId);
// Specify the validity period in seconds. Default value: 3600.
request.setAuthTimeout(3600L);
request.setFormats("mp4");
JSONObject playConfig = new JSONObject();
// Specify the preview duration in seconds. Minimum value: 1.
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ハッシュ計算 |
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>";// The primary key or secondary key that you configured in the VOD console. For more information, see Enable the preview feature.
String fileUrl = "<Your File URL>";// The URL of the file. Example: http://example.aliyundoc.com/test/bee21427ca3346848835c1bd786054c5-19bd8528c1d51576cd726cf86471ca0****.mp4.
URL url = new URL(fileUrl);
String file = url.getFile();
Long previewTime = 120L;// The preview duration.
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();
}
}