當媒資庫中儲存了海量音視頻、圖片檔案時,快速定位媒資成為一大挑戰。ApsaraVideo for VOD(VOD)的媒資搜尋功能提供強大的多維度搜尋、篩選與排序能力,協助通過控制台或API/SDK從海量資料中高效、精確地檢索所需媒資。
情境一:通過控制台搜尋
以搜尋音/視頻資訊為例:
在左側導覽列選擇媒资库 > 音/視頻,進入到音/視頻管理頁面。
可以使用頁面頂部的篩選和搜尋功能來定位媒資。

搜尋功能:支援對媒体名称進行模糊搜尋,對媒体ID、标签名称進行精確搜尋。
篩選功能:支援對音/視頻存储地址、类型、分类、状态、来源、儲存類型進行篩選,並可選擇按创建时间正序或倒序排列。
情境二:通過API/SDK搜尋媒資
推薦使用服務端SDK調用API來搜尋媒資資訊,詳情請參見VOD SDK使用說明。
通過SearchMedia - 搜尋媒體資訊介面,可以將搜尋能力整合到業務系統中,實現媒資檢索功能的自動化。支援作為過濾條件的媒資資訊包括VideoId、CateId、StorageLocation、Title、Tags等欄位,詳情請參見媒資搜尋協議。程式碼範例如下:
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.IAcsClient;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.SearchMediaRequest;
import com.aliyuncs.vod.model.v20170321.SearchMediaResponse;
public class SearchMediaExample {
public static void main(String[] args) {
// 初始化用戶端
DefaultProfile profile = DefaultProfile.getProfile(
"cn-shanghai", // 地區ID
"YOUR_ACCESS_KEY_ID", // AccessKey ID
"YOUR_ACCESS_KEY_SECRET"// AccessKey Secret
);
IAcsClient client = new DefaultAcsClient(profile);
// 構建請求
SearchMediaRequest request = new SearchMediaRequest();
request.setMatch("Title='VOD' AND Status='Normal'");
request.setFields("Title,CoverURL,Duration,Size");
request.setSortBy("CreationTime:Desc");
request.setPageSize(20);
request.setPageNo(1);
try {
SearchMediaResponse response = client.getAcsResponse(request);
System.out.println("Total Records: " + response.getTotal());
for (SearchMediaResponse.Media media : response.getMediaList()) {
System.out.println("VideoId: " + media.getMediaId() + ", Title: " + media.getVideo().getTitle());
}
} catch (Exception e) {
System.err.println("An error occurred: " + e.getMessage());
e.printStackTrace();
}
}
}from aliyunsdkcore.client import AcsClient
from aliyunsdkvod.request.v20170321 import SearchMediaRequest
import json
# 初始化用戶端
client = AcsClient(
'YOUR_ACCESS_KEY_ID',
'YOUR_ACCESS_KEY_SECRET',
'cn-shanghai'
)
# 構建請求
request = SearchMediaRequest.SearchMediaRequest()
request.set_Match("Title='VOD' AND Status='Normal'")
request.set_Fields("Title,CoverURL,Duration,Size")
request.set_SortBy("CreationTime:Desc")
request.set_PageSize(20)
request.set_PageNo(1)
try:
response_str = client.do_action_with_exception(request)
response_data = json.loads(response_str)
print(f"Total Records: {response_data.get('Total')}")
for media in response_data.get('MediaList', {}).get('Media', []):
print(f"VideoId: {media.get('MediaId')}, Title: {media.get('Video', {}).get('Title')}")
except Exception as e:
print(f"An error occurred: {e}")分頁與資料遍曆
為保證查詢效能,媒資搜尋提供了兩種分頁模式。
標準分頁(適用於UI展示)
使用翻頁參數
PageNo和PageSize逐頁擷取分頁資料,最多可擷取搜尋結果的前5000條資料。滾動遍曆(適用於資料匯出)
通過翻頁參數
PageNo、PageSize和遊標ScrollToken實現深度遍曆,能夠分段擷取全量搜尋結果,但每段限制最多1200條資料。程式碼範例如下:// 滾動遍曆樣本 String scrollToken = null; // 在一次完整的遍曆過程中,SessionId 必須保持不變 String sessionId = java.util.UUID.randomUUID().toString(); List<SearchMediaResponse.Media> allMedia = new ArrayList<>(); do { SearchMediaRequest request = new SearchMediaRequest(); request.setPageSize(100); // 每次最多拉取100條 request.setSessionId(sessionId); if (scrollToken != null) { request.setScrollToken(scrollToken); } SearchMediaResponse response = client.getAcsResponse(request); if (response.getMediaList() != null) { allMedia.addAll(response.getMediaList()); } scrollToken = response.getScrollToken(); // 當返回的 scrollToken 為空白或 null 時,表示所有資料已遍曆完畢 } while (scrollToken != null && !scrollToken.isEmpty());
API使用樣本
下文將以搜尋視頻資訊為例介紹搜尋語句。
發送請求前需要對請求參數做URL編碼。
同時語句中使用的等號、雙引號、單引號、括弧必須為英文半形。
分類 | 描述 |
返回欄位 | 媒資搜尋介面預設返回媒資基本資料,當需要附加其他媒資資訊時需要指定 請求樣本: |
精確匹配 | 查詢 請求樣本: |
模糊比對 |
或者寫成 請求樣本: |
多值查詢 | 注意:如果用於查詢的欄位僅支援模糊比對,那麼查詢結果也將基於模糊比對返回。 查詢 請求樣本: |
範圍查詢 | 使用開閉區間表示範圍, 請求樣本: 如果只有左邊界或右邊界,對應右邊界或左邊界值為空白即可,如 請求樣本: |
排序欄位 | 按建立時間倒排: 請求樣本: |