阿里云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获取上传地址和凭证为例,完整的上传流程如下图所示:

        流程详解

  1. 上传应用服务器使用RAM用户AK方式(AccessKey ID和AccessKey Secret)或STS临时AK初始化点播客户端。
  2. 上传应用服务器使用点播服务端SDK调用上传地址和凭证相关接口获取上传地址、上传凭证及媒资信息。
  3. 点播服务在请求结果中返回Base64加密的上传地址(UploadAddress)、上传凭证(UploadAuth)、和媒体ID等信息。上传应用服务器可根据返回结果解析参数作为初始化OSS原生SDK的入参。
  4. 上传应用服务器使用解析后的上传地址(UploadAddress)和授权信息(UploadAuth),通过STS方式初始化OSS客户端。
  5. 上传应用服务器使用OSS SDK调用OSS上传相关接口将媒体文件上传至指定的存储地址。
  6. 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);}}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/8789.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从零开始的软件测试学习之旅(八)jmeter线程组参数化及函数学习

jmeter线程组参数化及函数学习 Jmeter基础基本使用流程组件与元件 线程组线程的执行方式Jmeter组件执行顺序 常见属性设置查看结果数的作用域举例 Jmeter参数化实现方式1.用户定义参数2.用户参数3.函数4.csv数据文件设置 每日复习 Jmeter基础 基本使用流程 启动项目案例 启动…

DUX 主题 版本:8.2 WordPress主题优化版

主题下载地址&#xff1a;DUX 主题优化版.zip 支持夜间模式、快讯、专题、百度收录、人机验证、多级分类筛选&#xff0c;适用于垂直站点、科技博客、个人站&#xff0c;扁平化设计、简洁白色、超多功能配置、会员中心、直达链接、自动缩略图

添砖Java之路其三——自增自减运算符,数据转换与原码反码补码。

目录 运算符&#xff1a; 转换&#xff1a; 隐式转换&#xff1a; 小范围数据可以直接可以给大范围数据&#xff1a; 这里做了一张图范围向下兼容表​编辑 运算时&#xff0c;数据范围小的和数据范围大的&#xff0c;需要讲运算范围小的提升为运算范围大的同类&#xff0c…

全球AI新闻速递

&#x1f4e2;&#x1f4e2;&#x1f4e2;&#x1f4e3;&#x1f4e3;&#x1f4e3; 哈喽&#xff01;大家好&#xff0c;我是「奇点」&#xff0c;江湖人称 singularity。刚工作几年&#xff0c;想和大家一同进步&#x1f91d;&#x1f91d; 一位上进心十足的【Java ToB端大厂…

C/C++开发,opencv-features2d模块,SIFT等特征检测器应用

目录 一、OpenCV-features2d 模块简介 1.1 features2d 模块信息 1.2 features2d 模块应用流程 二、features2d 模块编码案例 2.1 实现逻辑 2.2 features2d 模块应用程序代码 2.3 程序编译及运行 一、OpenCV-features2d 模块简介 1.1 features2d 模块信息 features2d 是…

炒美股怎么开户?

近年来&#xff0c;随着国内投资者对境外投资需求的不断增长&#xff0c;炒美股逐渐成为许多投资者的选择。然而&#xff0c;随着监管政策的不断完善&#xff0c;传统的互联网券商开户方式已经不再适用。那么&#xff0c;对于想要入场美股市场的投资者来说&#xff0c;该如何开…

Angular中的路由

Angular中的路由 文章目录 Angular中的路由前言一、创建路由二、创建多个组件路由三、创建子路由四、创建多个组件子路由 前言 在Angular中&#xff0c;路由是用于在不同的视图和组件之间导航的机制。Angular提供了一种强大的路由机制来管理单页应用&#xff08;SPA&#xff0…

vue2项目升级到vue3经历分享4

后端重构&#xff0c;如果接口做好抽象封装&#xff0c;只需要考虑jar之间的兼容性问题&#xff0c;jdk版本不变&#xff0c;基本不用做太大的调整&#xff0c;但是前端就不一样&#xff0c;除了vue框架本身&#xff0c;css的调整&#xff0c;改起来更是让人头疼。前面写了vue2…

Android 开机启动扫描SD卡apk流程源码分析

