阿里云VOD视频点播流程(2)
二、视频点播
1、入门代码
基于OSS原生SDK上传 ,参考文档:https://help.aliyun.com/zh/vod/user-guide/upload-media-files-by-using-oss-sdks?spm=a2c4g.11186623.0.0.1f02273fj4lxNJ
视频点播面向开发者提供了丰富的上传方式,其中上传SDK(分服务端和客户端)封装了上传相关的基础逻辑,仅需简单配置即可实现上传功能,推荐使用
基于OSS原生SDK上传需要开发者自行实现所有上传逻辑,包括在点播服务获取上传地址和凭证、Base64解码上传地址和凭证以及调用OSS能力完成上传。
以集成点播服务端SDK获取上传地址和凭证为例,完整的上传流程如下图所示:

流程详解
- 上传应用服务器使用RAM用户AK方式(AccessKey ID和AccessKey Secret)或STS临时AK初始化点播客户端。
- 上传应用服务器使用点播服务端SDK调用上传地址和凭证相关接口获取上传地址、上传凭证及媒资信息。
- 点播服务在请求结果中返回Base64加密的上传地址(UploadAddress)、上传凭证(UploadAuth)、和媒体ID等信息。上传应用服务器可根据返回结果解析参数作为初始化OSS原生SDK的入参。
- 上传应用服务器使用解析后的上传地址(UploadAddress)和授权信息(UploadAuth),通过STS方式初始化OSS客户端。
- 上传应用服务器使用OSS SDK调用OSS上传相关接口将媒体文件上传至指定的存储地址。
- OSS服务返回上传结果。
需要的依赖包
<dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.6.0</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-vod</artifactId><version>2.16.10</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-kms</artifactId><version>2.10.1</version></dependency><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version></dependency>
上传代码案例:
import com.alibaba.fastjson.JSONObject;
import com.aliyun.oss.OSSClient;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoRequest;
import com.aliyuncs.vod.model.v20170321.CreateUploadVideoResponse;
import org.apache.commons.codec.binary.Base64;import java.io.File;/*** 上传代码案例*/
public class UploadDemo {//初始化VOD客户端、需要注意接入服务地址public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {// 根据点播接入服务所在的Region填写,例如:接入服务在上海,则填cn-shanghai;其他区域请参见存储说明。String regionId = "cn-shanghai";DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);DefaultAcsClient client = new DefaultAcsClient(profile);return client;}//创建视频上传结果对象public static CreateUploadVideoResponse createUploadVideo(DefaultAcsClient vodClient) throws ClientException {CreateUploadVideoRequest request = new CreateUploadVideoRequest();request.setFileName("vod_test.mp4");request.setTitle("this is title");//设置请求超时时间request.setSysReadTimeout(1000);request.setSysConnectTimeout(1000);return vodClient.getAcsResponse(request);}//初始OSS客户端public static OSSClient initOssClient(JSONObject uploadAuth, JSONObject uploadAddress) {String endpoint = uploadAddress.getString("Endpoint");String accessKeyId = uploadAuth.getString("AccessKeyId");String accessKeySecret = uploadAuth.getString("AccessKeySecret");String securityToken = uploadAuth.getString("SecurityToken");return new OSSClient(endpoint, accessKeyId, accessKeySecret, securityToken);}//上传文件public static void uploadLocalFile(OSSClient ossClient, JSONObject uploadAddress, String localFile) {String bucketName = uploadAddress.getString("Bucket");String objectName = uploadAddress.getString("FileName");File file = new File(localFile);ossClient.putObject(bucketName, objectName, file);}/*** accessKeyId、accessKeySecret和localFile这三个变量需要设置* @param args*/public static void main(String[] args) {//您的AccessKeyIdString accessKeyId = "xxxxx";//您的AccessKeySecretString accessKeySecret = "xxxxx";//需要上传到VOD的本地视频文件的完整路径,需要包含文件扩展名String localFile = "D:\\临时资料\\xxx.mp4";try {// 初始化VOD客户端并获取上传地址和凭证DefaultAcsClient vodClient = initVodClient(accessKeyId, accessKeySecret);//创建一个相应对象CreateUploadVideoResponse createUploadVideoResponse = createUploadVideo(vodClient);// 执行成功会返回VideoId、UploadAddress和UploadAuthString videoId = createUploadVideoResponse.getVideoId();//解析拿到结果对象JSONObject uploadAuth = JSONObject.parseObject(decodeBase64(createUploadVideoResponse.getUploadAuth()));JSONObject uploadAddress = JSONObject.parseObject(decodeBase64(createUploadVideoResponse.getUploadAddress()));// 使用UploadAuth和UploadAddress初始化OSS客户端OSSClient ossClient = initOssClient(uploadAuth, uploadAddress);// 上传文件,注意是同步上传会阻塞等待,耗时与文件大小和网络上行带宽有关uploadLocalFile(ossClient, uploadAddress, localFile);System.out.println("Put local file succeed, VideoId : " + videoId);} catch (Exception e) {System.out.println("Put local file fail, ErrorMessage : " + e.getLocalizedMessage());}}private static String decodeBase64(String data) {return new String(Base64.decodeBase64(data));}
}
上传成功,可以看到视频ID。播放的时候是需要用到视频ID

