作者:鹭舟
💡 新手必看:本文是阿里云视频点播系列教程的第一篇,适合零基础用户快速上手。全程配有操作截图和代码示例,轻松完成从上传到播放的完整链路。
一、什么是视频点播?1分钟搞懂核心概念
一句话定义
阿里云视频点播(VoD) 是一站式音视频点播解决方案,提供视频上传、自动转码、媒资管理、高速分发、播放器SDK等完整服务,让你无需关心底层技术架构,专注业务本身。
典型适用场景
场景类型 |
具体应用 |
核心需求 |
🎬 在线教育 |
网课平台、企业培训 |
视频加密、倍速播放、学习进度记录 |
📺 短视频/长视频平台 |
短视频应用、影视网站 |
快速转码、多清晰度、CDN加速 |
🏢 企业宣传 |
产品介绍、活动录播 |
水印添加、链接分享、访问统计 |
🎮 UGC内容社区 |
用户上传视频评测 |
内容审核、格式适配、存储管理 |
二、准备工作:开通服务,添加存储
2.1 注册/登录阿里云账号,开通视频点播
- 访问 阿里云官网,点击右上角「免费注册」
- 完成实名认证(个人/企业均可,需上传身份证/营业执照)
- 开通视频点播服务,操作路径:产品与服务 → 视频点播 → 立即开通
关键配置项:
- 计费方式:默认按量付费(建议新手先用免费额度测试)
- 存储区域:选择离用户最近的区域(如华东2-上海)
🎉 新人福利:首次开通视频点播可免费领取资源包,9.9元专享新人套餐(视频点播资源包+存储包+转码时长包)
2.2 获取AccessKey(访问密钥)
🔐 安全提示:AccessKey相当于账号密码,务必妥善保管!建议遵循"一个服务一个子账号"原则,避免使用主账号密钥带来的安全风险。
推荐方式:为视频点播创建RAM子账号(安全)
操作步骤:
- 使用阿里云账号(主账号)或RAM管理员登录RAM控制台,选择身份管理。
- 在用户页面,单击创建用户,设置访问方式为使用永久AccessKey访问。
⚠️ 注意:务必保存生成的 AccessKey ID 和 AccessKey Secret(仅显示一次!)
- 为子账号添加权限策略:AliyunVODFullAccess(视频点播完全控制权限)
2.3 配置存储
- 进入点播控制台 > 存储管理,在上方菜单栏选择要开通的服务地域。
- 单击启用点播系统Bucket。如果业务需要更高的可用性保障,建议选择同城冗余存储。
- (可选)选择配置管理 > 分发加速配置 > 域名管理,单击添加域名,配置域名、类型、端口和加速区域。
了解如何配置:https://help.aliyun.com/zh/vod/getting-started/activate-apsaravideo-vod
接下来,就可以开启阿里云视频点播的体验之旅~
三、【第1步】上传视频:3种方式任你选
3.1 上传方式速览
根据视频文件的来源位置,视频点播提供三种上传方式:
上传方式 |
适用场景 |
核心特点 |
本地上传 |
文件在本地/服务器 |
直接上传,支持断点续传 |
URL拉取 |
文件在其他网站 |
点播主动拉取,无需中转 |
媒资注册 |
文件已在OSS |
直接注册为点播媒资 |
3.2 本地上传(最常用)
典型应用:
- 运营人员从本地上传内容
- 文件存储在服务器端
实现途径:
上传途径 |
适用人群 |
特点 |
控制台上传 |
测试/小批量上传 |
可视化操作、零代码 |
SDK上传 |
开发者/批量上传 |
支持断点续传、并发上传 |
API上传 |
高级定制场景 |
灵活性最高 |
🎯 使用建议:新手测试用控制台,生产环境首选上传SDK——它内置了视频点播的凭证获取和OSS上传能力,简单配置即可使用,比直接调用API省80%的代码量。
途径一:控制台上传(新手首选)
操作路径:视频点播控制台 → 媒资库 → 音/视频 → 上传音/视频
详细步骤:
- 点击「添加音/视频」按钮
- 选择本地文件(支持MP4/M3U8/AVI等主流格式)
- 配置上传参数:
- 转码方式:选择「不转码」或「转码模板组」(后续详解)
- 存储地址:默认即可
- 工作流:暂不配置
- 点击「开始上传」,等待进度条完成
✅ 验证成功:上传完成后,在「音/视频」列表中能看到文件状态为「正常」
途径二:SDK上传(推荐生产环境)
以 JAVA SDK 为例(其他语言请参考官方文档)
集成上传SDK
- 下载地址:V1.4.15 SDK及Demo源码
- 引入JAR包(以IntelliJ IDEA为例):Project Structure > Modules > Dependencies,添加
VODUploadDemo-java-1.4.15/lib目录下的所有jar包。 - 添加相关依赖
<dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-core</artifactId> <version>4.5.1</version> </dependency> <dependency> <groupId>com.aliyun.oss</groupId> <artifactId>aliyun-sdk-oss</artifactId> <version>3.10.2</version> </dependency> <dependency> <groupId>com.aliyun</groupId> <artifactId>aliyun-java-sdk-vod</artifactId> <version>2.16.11</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.83</version> </dependency> <dependency> <groupId>org.json</groupId> <artifactId>json</artifactId> <version>20170516</version> </dependency> <dependency> <groupId>com.google.code.gson</groupId> <artifactId>gson</artifactId> <version>2.8.2</version> </dependency> <dependency> <groupId>com.aliyun.vod</groupId> <artifactId>upload</artifactId> <version>1.4.15</version> <scope>system</scope> <systemPath>${project.basedir}/src/main/resources/aliyun-java-vod-upload-1.4.15.jar</systemPath> </dependency>
上传代码示例
public class UploadVideoDemo { // 账号AK信息请填写(必选) // 阿里云账号AccessKey拥有所有API的访问权限,建议您使用RAM用户进行API访问或日常运维。 // 强烈建议不要把AccessKey ID和AccessKey Secret保存到工程代码里,否则可能导致AccessKey泄露,威胁您账号下所有资源的安全。 // 本示例通过从环境变量中读取AccessKey,来实现API访问的身份验证。运行代码示例前,请配置环境变量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。 private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"); private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"); public static void main(String[] args) { // 视频文件上传 // 视频标题(必选) String title = "测试标题"; String fileName = "/Users/test/video/test.mp4"; // 本地文件上传 testUploadVideo(accessKeyId, accessKeySecret, title, fileName); } } /** * 本地文件上传接口 * * @param accessKeyId * @param accessKeySecret * @param title * @param fileName */ private static void testUploadVideo(String accessKeyId, String accessKeySecret, String title, String fileName) { UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName); /* 可指定分片上传时每个分片的大小,默认为2M字节 */ request.setPartSize(2 * 1024 * 1024L); /* 可指定分片上传时的并发线程数,默认为1,(注:该配置会占用服务器CPU资源,需根据服务器情况指定)*/ request.setTaskNum(1); /* 是否开启断点续传, 默认断点续传功能关闭。当网络不稳定或者程序崩溃时,再次发起相同上传请求,可以继续未完成的上传任务,适用于超时3000秒仍不能上传完成的大文件。 注意:断点续传开启后,会在上传过程中将上传位置写入本地磁盘文件,影响文件上传速度,请您根据实际情况选择是否开启*/ //request.setEnableCheckpoint(false); /* 开启默认上传进度回调 */ //request.setPrintProgress(false); /* 设置自定义上传进度回调(必须继承 VoDProgressListener)*/ /*默认关闭。如果开启了这个功能,上传过程中服务端会在日志中返回上传详情。如果不需要接收此消息,需关闭此功能*/ //request.setProgressListener(new PutObjectProgressListener()); /* 设置您实现的生成STS信息的接口实现类*/ // request.setVoDRefreshSTSTokenListener(new RefreshSTSTokenImpl()); /* 设置应用ID*/ //request.setAppId("app-100****"); /* 点播服务接入点 */ //request.setApiRegionId("cn-shanghai"); /* ECS部署区域*/ // request.setEcsRegionId("cn-shanghai"); UploadVideoImpl uploader = new UploadVideoImpl(); UploadVideoResponse response = uploader.uploadVideo(request); System.out.print("RequestId=" + response.getRequestId() + "\n"); //请求视频点播服务的请求ID if (response.isSuccess()) { System.out.print("VideoId=" + response.getVideoId() + "\n"); } else { /* 如果设置回调URL无效,不影响视频上传,可以返回VideoId同时会返回错误码。其他情况上传失败时,VideoId为空,此时需要根据返回错误码分析具体错误原因 */ System.out.print("VideoId=" + response.getVideoId() + "\n"); System.out.print("ErrorCode=" + response.getCode() + "\n"); System.out.print("ErrorMessage=" + response.getMessage() + "\n"); } }
关键参数说明
Title:视频标题(用于控制台展示)FileName:文件名(需包含扩展名)VideoId:视频唯一标识(后续播放时需要)
途径三:API上传(高级场景)
通过调用 CreateUploadVideo API获取上传凭证,再使用OSS SDK上传文件。
适用场景:
- 服务端代理上传(用户直传到你的服务器,再转传到点播)
- 自定义上传进度条、失败重试逻辑
API文档:CreateUploadVideo接口说明
3.3 URL拉取上传(快速迁移)
典型应用:
- 从其他视频平台迁移内容
- 批量采集公开的视频资源
- 定时拉取合作方视频
核心优势:
✅ 无需下载到本地,点播服务器直接拉取
✅ 支持批量提交,后台自动处理
✅ 节省带宽成本和中转时间
操作步骤:API调用(推荐批量处理)
public static void main(String[] args) throws Exception { // 初始化客户端 DefaultProfile profile = DefaultProfile.getProfile( "cn-shanghai", System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET") ); DefaultAcsClient client = new DefaultAcsClient(profile); // 构造请求 UploadMediaByURLRequest request = new UploadMediaByURLRequest(); String url = "https://example.com/video/sample.mp4"; request.setUploadURLs(URLEncoder.encode(url, "UTF-8")); // 设置元数据 JSONObject metadata = new JSONObject(); metadata.put("SourceUrl", URLEncoder.encode(url, "UTF-8")); metadata.put("Title", "批量迁移视频-001"); JSONArray metadataList = new JSONArray(); metadataList.add(metadata); request.setUploadMetadatas(metadataList.toJSONString()); // 可选:指定转码模板组 // request.setTemplateGroupId("转码模板组ID"); // 发送请求 UploadMediaByURLResponse response = client.getAcsResponse(request); System.out.println("任务ID:" + response.getUploadJobs().get(0).getJobId()); }
注意事项:
⚠️源URL必须公网可访问(不能有鉴权或IP白名单限制)
⚠️ 单个文件最大支持25GB
⚠️ 拉取失败会自动重试3次
3.4 媒资注册(OSS存量接入)
典型应用:
- 视频文件已存储在阿里云OSS
- 希望使用点播的转码、CDN分发、播放器能力
- 避免重复上传,直接注册为点播媒资
核心优势:
✅ 秒级完成注册,无需数据传输
✅ OSS文件不移动,仅建立点播索引
✅ 适合存量视频快速接入点播服务
前置条件:
- OSS Bucket与点播服务在同一地域,且已绑定点播服务
- 已授权点播服务访问OSS(自动授权或手动配置RAM角色)
操作步骤:API调用
/** * 初始化客户端 */ public static Client createClient() throws Exception { CredentialClient credential = new CredentialClient(); Config config = new Config() .setCredential(credential) .setEndpoint("vod.cn-shanghai.aliyuncs.com"); return new Client(config); } public static void main(String[] args) throws Exception { Client client = createClient(); // 构造注册请求 RegisterMediaRequest request = new RegisterMediaRequest(); request.setRegisterMetadatas( "[{\"FileURL\":\"https://your-bucket.oss-cn-shanghai.aliyuncs.com/video/sample.mp4\",\"Title\":\"OSS存量视频-001\"}]" ); // 可选:指定转码模板组 // request.setTemplateGroupId("转码模板组ID"); // 发送请求 RegisterMediaResponse response = client.registerMedia(request); System.out.println("注册成功!视频ID:" + response.getBody().getRegisteredMediaList().get(0).getMediaId()); }
OSS文件URL格式:
公网地址:https://bucket-name.oss-cn-shanghai.aliyuncs.com/path/to/video.mp4 内网地址:https://bucket-name.oss-cn-shanghai-internal.aliyuncs.com/path/to/video.mp4
⚠️ 注意:OSS存储费用仍由OSS账单结算,点播仅收取转码、流量等费用
四、【第2步】转码设置:让视频适配所有设备
4.1 为什么需要转码?
原始视频问题 |
转码后效果 |
文件过大(如4K原片5GB) |
压缩至几百MB,节省流量费 |
格式不通用(如MKV格式) |
转为MP4/HLS,兼容所有浏览器 |
单一清晰度 |
生成多清晰度(流畅/标清/高清),用户可切换 |
4.2 预设模板 vs 自定义参数
方案一:使用预设模板(推荐新手)
阿里云提供开箱即用的转码模板组,覆盖90%常见场景。
操作步骤:
- 控制台 → 配置管理 → 媒体处理配置 → 转码模板组
- 点击「添加转码模板组」
- 选择预设配置:
- 普通加密模板组:适用于公开内容
- HLS标准加密:需要基础版权保护
- 多码率自适应:根据网络自动切换清晰度
推荐模板示例:
模板组名称:标准转码组 包含输出格式: - 流畅(LD):640x360, 600kbps - 标清(SD):960x540, 1000kbps - 高清(HD):1280x720, 2000kbps
方案二: 自定义转码参数(进阶用户)
适用场景:
- 需要特定分辨率(如竖屏视频1080x1920)
- 控制码率范围(节省成本或提升质量)
- 添加水印
创建方式:
通过API调用 AddTranscodeTemplateGroup
核心参数配置:
{ "Video": { "Codec": "H.264", // 视频编码格式 "Bitrate": "1000", // 码率(Kbps) "Width": "1280", // 宽度 "Height": "720", // 高度 "Fps": "25" // 帧率 }, "Audio": { "Codec": "AAC", "Bitrate": "128", // 音频码率 "Samplerate": "44100" // 采样率 }, "Container": { "Format": "mp4" // 封装格式 } }
4.3 如何触发转码?
方法一:上传时自动转码
适用场景:标准化业务流程,所有视频都需要转码
操作方法:
控制台选择「模板组上传」(见前文),或者在上传接口中指定转码模板组ID:
request.setTemplateGroupId("模板组ID") # 从控制台复制
方法二:手动提交转码任务
适用场景:
- 需要人工审核后再转码
- 不同视频需要动态选择不同转码参数
- 批量对历史视频重新转码
操作方法:
对于已上传的视频,在控制台点击「转码」按钮
或调用 SubmitTranscodeJobs API
/** * 初始化客户端 */ public static Client createClient() throws Exception { CredentialClient credential = new CredentialClient(); Config config = new Config() .setCredential(credential) .setEndpoint("vod.cn-shanghai.aliyuncs.com"); return new Client(config); } public static void main(String[] args) throws Exception { Client client = createClient(); // 构造请求 SubmitTranscodeJobsRequest request = new SubmitTranscodeJobsRequest(); request.setVideoId("视频ID"); request.setTemplateGroupId("转码模板组ID"); // 发送请求 SubmitTranscodeJobsResponse response = client.submitTranscodeJobs(request); System.out.println("转码任务提交成功!任务ID:" + response.getBody().getTranscodeTaskId()); }
方式三:工作流自动触发
适用场景:
- 企业级复杂业务流程
- 需要自动化执行"上传→审核→转码→截图→分发"全链路
什么是工作流?
工作流是点播提供的自动化编排能力,可以将转码、截图、审核等多个环节串联成流水线,上传完成后自动按规则执行。
工作流 vs 普通转码:
对比项 |
上传时触发转码 |
工作流转码 |
处理环节 |
仅转码 |
转码+截图+审核+动图... |
触发条件 |
上传完成即触发 |
可设置条件判断(如审核成功才转码) |
灵活性 |
固定流程 |
可根据业务属性自由组装 |
快速使用:
CreateUploadVideoRequest request = new CreateUploadVideoRequest(); request.setWorkflowId("workflow-abc123"); # 指定工作流ID # 注意:WorkflowId 和 TemplateGroupId 二选一,工作流优先级更高
配置入口:
视频点播控制台 → 配置管理 → 媒体处理配置 → 工作流 → 添加工作流
可在控制台可视化配置处理节点,如:上传完成 → 智能审核 → 转码 → 截图 → 结束
典型应用:
- 短视频平台:自动审核+移动端转码+动图封面
- 在线教育:加密转码+章节截图+防盗水印
五、【第3步】生成播放器并嵌入网站
5.1 快速获取播放地址
方式一:获取播放凭证(推荐)
/** * 初始化客户端 */ public static Client createClient() throws Exception { CredentialClient credential = new CredentialClient(); Config config = new Config() .setCredential(credential) .setEndpoint("vod.cn-shanghai.aliyuncs.com"); return new Client(config); } public static void main(String[] args) throws Exception { Client client = createClient(); // 构造请求 GetVideoPlayAuthRequest request = new GetVideoPlayAuthRequest(); request.setVideoId("视频ID"); // 发送请求 GetVideoPlayAuthResponse response = client.getVideoPlayAuth(request); System.out.println("播放凭证:" + response.getBody().getPlayAuth()); }
🔒 安全优势:播放凭证有效期默认100秒(最大3000秒),防止盗链
5.2 嵌入Web播放器(附完整代码)
HTML页面示例
<!DOCTYPE html> <html> <head> <title>阿里云视频播放器</title> <!-- 引入播放器SDK --> <link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.15.4/skins/default/aliplayer-min.css" /> <script src="https://g.alicdn.com/de/prismplayer/2.15.4/aliplayer-min.js"></script> </head> <body> <!-- 播放器容器 --> <div id="player-container" style="width:800px;height:450px;"></div> <script> var player = new Aliplayer({ id: "player-container", // 容器ID vid: "你的视频ID", // 从上传接口返回 playauth: "你的播放凭证", // 从GetVideoPlayAuth获取 width: "100%", height: "450px", autoplay: false, // 是否自动播放 authTimeout: 7200 }, function(player) { console.log("播放器初始化完成"); }); </script> </body> </html>
关键配置说明
参数 |
说明 |
推荐值 |
|
视频ID(必填) |
上传后返回的VideoId |
|
播放凭证(必填) |
服务端实时获取 |
|
播放地址的有效时长,单位:秒 |
默认值7200。如设置,请确保该时间大于视频的实际时长 |
效果预览
5.3 移动端集成(iOS/Android)
iOS快速集成:
AVPVidAuthSource *authSource = [[AVPVidAuthSource alloc] init]; authSource.vid = @"你的视频ID"; // 必选参数,播放凭证,需要调用点播服务的GetVideoPlayAuth接口生成。 authSource.playAuth = @"<播放凭证>"; authSource.region = @"接入地域"; [self.player setAuthSource:authSource];
Android快速集成:
AliPlayer player = AliPlayerFactory.createAliPlayer(context); // VidAuth播放配置 VidAuth vidAuth = new VidAuth(); vidAuth.setVid("你的视频ID"); vidAuth.setPlayAuth("播放凭证"); vidAuth.setRegion("接入地域"); player.setDataSource(vidAuth);
📱 SDK下载:iOS播放器SDK | Android播放器SDK
效果预览
六、常见问题排查(新手必看)
Q1:上传后视频无法播放?
排查步骤:
- 检查转码状态:控制台查看是否显示「转码中」→ 等待转码完成
- 确认播放凭证有效期:PlayAuth存在有效期,需动态获取
- 查看浏览器控制台报错:按F12查看Network请求
Q2:播放器显示"403 Forbidden"错误?
原因:播放鉴权失败解决方案:
- 检查AccessKey是否正确
- 确认RAM子账号已授权
AliyunVODFullAccess - 验证VideoId与PlayAuth是否匹配
Q3:如何降低流量成本?
优化建议:
- 开启窄带高清™转码(同等质量下节省30%流量)
- 基于您的实际业务购买合适的资源包
- 配置Referer防盗链(防止恶意消耗)
Q4:支持哪些视频格式上传?
支持格式:MP4、TS、3GP、MPG、MPEG、MPE、DAT、VOB、ASF、AVI、WMV、ASF、FLV、F4V、RM、RMVB、MOV、MKV、M3U8、DV、GIF、M2T、M4V、MJ2、MJPEG、MTS、OGG、QT、SWF、WEBM。
七、下一步学习路径
恭喜你,已经掌握了视频点播的核心流程!
📚 继续学习:关注本系列后续文章,我们将深入讲解视频点播的更多进阶功能。
📞 获取帮助: