阿里云视频点播-记录

1.开通视频点播

  • 开通服务
    在这里插入图片描述
  • 点击立即开通
    在这里插入图片描述
  • 找到存储管理
    在这里插入图片描述
  • 启用存储地址
    在这里插入图片描述
  • 视频加密要设置转码并将其设置为默认
    在这里插入图片描述
  • 修改模板-点击编辑
    在这里插入图片描述
  • 上传视频测试
    在这里插入图片描述
    在这里插入图片描述
    此时已经有了默认存储地址和默认转码
  • 配置域名加速【域名已备案】
    在这里插入图片描述
    在这里插入图片描述
    输入域名点击提交即可
  • 配置DNS
    在这里插入图片描述
    点击眼睛并复制CNAME,前往DNS,添加记录
    在这里插入图片描述
    稍等一会域名管理就会显示已配置
  • 此时上传视频成功后视频是无法预览的,需要配置HTTPS
    前往SSL证书服务
    在这里插入图片描述
    选择免费证书即可
    在这里插入图片描述
    选择20,点击立即购买即可,我这边是已经买过了
    点击创建证书
    在这里插入图片描述
    填写刚刚的加速域名、联系人后点击下一步(这一步就不放图了)等待1-15分钟就会审核通过
  • 再次前往视频点播
    在这里插入图片描述
    点击配置

在这里插入图片描述
选择云盾就会有刚刚审核通过的证书,选择后点击确定即可,稍等一会即可
之后再次预览视频发现可以预览了

Java配置

  • 创建RAM用户
    在这里插入图片描述
    在这里插入图片描述
    填完信息选择api调用即可
  • 分配权限
    在这里插入图片描述
    在这里插入图片描述
  • 创建RAM角色
    在这里插入图片描述
    创建好后给它添加权限 AliyunVODFullAccess (和RAM用户一样的操作)

代码

  • Maven依赖
        <dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>4.4.6</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-vod</artifactId><version>2.15.8</version></dependency><!--还差个OSS的依赖,找不到了~~~-->
  • 后台获取sts token