在开机的时候&#xff0c;装在SD卡的apk和装在系统盘的apk扫描过程不一样&#xff0c;系统盘apk在系统启动过程中扫描&#xff0c;而SD卡上的就不是&#xff0c;等系统启动好了才挂载、扫描&#xff0c;下面就说下SD扫描的流程&#xff1a; 在SystemServer启动MountService&am…

【Hadoop】MapReduce (七)

MapReduce 执行流程 MapTask执行流程 Read&#xff1a;读取阶段 MapTask会调用InputFormat中的getSplits方法来对文件进行切片切片之后&#xff0c;针对每一个Split&#xff0c;产生一个RecordReader流用于读取数据数据是以Key-Value形式来产生&#xff0c;交给map方法来处理…

02_SpringBoot程序快速启动

目录 打包命令启动启动成功测试结果 打包 点击package打包命令&#xff0c;会生成target目录&#xff0c;目录下会有生成的jar包 命令启动 打开cmd命令窗口&#xff0c;进入子项目的target目录下,输入命令后&#xff0c;回车… java -jar .\note-boot-core-1.0-SNAPSHOT.j…

C++新手村指南:入门基础

目录 C概念 C发展史 C关键字&#xff08;C98&#xff09; 命名空间 命名空间的定义 命名空间的使用 C中的输入&&输出 缺省参数 缺省参数的概念 缺省参数的分类 函数重载 函数重载概念 函数重载实现 引用 引用的概念 引用的特性 常引用 引用的使用场景…

【Python图像分类系列】建立CNN模型实现猫狗图像分类(案例+源码)

这是我的第275篇原创文章。 一、引言 基于CNN卷积神经网络在图像识别领域的应用&#xff1a;猫狗图像识别。主要内容包含&#xff1a; 数据创建和预处理 神经网络模型搭建 神经网络模型的训练和拟合 文中使用的深度学习框架是Keras。部分数据展示&#xff1a; 猫&#xf…

基于opencv的车辆统计

车辆统计&#xff09; 一、项目背景二、整体流程三、常用滤波器的特点四、背景减除五、形态学开运算闭运算 六、项目完整代码七、参考资料 一、项目背景 检测并识别视频中来往车辆的数量 最终效果图&#xff1a; 二、整体流程 加载视频图像预处理&#xff08;去噪、背景减除…

C++类和对象中篇

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;[C] &#x1f4a8;路漫漫其修远兮 吾将而求索 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 文章目录 &#x1f4d4;前言&#x1f4d4;1、类的六个…

视频汇聚边缘网关EasyCVR硬件设备无法访问域名,解析失败该如何处理?

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台部署轻快&#xff0c;可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等&#xff0c;以及支持厂家私有协议与SDK接入&#xff0c;包括海康Ehome、海大宇等设备的SDK等。视频汇聚融合管理平台EasyCVR既具备传统安防视…

小麦穗检测数据集VOC+YOLO格式6508张1类别

数据集格式&#xff1a;Pascal VOC格式YOLO格式(不包含分割路径的txt文件&#xff0c;仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数)&#xff1a;6508 标注数量(xml文件个数)&#xff1a;6508 标注数量(txt文件个数)&#xff1a;6508 标注…

实践指南:如何将SpringBoot项目无缝部署到Tomcat服务器

序言 SpringBoot 是一个用来简化 Spring 应用初始搭建以及开发过程的框架&#xff0c;我们可以通过内置的 Tomcat 容器来轻松地运行我们的应用。但在生产环境中&#xff0c;我们可能需要将应用部署到独立的 Tomcat 服务器上。本文给大家介绍 SpringBoot 项目部署到独立 Tomcat…

JS-拖拽元素放大缩小

效果左右布局&#xff0c;拖拽后&#xff0c;宽度放大缩小 其实自己写也可以&#xff0c;不过还是发现了两个好用的js库&#xff0c;既然不需要自己写&#xff0c;当然是能偷懒就偷懒 1、resizerjs 官网地址&#xff1a;https://github.com/eknowles/resizerjs <!doctype …

ssrf初步

一&#xff0c;简介 全称&#xff1a;Server-Side Request Forgery&#xff08;中文&#xff1a;服务器端请求伪造&#xff09; 攻击者从服务端发起请求&#xff0c;让服务器连接任意外部系统&#xff0c;从而泄露敏感数据。主要利用各种协议的请求伪造&#xff0c;例如php协…