当媒资库中存储了海量音视频、图片文件时,快速定位媒资成为一大挑战。视频点播(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编码。
同时语句中使用的等号、双引号、单引号、括号必须为英文半角。
分类 | 描述 |
返回字段 | 媒资搜索接口默认返回媒资基本信息,当需要附加其他媒资信息时需要指定 请求示例: |
精确匹配 | 查询 请求示例: |
模糊匹配 |
或者写成 请求示例: |
多值查询 | 注意:如果用于查询的字段仅支持模糊匹配,那么查询结果也将基于模糊匹配返回。 查询 请求示例: |
范围查询 | 使用开闭区间表示范围, 请求示例: 如果只有左边界或右边界,对应右边界或左边界值为空即可,如 请求示例: |
排序字段 | 按创建时间倒排: 请求示例: |