// 只有RAM用户(子账号)才能调用 AssumeRole 接口// 阿里云主账号的AccessKeys不能用于发起AssumeRole请求// 请首先在RAM控制台创建一个RAM用户,并为这个用户创建AccessKeysString accessKeyId = "accessKeyId ";String accessKeySecret = "accessKeySecret ";// AssumeRole API 请求参数: RoleArn, RoleSessionName, Policy, and DurationSeconds// RoleArn 需要在 RAM 控制台上获取String roleArn = "roleArn ";// RoleSessionName 是临时Token的会话名称,自己指定用于标识你的用户,主要用于审计,或者用于区分Token颁发给谁// 但是注意RoleSessionName的长度和规则,不要有空格,只能有'-' '_' 字母和数字等字符// 具体规则请参考API文档中的格式要求// 自定义即可String roleSessionName = "session-name";// 定制你的policyString policy = "{\n" +"  \"Version\": \"1\",\n" +"  \"Statement\": [\n" +"    {\n" +"      \"Action\": \"vod:*\",\n" +"      \"Resource\": \"*\",\n" +"      \"Effect\": \"Allow\"\n" +"    }\n" +"  ]\n" +"}";try {AssumeRoleResponse response = assumeRole(accessKeyId, accessKeySecret, roleArn, roleSessionName, policy);// 过期时间response.getCredentials().getExpiration());// access key idresponse.getCredentials().getAccessKeyId();// access key secretresponse.getCredentials().getAccessKeySecret();// sts tokenresponse.getCredentials().getSecurityToken();} catch (ClientException | ParseException e) {e.printStackTrace();}
static AssumeRoleResponse assumeRole(String accessKeyId, String accessKeySecret, String roleArn, String roleSessionName, String policy) throws ClientException {//构造default profile(参数留空,无需添加Region ID)/*说明:当设置SysEndpoint为sts.aliyuncs.com时,regionId可填可不填;反之,regionId必填,根据使用的服务区域填写,例如:cn-shanghai详情参考STS各地域的Endpoint,请参见接入地址。*/IClientProfile profile = DefaultProfile.getProfile("cn-shenzhen", accessKeyId, accessKeySecret);//用profile构造clientDefaultAcsClient client = new DefaultAcsClient(profile);// 创建一个 AssumeRoleRequest 并设置请求参数final AssumeRoleRequest request = new AssumeRoleRequest();request.setSysEndpoint("sts.aliyuncs.com");request.setSysMethod(MethodType.POST);request.setRoleArn(roleArn);request.setRoleSessionName(roleSessionName);request.setPolicy(policy);// 发起请求,并得到responsereturn client.getAcsResponse(request);}
  • 获取上传凭证 - 用于上传视频
// AliStsResVo 自己封装的对象
public ReturnResult<AliUploadAuthResVo> uploadAuth(@RequestBody AliStsResVo vo) {// 点播服务所在的Region,接入服务中心为上海,则填cn-shanghaiString regionId = "cn-shenzhen";IClientProfile profile = DefaultProfile.getProfile(regionId, vo.getKeyId(), vo.getKeySecret(), vo.getToken());DefaultAcsClient client = new DefaultAcsClient(profile);CommonRequest request = new CommonRequest();request.setSysMethod(MethodType.POST);request.setSysDomain("vod.cn-shenzhen.aliyuncs.com");request.setSysVersion("2017-03-21");request.setSysAction("CreateUploadVideo");request.putQueryParameter("Title", vo.getFileName());request.putQueryParameter("FileName", vo.getFilePath());try {CommonResponse response = client.getCommonResponse(request);AliUploadAuthResVo uploadAuthResVo = JSON.parseObject(response.getData(), AliUploadAuthResVo.class);return ReturnResult.success(uploadAuthResVo);} catch (ClientException e) {e.printStackTrace();return ReturnResult.error();}}
  • 上传凭证有效期为3000秒, 刷新凭证
public ReturnResult<AliUploadAuthResVo> refreshUploadAuth(@RequestBody AliStsResVo vo) {DefaultProfile profile = DefaultProfile.getProfile("cn-shenzhen", vo.getKeyId(), vo.getKeySecret(), vo.getToken());IAcsClient client = new DefaultAcsClient(profile);CommonRequest request = new CommonRequest();request.setSysMethod(MethodType.POST);request.setSysDomain("vod.cn-shenzhen.aliyuncs.com");request.setSysVersion("2017-03-21");request.setSysAction("RefreshUploadVideo");request.putQueryParameter("VideoId", vo.getVideoId());try {CommonResponse response = client.getCommonResponse(request);AliUploadAuthResVo uploadAuthResVo = JSON.parseObject(response.getData(), AliUploadAuthResVo.class);return ReturnResult.success(uploadAuthResVo);} catch (Exception e) {e.printStackTrace();return ReturnResult.error();}}

2.有关视频加密

目录文档

1.准备工作

  • 开通KMS服务
    在这里插入图片描述
    在目录文档里即可找到
  • 提交工单(只能提交工单让服务人员帮你创建,无法自己创建!)

2.创建转码模板

将不转码设为默认的原因是自动触发转码不支持HLS标准加密,所以需要先上传不转码,然后根据回调再去调用转码接口,实现手动转码

  • 先将不转码模板设为默认模板
  • 创建转码模板
    在这里插入图片描述

3.设置上传完成回调 - 用于手动转码

在这里插入图片描述

4.创建回调接口

可以用frp搭一个,然后就是正常的restful接口
回调是POST请求,然后请求体我是用 @RequestBody String body接收的,不知道为什么,用对象接收就是不行

  • 请求转码需要用到KMS加密,因此需要准备文档中准备工作的第三步搭建密钥管理服务生成AES_128密钥
    // 示例代码
    // getClient()是我封装的获取client对象的方法
    IAcsClient client = getClient();
    CommonRequest request = new CommonRequest();
    request.setSysMethod(MethodType.POST);
    request.setSysVersion("2016-01-20");
    // 一定要和自己的服务地区相匹配
    request.setSysDomain("kms.cn-shenzhen.aliyuncs.com");
    request.setSysAction("GenerateDataKey");
    // kms服务仅支持HTTPS
    request.setSysProtocol(ProtocolType.HTTPS);
    // 提交工单后,工作人员会帮你生成,前往KMS控制台就能看到
    request.putQueryParameter("KeyId", "KMS控制台中的id");
    request.putQueryParameter("KeySpec", "AES_128");
    CommonResponse response = client.getCommonResponse(request);
    // 封装了一个对象来存储aes_128
    aes128 = JSON.parseObject(response.getData(), AliyunGenAes128Vo.class);
    log.info("生成AES_128 {}", aes128);
    
    • 请求转码
    /*** 提交转码请求*/
    public static void submitTranscodeJobs(String videoId) throws ClientException {IAcsClient client = getClient();CommonRequest request = new CommonRequest();request.setSysMethod(MethodType.POST);request.setSysDomain("vod.cn-shenzhen.aliyuncs.com");request.setSysVersion("2017-03-21");request.setSysAction("SubmitTranscodeJobs");// 转码模板request.putQueryParameter("TemplateGroupId", "转码模板id");request.putQueryParameter("VideoId", videoId);request.putQueryParameter("EncryptConfig", genEncryptConfigStr());CommonResponse response = client.getCommonResponse(request);log.info("发送转码请求成功 {}", response.getData());
    }/*** 获取加密配置字符串*/
    private static String genEncryptConfigStr() throws ClientException {// 上面生成的aes128对象AliyunGenAes128Vo aes128 = genAes128();AliyunEncryptConfig encryptConfig = new AliyunEncryptConfig();encryptConfig.setCipherText(aes128.getCiphertextBlob());encryptConfig.setKeyServiceType("KMS");// 自己的服务,等会创建接口encryptConfig.setDecryptKeyUri("http://test.abc.com/play?Ciphertext=" + aes128.getCiphertextBlob());String jsonString = JSON.toJSONString(encryptConfig);log.info("加密信息 {}", jsonString);return jsonString;
    }
    
    这样文件上传完成后就会转码生成加密文件了

    5.开通加密播放

    在这里插入图片描述

6.获取视频信息或凭证

  • 视频信息
/*** 获取视频信息 - 播放地址等* @param videoId 阿里云视频id*/public static AliyunPlayInfo getPlayInfo(String videoId) throws Exception {IAcsClient client = getClient();CommonRequest request = new CommonRequest();request.setSysMethod(MethodType.POST);request.setSysDomain("vod.cn-shenzhen.aliyuncs.com");request.setSysVersion("2017-03-21");request.setSysAction("GetPlayInfo");request.putQueryParameter("VideoId", videoId);CommonResponse response = client.getCommonResponse(request);AliyunPlayInfo playInfo = JSON.parseObject(response.getData(), AliyunPlayInfo.class);JSONObject jsonObject = JSONObject.parseObject(playInfo.getInfoStr());String listJson = jsonObject.getString("PlayInfo");playInfo.setPlayInfoList(JSON.parseArray(listJson, AliyunPlayInfo.PlayInfo.class));return playInfo;}
  • 获取视频凭证
/**** @param videoId 阿里云视频id* @param timeout 凭证有效期 100-3000 秒*/public static AliyunPlayAuth getPlayAuth(String videoId, String timeout) throws Exception {IAcsClient client = getClient();CommonRequest request = new CommonRequest();request.setSysMethod(MethodType.POST);request.setSysDomain("vod.cn-shenzhen.aliyuncs.com");request.setSysVersion("2017-03-21");request.setSysAction("GetVideoPlayAuth");request.putQueryParameter("VideoId", videoId);request.putQueryParameter("AuthInfoTimeout", timeout);CommonResponse response = client.getCommonResponse(request);return JSON.parseObject(response.getData(), AliyunPlayAuth.class);}
  • 用到的两个对象
@Data
@ApiModel("视频详细信息")
public class AliyunPlayInfo {@JSONField(name = "VideoBase")private VideoBase videoBase;@JSONField(name = "PlayInfoList")private String infoStr;private List<PlayInfo> playInfoList;@Datapublic static class VideoBase {@ApiModelProperty("阿里云视频id")@JSONField(name = "VideoId")private String videoId;@ApiModelProperty("封面地址")@JSONField(name = "CoverURL")private String coverURL;@ApiModelProperty("阿里云视频名")@JSONField(name = "Title")private String title;@ApiModelProperty("视频时长 秒")@JSONField(name = "Duration")private String duration;}@Datapublic static class PlayInfo {@ApiModelProperty("视频字节")@JSONField(name = "Size")private Long size;@ApiModelProperty("播放地址")@JSONField(name = "PlayURL")private String playURL;@ApiModelProperty("帧率")@JSONField(name = "Fps")private String fps;@ApiModelProperty("高")@JSONField(name = "Height")private String height;@ApiModelProperty("宽")@JSONField(name = "Width")private String width;@ApiModelProperty("FD:流畅。\n" +"LD:标清。\n" +"SD:高清。\n" +"HD:超清\n" +"OD:原画。\n" +"2K:2K。\n" +"4K:4K。\n" +"SQ:普通音质。\n" +"HQ:高音质。\n" +"AUTO:自适应码率。")@JSONField(name = "Definition")private String definition;}
}@Data
@ApiModel("视频播放凭证")
public class AliyunPlayAuth {@JSONField(name = "PlayAuth")@ApiModelProperty("凭证")private String playAuth;@JSONField(name = "VideoMeta")@ApiModelProperty("视频信息")private AliyunPlayInfo.VideoBase videoMeta;
}

此时获取的视频是加密的
可以测试一下
前往阿里在线诊断地址
选择视频播放
将上面获取的视频的地址放到Source中,点击播放。F12查看网络请求, 发现它一直往第四步请求转码中genEncryptConfigStr()方法中设置的setDecryptKeyUri发送请求,所以需要搭建一个解密的接口

7.解密

@GetMapping("play")public void play(@RequestParam String Ciphertext, HttpServletResponse response) throws IOException {//从KMS中解密出来,并Base64 decodebyte[] key = decrypt(Ciphertext);//设置headerresponse.setHeader("Access-Control-Allow-Origin", "*");response.setStatus(200);response.setContentLength(key.length);//返回base64decode之后的密钥response.getOutputStream().write(key);}private byte[] decrypt(String ciphertext) {DecryptRequest request = new DecryptRequest();request.setCiphertextBlob(ciphertext);request.setSysProtocol(ProtocolType.HTTPS);try {DecryptResponse response = AliyunVideoUtils.getClient().getAcsResponse(request);String plaintext = response.getPlaintext();//注意:需要base64 decodereturn Base64.decodeBase64(plaintext);} catch (ClientException e) {e.printStackTrace();return null;}}

这样再次点击播放就能成功播放了
不过这里面我并没有进行安全认证,所以后续需要安全认证需要自己手动添加

3.后记:URL鉴权

在这里插入图片描述
开启URL鉴权后,在生成视频地址后面就会增加一个auth_key
但是此时在点击视频播放就会出现跨域问题,因此需要在
在这里插入图片描述
取值是根据自身情况进行设置

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

使用阿里云视频点播上传视频

目录 前言一、目的二、实现步骤1.准备操作2.主要使用模块2.1. 上传音频2.2. 添加转码设置 3.搭建视频点播环境3.1.配置Maven仓库3.2.添加jar依赖3.3.上传视频3.4.初始化点播服务3.5.根据视频ID获取视频地址3.6.根据视频ID删除阿里云中视频3.7.根据视频ID集合删除 三、问题1.阿里…

什么是视频点播(VOD)?

点击上方“LiveVideoStack”关注我们 翻译 | Alex 技术审校 | 赵军 本文来自OTTVerse&#xff0c;作者为Krishna Rao Vijayanagar。 点播 Easy Tech #012# VOD代表Video on Demand&#xff08;视频点播&#xff09;&#xff0c;这种视频流化和交付技术使人们可以随时随地在任何…

php视频点播系统,PHPvod 视频点播系统 v3.1 for php5.4.x

PHPvod是一款免费开源&#xff0c;基于PHPMysql开发的视频点播系统&#xff0c;系统拥有众多的优秀功能和特性&#xff0c;在社区成员的积极参与下&#xff0c;在易用性、扩展性和性能方面不断优化和改进&#xff0c;使得PHPvod可以在极为繁忙的服务器环境下快速稳定运行&#…

开源的在线视频点播系统,值得分享!

平时做一些商业的项目。大家都知道&#xff0c;github是程序员的天堂&#xff0c;大家要好好利用。 今天给大家推荐的这个开源项目来自于读者的投稿&#xff0c;我感觉非常不错&#xff0c;就在这里推荐给大家&#xff0c;如果你也有好的开源项目&#xff0c;我也可以帮你推荐…

uniapp - 腾讯云点播小程序插件

欢迎关注微信公众号&#xff1a;FSA全栈行动 &#x1f44b; 一、简介 微信小程序播放教育类视频要求具备有相关资质&#xff0c;但这些资质一般公司很难短时间申请下来&#xff08;甚至有的公司压根就申请不了&#xff09;&#xff0c;而【短视频播放器小程序插件】含有《信息…

免费视频直播、点播H5播放器SkeyeWebPlayer适配移动端

免费视频直播、点播H5播放器SkeyeWebPlayer适配排除&#xff0c;移动端&#xff0c;常见移动端Web页面问题及解决方案 SkeyeVSS其独创的ws-rtsp流媒体直播技术&#xff0c;兼容传统安防流媒体的同时&#xff0c;不需要安装浏览器插件&#xff0c;解决互联网接入安防监控延迟高…

JAVA在线教育视频点播学习系统毕业设计 开题报告

本文给出的java毕业设计开题报告&#xff0c;仅供参考&#xff01;&#xff08;具体模板和要求按照自己学校给的要求修改&#xff09; 选题目的和意义 目的&#xff1a;本课题主要目标是设计并能够实现一个基于java的视频点播系统&#xff0c;系统整体使用了基于浏览的javaMy…

如何搭建视频点播服务

要搭建一套高效、稳定、可靠的视频点播服务&#xff0c;通常考虑视频资源的数量、视频资源的格式、用户量和并发量等方面因素&#xff0c;具体包括&#xff1a; 1)视频资源的数量和格式&#xff0c;以及增量情况&#xff1b; 2)播放终端的适配&#xff1b; 3)播放并发量、访问鉴…

直播和点播的区别

先总述直播和点播的不同点&#xff1a; 一、时效性要求不同 二、内容存在形式不同 三、运作流程不同 四、常见场景 五、技术架构 很多时候&#xff0c;大家对直播和点播的区别还是很模糊&#xff0c;仅仅停留在一种感觉上&#xff0c;如果视频画面是实时的就是直播&#…

服务器点播直播系统,服务器点播直播系统

服务器点播直播系统 内容精选 换一换 当保护组的生产站点发生故障时&#xff0c;将保护组的生产站点切到当前的容灾站点&#xff0c;即另一端AZ&#xff0c;启用当前容灾站点的云硬盘以及云服务器等资源。故障切换完成之后&#xff0c;保护组的当前生产站点变成故障切换发生之前…

电影服务器点播系统,网上电影注册点播系统

内容提要&#xff1a;【编号&#xff1a;001】电影网站&#xff0c;灵活运用了JSP技术和sqlserver数据库开发&#xff0c;实现了在线电影的播放和注册用户免费体验的功能。 功能模块图如下&#xff1a; 权限模块分为&#xff1a; 管理员&#xff1a; (1) 影片管理&#xff1a;管…

使用HTTP协议在k780网站上获取天气-----天气预报

文章目录 项目介绍一、项目任务二、项目流程规划以及代码实现1.总流程2.引入库3.总体流程相关函数 三、功能函数的实现1. TCP函数2. 输入城市信息3. 查询今天天气4. 查询未来一周天气5. 查询历史天气6. 退出 总结 项目介绍 本期主要使用TCP网络编程实现天气预报的功能&#xff…

免费视频直播点播服务器系统,搭建一套完整的网络视频流媒体直播/点播服务系统需要具备哪些条件?...

原标题:搭建一套完整的网络视频流媒体直播/点播服务系统需要具备哪些条件? 随着Internet的飞速发展,网上现场直播已经从实验阶段走向了实用阶段。各式各样的社会活动都可以借助网上现场直播方式传遍全世界,如新闻发布会、体育比赛、商贸展览、企业宣传、远程会议、远程看护…

解决Vmware上的kali找不到virtualbox上的靶机的问题

解决kali找不到靶场ip问题的完整方法 1.配置靶机2.配置kali的虚拟网络3.配置kali中的eth0网络 1.配置靶机 靶机部署在Virtualbox上对其进行网络配置&#xff0c;选择连接方式为仅主机&#xff08;Host-Only&#xff09;网络。 2.配置kali的虚拟网络 在编辑中选择虚拟网络配…

IDEA 安装配置步骤详解

引言 IntelliJ IDEA 是一款功能强大的集成开发环境&#xff0c;它具有许多优势&#xff0c;适用于各种开发过程。本文将介绍 IDEA 的主要优势&#xff0c;并提供详细的安装配置步骤。 介绍 IntelliJ IDEA&#xff08;以下简称 IDEA&#xff09;之所以被广泛使用&#xff0c;…

西门子S7200方案 西门子S7200方案CPu型号LPC2136

西门子S7200方案 西门子S7200方案CPu型号LPC2136 id584474406888&

S7200源码及PCB文件,S7 224XP 226图纸

S7200源码及PCB文件,S7 224XP 226图纸 id651541838037&

西门子S7200下载线驱动

西门子S7200下载线驱动是官方提供的一款USB驱动&#xff0c;本站收集提供高速下载&#xff0c;用于解决USB接口不能正常识别&#xff0c;无法正常使用的问题&#xff0c;本动适用于&#xff1a;Windows XP / Windows 7 / Windows 8 / Windows 10 32/64位操作系统。有需要的朋友…

西门子 S7200 以太网模块连接力控组态方法

ETH-YC模块转以太网&#xff0c;型号有MPI-ETH-YC01和PPI-ETH-YC01&#xff0c;适用于西门子S7-200/S7-300/S7-400、SMART S7-200、西门子数控840D、840DSL、合信、亿维PLC的PPI/MPI/PROFIBUS转以太网。用于西门子S7-200/S7-300/S7-400程序上下载、上位监控、设备联网和数据采集…

西门子 S7200 以太网模块连接组态王方法

ETH-YC模块&#xff0c;型号有MPI-ETH-YC01和PPI-ETH-YC01&#xff0c;适用于西门子S7-200/S7-300/S7-400、SMART S7-200、西门子数控840D、840DSL、合信、亿维PLC的PPI/MPI/PROFIBUS转以太网。用于西门子S7-200/S7-300/S7-400程序上下载、上位监控、设备联网和数据采集。支持与…