简单记录一下项目中使用cos进行图像、视频处理时遇到的问题和思考总结。

场景一

需要根据用户上传的视频自动获取视频封面图片用做视频展示的封面

场景二

需要根据用户上传的图片进行压缩处理以节省图片下载时长,减少页面响应时长

场景三

后台获取用户上传视频的时长(前端获取的时候无法保证在上传到cos之前及时获取视频时长,所以需要后台通过接口来获取)

场景四

前端视频偶现无法下载的情况,

解决过程:

一、前置条件:

在腾讯云控制台开启媒体处理功能(收费),如果要使用cos提供的媒体处理功能,如图片压缩,视频获取指定帧,获取媒体文件元信息等必须要开通该功能,开通媒体服务如下:

配置媒体文件访问时的跨域问题:

二、解决过程

首先,通过后端Http请求的方式获取视频媒体文件的时长,从而限制用户上传的视频不能超过一定时长,代码如下:

public Boolean checkVideoDuration(String videoUrl) {try {String reqUrl = videoUrl + "?ci-process=videoinfo";log.info("提交检测视频文件url: {}", reqUrl);String respStr = restTemplate.getForObject(reqUrl, String.class);//创建解析XML对象XStream xStream = new XStream() {@Overrideprotected MapperWrapper wrapMapper(MapperWrapper next) {return new MapperWrapper(next) {@Overridepublic boolean shouldSerializeMember(Class definedIn, String fieldName) {if (definedIn == Object.class) {return false;}return super.shouldSerializeMember(definedIn, fieldName);}};}};xStream.processAnnotations(Response.class);@SuppressWarnings("unchecked")Response resp = (Response) xStream.fromXML(respStr);Double duration = resp.getMediaInfo().getStream().getVideo().getDuration();return 120 - duration.intValue() > 0;} catch (Exception e) {log.error("解析视频信息异常, {}", e);return false;}}

腾讯云媒体处理官网链接:https://cloud.tencent.com/document/product/436/55672

此处用resttemplate模拟发送http请求到cos服务端,由于官方文档说返回的响应结果是application/xml格式,导致这里有一个小插曲,由于当时时间紧,任务急所以就直接找了jackson-xml进行String到JavaBean的格式转换,导致所有的http请求的响应到前端都成了xml格式了,虽然临时通过前端添加Content-Type: application/json的方式解决了,但是还是导致一些没有加的接口返回xml这种不友好的格式,最终采用了xstream的方式进行解析xml字符串到JavaBean的转换;

然后,就是媒体文件的压缩和获取第一帧的问题,下面是对应的官网文档链接:

https://cloud.tencent.com/document/product/436/60453

说说我当时的思考过程,以及实践之后的总结,根据官网的说明,压缩图片可以通过如下的方式进行实现:

http://example-1258125638.cos.ap-shanghai.myqcloud.com/sample.png?imageMogr2/format/webp

就是将已经上传的图片生成的链接后面添加imageMogr2/format/webp这种后缀就可以实现,由于当时想的是,由于在官网接口说明中需要Auth String才能通过上面的url方式直接实现压缩,当时我就跟着官网说明查看获取Auth String的方式发现有点繁琐,后面想着对比华为云OBS的文件压缩方式,就直接拿着上面的url链接在浏览器试了一下,发现可以实现压缩,并展示出来压缩的图片,然后保存图片,发现确实图片大小确实小了很多,大功告成;

接下来看看获取视频指定帧,官方文档链接如下:

https://cloud.tencent.com/document/product/436/55671

如官方文档所示,直接在图片url后面添加参数的方式来实现获取截屏帧,如下:

https://<BucketName-APPID>.cos.<Region>.myqcloud.com/for-test.mp4?ci-process=snapshot&time=1&format=jpg&<Auth String>

和上面压缩如出一辙,也是需要Auth String,当时也是没唬住了,想办法获取这个Auth String,后来结合之前使用OBS的场景,大胆尝试,发现已经上传的视频,直接在后面添加

"ci-process=snapshot&time=1&format=jpg"参数,就可以获取视频第一帧的图片了;

最后,出现在当时已经在云端存储的视频文件,在pc端下载出现失败的情况,除了修改上面的跨域配置之外,如果还开启了cdn全球加速的话,也要吧cdn全球加速、cdn跨域headers配置都设置一下,否则还是会出现下载失败的情况

总结:

后来仔细一想,可能我们通过我们的key,scret在上传文件到cos的时候,如果上传成功了,返回的文件url其实就包含我们的bucket,endpoint等信息,这个时候,直接使用这个文件的url去访问媒体处理相关服务的时候,其实这个Auth String的鉴权信息其实已经自动就识别了,可能通过我们的bucket,endpoint等信息就已经不需要再传递Auth String等额外鉴权信息了;

而且不论阿里的OSS,华为云的OBS,腾讯云的COS,他们的文件url结构都是类似的组装结构,尤其当我们将我们的bucket的读写权限设置成如下公共读的时候,就已经可以直接拿文件的url进行访问相关服务,而不需要重新获取Auth String相关信息了

腾讯云多媒体文件处理总结相关推荐

  1. 腾讯云直播功能(云直播为例)

    背景 项目中若涉及到即时通信IM或者直播这种业务场景的,一般都会选择第三方服务,而腾讯在这方面做的还是很好的,QQ和微信的统治力显而易见. 腾讯的服务接口都是以API文档的形式提供给开发者的,使用的时 ...

  2. 腾讯云im介绍和如何接入使用

    目录 1,腾讯云IM的基本介绍 2,腾讯云IM的购买流程 3,腾讯云IM-SDK的接入(以Android为例) 4,接入客户端SDK API(以Android为例) 1,腾讯云IM的基本介绍 现如今, ...

  3. uniapp结合腾讯云及时通信IM的聊天记录本地存储方案

    uniapp结合腾讯云及时通信IM的聊天记录本地存储方案 UniApp 是一个跨平台的应用开发框架,可以使用 Vue.js 开发多端应用(如H5.小程序.App等).在 UniApp 中,可以使用 u ...

  4. 设置腾讯云linux服务器中 MySQL 允许远程访问

    申请了一台linux腾讯云服务器,想要把数据库搭建在上面,本地的Windows直接可以访问 以下就是具体的操作流程,首先你需要安装好一个mysql,安装方法–>mysql安装(Linux) 接着 ...

  5. 腾讯云https认证

    1.准备好域名 2.登录腾讯云,在腾讯云找到ssL证书管理 2.申请一个证书 选择1年免费版的 3.填写域名资料: 1.通用名称就是你的域名 2.申请邮箱填写你的常用邮箱 3.证书备注名:填写一个易记 ...

  6. 学习笔记:腾讯云--域名解析

    一周多的等待终于域名备案完成,开始域名解析.发现好多坑,亏的有个好老师,不然跳进去了我得好几天出不来. 开始域名解析: 1解析域名:腾讯云在域名管理里要点两次解析,第二次才是真正的开始. 注:此处的添 ...

  7. c 使用腾讯云mysql_腾讯云使用笔记一: 环境搭建

    腾讯云服务器 https://console.cloud.tencent... 76xxxxxxx1@qq.com/yingyoudie 后来通过代理买85折,很划算,用户名43xxxx/Wxxxxx ...

  8. 腾讯云无法绑定公网IP问题解释与解决方案。

    腾讯云无法绑定公网IP问题解释与解决方案. http://blog.csdn.net/chenggong2dm/article/details/51475222 解释:公网IP并不直接配置在服务器上, ...

  9. php 腾讯云实时音视频,腾讯云视频 -实时音视频学习日志

    1.实时音视频功能h5只支持ios 2.不能主动拉人建群 3.pc端的demo研究整体流程可以按照腾讯音视频上面指导的步骤走,申请账号,创建应用,购买套餐.购买好套餐后然后记录sdkappid.acc ...

  10. 腾讯云 短信服务 【学习记录 】

    github 链接 https://github.com/qcloudsms/qcloudsms_java/tree/master maven 要使用 qcloudsms_java 功能,需要在 po ...

最新文章

  1. java set 空_Java面试总结(Map和Set)
  2. Canvas 渐变 图像组合效果 颜色翻转
  3. Java除法结果带小数、进一法的实现 Java问题通用解决代码
  4. iOS中 动态启动图GIF的简单设置 韩俊强的博客
  5. 现代制造工程笔记01:课程安排
  6. Unity2018.3中文更新日志速览版
  7. Item 39. 异常安全之函数(Exception Safe Functions)
  8. loj2291. 「THUSC 2016」补退选
  9. 广数系统加工中心编程_CNC加工中心编程加工的一些小技巧,学会必有用
  10. android获取键值对,Android应用开发android中的键值对实例讲解
  11. Canbus通信协议
  12. JAVA代码实现计算器功能
  13. Python中统一快速更换变量的名称
  14. 今天分享固态硬盘安装以及Win7系统安装流程
  15. python list 对时间排序小结。
  16. HTML无法显示下一页,为何我的浏览器不能直接打开下一页
  17. openwrt源码下载地址及下载失败问题
  18. Excel PivotTable 使用心得手顺分享(四)
  19. Failed to transform file 'xxx' to match attributes 的解决办法
  20. AriaNg | 一款基于aria2高速图形化界面下载器

热门文章

  1. VS编程,几个好用的Visual Studio插件推荐(二)
  2. 前端移动端开发(基础)
  3. 软件工程期末笔记整理
  4. 计算机连校园网没有弹出页面,校园网连接之后CMCC登录界面不能弹出怎么解决?...
  5. springboot配置log4j2
  6. JavaCV音视频开发宝典:录制vp8和vp9编码的webm格式视频,以mp4转webm为例
  7. 计算几何(一) by 邓俊辉老师
  8. Windows 编程之 WINUSERAPI 和 WINAPI 区别
  9. matlab获取图片上的字,Matlab读取图片代码
  10. 骑士CMS01 74cms v4.2.111 后台getshell漏洞复现