2、播放视频
去到VOD控制台 -> 媒体库 -> 找到上传成功的视频

点击管理 -> 在基础信息中可以看到视频的基本情况,包括视频ID,存储地址,点击web播放器代码,官方提供了视频播放的Html和JS脚本。

创建一个html文件将代码复制进去。vid : 视频的id;payauth : 播放凭证

3.获取payauth
官方说明:请复制代码并补充playauth值后再使用,playauth获取方式请参考文档获取播放凭证,我们根据文档去获取播放凭证,文档地址:https://help.aliyun.com/zh/vod/developer-reference/api-vod-2017-03-21-getvideoplayauth
这里可以先试用调试 - 拿到播放凭证

进入调试页面,选择服务器地址,制定VideoId视频ID,然后点击发起调用,就可以获得播放凭证。

将右侧的凭证复制到html中,刷新页面尝试播放,而且通过network可以看得出,采用的是视频点播,边下边播的方式。


获取播放凭证代码可以在调试 -> SDK实例里面直接下载官方代码

运行需要导入依赖
<dependency><groupId>com.aliyun</groupId><artifactId>vod20170321</artifactId><version>2.16.16</version>
</dependency>
打开后代码:
package com.buba.util;/*** @title Sample*/
import com.aliyun.tea.*;public class Sample {/*** 使用AK&SK初始化账号Client,需要设置AccessKeyId、AccessKeySecret* @return Client* @throws Exception*/public static com.aliyun.vod20170321.Client createClient() throws Exception {// 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。// 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378657.html。com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()// 访问ID:必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID与其对应的值。.setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))// 访问密保:必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET与其对应的值。.setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));// Endpoint 请参考 https://api.aliyun.com/product/vodconfig.endpoint = "vod.cn-shanghai.aliyuncs.com";return new com.aliyun.vod20170321.Client(config);}public static void main(String[] args_) throws Exception {java.util.List<String> args = java.util.Arrays.asList(args_);com.aliyun.vod20170321.Client client = Sample.createClient();com.aliyun.vod20170321.models.GetVideoPlayAuthRequest getVideoPlayAuthRequest = new com.aliyun.vod20170321.models.GetVideoPlayAuthRequest().setVideoId("d079e82b0d0871efbfb85017e1f80102");com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();try {com.aliyun.vod20170321.models.GetVideoPlayAuthResponse resp = client.getVideoPlayAuthWithOptions(getVideoPlayAuthRequest, runtime);System.out.println(com.aliyun.teautil.Common.toJSONString(resp));} catch (TeaException error) {// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。// 错误 messageSystem.out.println(error.getMessage());// 诊断地址System.out.println(error.getData().get("Recommend"));com.aliyun.teautil.Common.assertAsString(error.message);} catch (Exception _error) {TeaException error = new TeaException(_error.getMessage(), _error);// 此处仅做打印展示,请谨慎对待异常处理,在工程项目中切勿直接忽略异常。// 错误 messageSystem.out.println(error.getMessage());// 诊断地址System.out.println(error.getData().get("Recommend"));com.aliyun.teautil.Common.assertAsString(error.message);}}}
相关文章:
阿里云VOD视频点播流程(2)
二、视频点播 1、入门代码 基于OSS原生SDK上传 ,参考文档:https://help.aliyun.com/zh/vod/user-guide/upload-media-files-by-using-oss-sdks?spma2c4g.11186623.0.0.1f02273fj4lxNJ 视频点播面向开发者提供了丰富的上传方式,其中上传SDK&…...
在Ubuntu上搭建幻兽帕鲁服务器
简介 幻兽帕鲁是一款多人在线角色扮演游戏,玩家可以捕捉和训练各种各样的幻兽,并与其他玩家进行战斗和交易。如果您想拥有自己的幻兽帕鲁服务器,可以按照以下步骤在 Ubuntu 上进行搭建。 准备工作 在开始之前,您需要准备以下几…...
Java中常用类String的不可变性详解
目录 一、String类的概述 二、String不可变性的原理 三、String不可变性的优点 四、String不可变性的缺点及解决方案 五、总结 一、String类的概述 在Java中,String类是一个代表字符串的类。它是Java核心API的一部分,用于处理文本数据。String对象…...
uniapp 自定义App UrlSchemes
需求:外部浏览器H5页面,跳转到uniapp开发的原生app内部。 1、uniapp内部的配置: (1)打开manifest->App常用其他设置,如下,按照提示输入您要设置的urlSchemes: (2&am…...
MSP430环境搭建
1.下载ccs编译器 注意:安装路径和工作路径不能出现中文! 没有说明的步骤就点next即可! 1.1下载适合自己电脑的压缩包。 下载好压缩包后解压,点击有图标进行安装。 1.2创建一个文件夹用于安装编译器位置 选择安装地址࿰…...
【Qt C++实现蓝牙互联】
在 Qt C++ 中实现蓝牙互联可以通过 Qt 的蓝牙模块来实现。下面是一个简单的示例,演示如何在 Qt C++ 中使用蓝牙模块进行蓝牙互联,实现搜索设备、连接设备等功能。 // main.cpp #include <QCoreApplication> #include <QBluetoothDeviceDiscoveryAgent> #include…...
AI绘画已如此厉害,为何我们仍需学习绘画?
在这个AI技术日新月异的时代,AI绘画能力的大幅提升已经不是什么新鲜事。它们以惊人的速度和惊人的精细度完成作品,让不少人感叹:“这是不是意味着,未来绘画将完全由AI接管,人类的创作将变得无足轻重?”在这…...
Android 实现背景图片不被拉伸的效果 9-patch图片 .9图
今天碰到个需求,要求不同手机分辨率背景照片不能被拉伸,除了调用系统方法计算当前屏幕大小这个方法外还有一个就是9-patch图片,可以实现除了icon剩下的部位被缩放。 方法:资源文件右击找到9-patch,转为XXX.9.png照片 …...
Java EE/Jakarta EE范畴一览
Java EE(Java Platform, Enterprise Edition)现在已经改名为Jakarta EE,是一套用于开发企业级应用的标准Java平台。它扩展了Java SE(Standard Edition),添加了支持大规模、多层次、可靠、安全、可伸缩和可管…...
洛谷 P3391:文艺平衡树 ← Splay树模板题
【题目来源】https://www.luogu.com.cn/problem/P3391【题目描述】 您需要写一种数据结构(可参考题目标题),来维护一个有序数列。 其中需要提供以下操作:翻转一个区间,例如原有序序列是 5 4 3 2 1,翻转区间…...
【高校科研前沿】北师大陈晋教授团队在遥感顶刊发表最新成果:ClearSCD模型:在高空间分辨率遥感影像中综合利用语义和变化关系进行语义变化检测
01文章简介 论文名称:The ClearSCD model: Comprehensively leveraging semantics and change relationships for semantic change detection in high spatial resolution remote sensing imagery(ClearSCD模型:在高空间分辨率遥感影像中综合…...
关于YOLO8学习(五)安卓部署ncnn模型--视频检测
教学视频地址 B站 前文 关于YOLO8学习(一)环境搭建,官方检测模型部署到手机 关于YOLO8学习(二)数据集收集,处理 关于YOLO8学习(三)训练自定义的数据集 关于YOLO8学习(四)模型转换为ncnn 简介 本文将会讲解: (1)使用前文生成的ncnn模型,部署到安卓端,并且实…...
从哪些方面可以看出光伏的未来发展好?
光伏发电是一种基于半导体材料的光伏效应将太阳光转化为直流电能的发电技术。近年来,随着全球对可再生能源和环境保护的关注度不断提升,光伏发电行业发展迅速,成为未来能源领域的重要发展方向。 首先,从能源角度来看,光…...
VBA_MF系列技术资料1-605
MF系列VBA技术资料1-605 为了让广大学员在VBA编程中有切实可行的思路及有效的提高自己的编程技巧,我参考大量的资料,并结合自己的经验总结了这份MF系列VBA技术综合资料,而且开放源码(MF04除外),其中MF01-0…...
算法题① —— 数组专栏
1. 滑动窗口 1.1 长度最小的子数组 力扣:https://leetcode.cn/problems/minimum-size-subarray-sum/description/ int minSubArrayLen(int s, vector<int>& nums) {int result INT32_MAX; int sum 0; // 子序列的数值之和int subLength 0; // 子序列…...
算法学习笔记(差分约束系统)
前置:spfa 从例题入手: 【模板】差分约束系统 | StarryCoding 题目描述 给定 n n n未知量和一个大小为 m m m的不等式(或等式)组,请你判断这个不等式(或等式)组是否有解。 1 1 1 i i i j …...
HCIP的学习(14)
过滤策略—filter-policy 思科中:分发列表 过滤策略是只能够针对于路由信息进行筛选(过滤)的工具,而无法针对于LSA进行过滤。 在R4的出方向上配置过滤策略,使得R1不能学习到23.0.0.0/24路由信息1、抓取流量 […...
行业新应用:电机驱动将成为机器人的动力核心
电机已经遍布当今社会人们生活的方方面面,不仅应用范围越来越广,更新换代的速度也日益加快。按照工作电源分类,可以将它划分为直流电机和交流电机两大类型。直流电机中,按照线圈类型分类,又可以分为有铁芯的电机、空心…...
大模型模型简化机器人训练;简单易用的 3D 工具Project Neo;特斯拉放出了擎天柱机器人最新训练视频
✨ 1: DrEureka 利用大语言模型自动化将机器人仿真环境训练结果转移到真实世界 DrEureka是一种利用大型语言模型(LLMs)自动化和加速从仿真(sim)到现实世界(real)转移的技术。在机器人技能学习领域&#x…...
Win11安装Docker Desktop运行Oracle 11g 【详细版】
oracle docker版本安装教程 步骤拉取镜像运行镜像进入数据库配置连接数据库,修改密码Navicat连接数据库 步骤 拉取镜像 docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g运行镜像 docker run -d -p 1521:1521 --name oracle11g registry.cn-ha…...
HUNYUAN-MT企业级Java集成指南:构建高并发翻译微服务
HUNYUAN-MT企业级Java集成指南:构建高并发翻译微服务 1. 引言 想象一下,你负责的电商平台刚刚接到一个来自海外的百万级订单,但商品详情、用户手册全是中文。市场团队急等着把上万页的产品资料翻译成十几种语言,时间窗口只有短短…...
实战演练,用快马生成GitHub团队协作项目,掌握Issue管理和CI/CD集成
最近在团队协作开发时,发现很多新成员对GitHub的完整工作流不太熟悉。于是我用InsCode(快马)平台快速搭建了一个GitHub实战项目,模拟真实开发场景。这个项目特别适合想系统学习团队协作的小伙伴,下面分享我的实践过程: 项目初始化…...
AI原生应用:解决幻觉难题的有效途径
AI原生应用:解决幻觉难题的有效途径 关键词:AI原生应用、大模型幻觉、检索增强生成(RAG)、验证模块、智能系统架构 摘要:大语言模型(LLM)的“幻觉”(Hallucination)问题——生成与事实不符的内容,正成为AI应用落地的最大障碍。本文将从“AI原生应用”的视角出发,用通…...
League-Toolkit 英雄联盟工具集完整教程:从新手到高手的效率革命
League-Toolkit 英雄联盟工具集完整教程:从新手到高手的效率革命 【免费下载链接】League-Toolkit 兴趣使然的、简单易用的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 还在…...
从零部署JetLinks社区版:一站式物联网平台本地化搭建实战
1. JetLinks社区版:物联网开发的瑞士军刀 第一次接触JetLinks社区版是在三年前的一个智能家居项目上。当时客户要求两周内搭建一个能管理5000设备的物联网平台,还要支持自定义协议开发。在对比了多个开源方案后,JetLinks的模块化设计让我眼前…...
解锁Navicat密码:突破加密限制的开源解密工具
解锁Navicat密码:突破加密限制的开源解密工具 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt 当数据库连接密码被Navicat加密保存却无法记起&…...
老王-十条江湖铁律:比读百本厚黑书更管用
十条江湖铁律 ——比读百本厚黑书更管用“人若不想被算计, 就必须记住这10条—— 不是教你变坏, 而是—— 让你在复杂世界里,活得清醒且安全。”🏙️ 1. 小地方发达,速换圈子“庙小妖风大,池浅王八多。”小…...
超实用!学生党第一把吉他怎么选?9款“低弦距神器”深度测评与避坑指南!
大家好,我是深耕音乐教育与乐器选购多年的好物推荐官,常年和学生党打交道,最常被问到的问题就是:“预算有限,怎么选到好弹又耐用的吉他?” 其实对学生而言,第一把吉他无需追求高端奢华ÿ…...
三行六列16车位立体车库mcgs6.2仿真程序
三行六列16车位立体车库mcgs6.2仿真程序立体车库仿真程序最让人上头的就是运动逻辑设计。今天拆解一个三行六列布局的MCGS6.2项目,看看如何用脚本驱动16个车位的升降动画。注意这里的车位排布有点特殊——虽然看起来是3*6的矩阵,但实际有两处隐藏车位被改…...
Qt新手必看:MinGW和MSVC构建套件到底怎么选?保姆级对比指南
Qt构建套件选择指南:MinGW与MSVC深度对比与实战决策 刚接触Qt开发的初学者,往往在配置开发环境的第一步就陷入选择困难——面对MinGW和MSVC这两个构建套件选项,究竟该如何抉择?这个看似简单的选择背后,实则关系到后续开…...
