关于云服务:如何用腾讯云打造一款微视频APP

2次阅读

共计 5739 个字符,预计需要花费 15 分钟才能阅读完成。

版权申明:本文由腾讯云原创文章,转载请注明出处: 
文章原文链接:https://www.qcloud.com/community/article/196

起源:腾云阁 https://www.qcloud.com/community

产品的整个技术实现架构由 Android/iOS APP、业务服务器以及腾讯云服务组成。其中,APP 负责和用户进行交互,蕴含的功能模块有:

  1. 注册登录(反对微信、QQ 等第三方账号登录)
  2. 拍照 / 录像
  3. 上传到云(腾讯云对象存储 COS+ 内容散发网络 CDN)
  4. 视频播放(本地播放 / 云端点播)
  5. 语音辨认(腾讯云智能语音服务 Artificial Audio Intelligence)
  6. 图片解决(腾讯云万象优图的图片解决和智能鉴黄服务)

思考到咱们的业务类型和开发团队的技术根底,咱们选用的后盾技术架构是 Struts+Hibernate+Spring+MySql,前端为 Android 和 iOS。

为便于疾速开发和牢靠扩大,对于关键技术难点——图片、音频、视频等大量非结构化数据的上传、存储和点播,咱们采纳腾讯云提供的对象存储(COS:Cloud Object Service)和内容散发网络(CDN:Content Delivery Network)作为实现计划。这样,后盾的 MySql 数据库中就只须要存储图片、音频、视频等文件在腾讯云对象存储中的 Url,而不用在业务侧保护其数据长久化和容量扩大,同时,内容的散发和拜访,也可通过腾讯云 CDN 来减速,无效升高了服务器端的下载压力。

在私有云产品的价格方面,腾讯云提供了每月 50G 存储,10G 外网拜访流量、10G 的 CDN 回源流量、100 万次读申请和 10 万次写申请的收费额度,能够满足初创我的项目的应用需要。同时,腾讯云对象存储还提供了全面的开发者手册和各类编程语言的 SDK Demo,能够让开发者疾速上手,搭建原型利用。

腾讯云 COS 的注册、实名认证,以及开明 CDN 的过程都很简略快捷,能够点击链接立刻应用 COS 的 Web 控制台,依照教程“疾速上手”实现上述操作。
接下来,新建我的项目 PetUGC,而后在我的项目中新建 bucket 存储桶。

同时,抉择(默认)开明 CDN 减速。

在存储桶 gamevideo 中新建文件夹 whirlpk,用于寄存 APP 上传的“宠物互动视频”。
点击获取 API 密钥(肯定要留神爱护本人的密钥不被透露,并尽量定期的更换密钥)。

对于 APP 端的“文件上传”性能,腾讯云 COS 官网提供的 SDK 曾经将分片上传的性能做了封装,开发者只需依照 SDK 文档调用 FileUploadTask 函数,即可实现图片、音频、视频等大文件的上传,并且能在对应的回调接口中进行上传胜利 / 失败后的进一步操作,比方更新 APP 的 UI 来显示上传进度,或者提醒上传胜利 / 失败音讯等。上面为代码示例:

import com.tencent.upload.task.impl.FileUploadTask;import com.tencent.upload.task.IUploadTaskListener; /* 若已存在同名的文件:INSERTONLY==false 示意可能上传胜利,且会笼罩同名的文件;INSERTONLY==true 则不能胜利上传 */ FileUploadTask task = new FileUploadTask(BUCKETNAME, appidFILEPATH, ARGETDIR, ATTRS, INSERTONLY, new IUploadTaskListener(){@Override        public void onUploadFailed(int arg0, String arg1) {// TODO Auto-generated method stub            // 上传胜利}         @Override        public void onUploadProgress(long arg0, long arg1) {// TODO Auto-generated method stub            // 上传进度}         @Override        public void onUploadStateChange(TaskState arg0) {// TODO Auto-generated method stub            // 上传状态变动}         @Override        public void onUploadSucceed(FileInfo arg0) {// TODO Auto-generated method stub            // 上传失败}});filetask.setAuth(SIGN);fileUploadMgr.upload(task);

须要阐明的是,下面 filetask.setAuth(SIGN) 中的 SIGN 字段,即为业务端服务器返回的签名字符串,用于实现用户申请的鉴权。SIGN 的生成过程,在服务器端的 SDK 中也有提供封装好的办法。

腾讯云 COS 的签名 SIGN 分为两种:屡次无效签名和单次无效签名。当须要进行上传文件, 重命名文件, 创立目录, 获取文件 / 目录属性, 拉取目录列表这几个操作时,必须在申请中填写屡次无效签名。

对于屡次无效签名,能够在服务器端调用 getPeriodEffectiveSign 办法来取得。
String getPeriodEffectiveSign(String bucketName, String cosPath, Credentials cred, long expired)
其中的各个参数对应的含意是:

参数名

参数类型

默认值

参数形容

bucket

String

bucket 名称,即为上文中提到的 gamevideo

cos\_path

String

资源在 bucket 下的相对路径,即为上文中提到的 /whirlpk/test.jpg

cred

Credentials

用户身份信息, 包含 appid, secretId, secretkey. 将腾讯云 COS Web 控制台中获取到的 API 密钥信息填入即可

expired

long

签名过期工夫, UNIX 工夫戳,单位为秒。留神,这儿的 expired 是个工夫点,而非时间段。它等于以后工夫 + 有效期限

获取屡次无效签名的代码示例:

Credentials cred = new Credentials(appId, secretId, secretKey);long expired = System.currentTimeMillis() / 1000 + 600;String signStr = Sign.getPeriodEffectiveSign(bucketName, "/whirlpk/test.jpg", cred, expired);

对于单次无效签名,实用场景为删除和更新文件目录。在服务器端的结构过程和下面的屡次无效签名相似。

当(图片、音频、视频等)文件上传胜利后,腾讯云会给 APP 端返回文件在 COS 中的 Url,此时,业务端的数据库仅需存储这个 Url,当用户拜访该文件时,将这个 Url 返回给用户,而后由腾讯云 COS+CDN 来响应用户的申请,将理论的文件传输给用户。

这样,在 APP 端,就能够间接调用原生的视频播放控件(比方 Android 的 VideoView 或者自定义 MediaPlayer),链入腾讯云 COS 提供的 Url 来播放视频(当 Android 应用 VideoView 来播放视频时,视频源必须是规范的 mp4 或 3gp 的视频,否则无奈播放)。

须要阐明的是,腾讯云返回的资源 Url 会有两种,一种是 source\_url(不通过 CDN 减速,间接拜访 COS 存储源),另一种是 access\_url(通过 CDN 减速来拜访 COS 存储源)。举荐应用 access\_url 来为拜访减速,不仅能够极大的升高拜访时延,同时还能够节俭 COS 的回源流量。

除了音视频的上传和(下载)播放以外,咱们的产品还须要为用户提供图片解决性能,包含缩放、裁剪。同时,为了保障平台内容的衰弱可继续,咱们须要引入图片鉴黄性能;为了爱护 UGC 内容的版权,咱们还须要防盗链和水印性能。
于是咱们采纳腾讯云的万象优图来实现上述的图片解决性能。整个应用过程能够分为:

  1. 在万象优图控制台配置参数;
  2. 在业务服务器和 APP 中集成 SDK;
  3. 依照业务需要自定义回调解决逻辑。

首先,在腾讯云 Web 控制台中点击进入“万象优图”。在之前曾经建好的我的项目 PetUGC 中新建一个图片空间 petimage。

而后,点击“治理”,进入对图片空间的配置界面。

如何在 Web 控制台对鉴黄性能进行设置?

在“图片辨认”性能中,能够开启鉴黄性能的应用状态。点击保留后,但凡要上传入以后图片空间(petimage)的新图片,都须要先通过鉴黄解决。万象优图会为每一张图片打分(0~100 分),其中,超过 91 分的图片,会被零碎确定为是黄图,低于 83 分的,会被零碎确定为是失常图片。分值处于 83~91 之间的,零碎会判断为“疑似黄图”,但无奈确定,须要业务端通过人工审核的形式来断定是否为黄图。
业务端能够进一步设置回调阈值和回调 URL,让腾讯云万象优图将“疑似黄图”的图片和相应的判断后果返回给业务端,以做进一步的解决。

如何在 APP 端将图片传送给万象优图?

万象优图为开发者提供了 Android、iOS 和服务器端的 SDK 和 Demo 示例,并封装好了相应的功能模块供灵便调用。如下是 SDK 的下载地址

以 Android 为例,点击下载“Android 体验 demo”,在 QcloudImageActivity 中能够看到要害的业务逻辑代码:
首先,由 APP 向业务端服务器发动申请,获取签名 sign(即拜访腾讯云万象优图资源的权限)。

在获取签名 sign 后,就可结构图片上传申请:

在图片上传申请的回调接口 onUploadSucceed 中,能够设定图片上传胜利后对 APP UI 界面的操作,在 onUploadProgress 中可设定图片上传的进度显示,在 onUploadFailed 中可设定图片上传失败后的解决。

如何在服务器端结构签名 sign?

以 Java SDK 为例,在咱们的业务服务器端,只需将万象优图 Web 控制台中提供的 APP\_ID、Secret ID、Secret Key 填写至下图中的对应地位:

而后调用对象 PicCloud 的 getSign 办法,即可失去屡次 / 单次无效签名。

将签名返回给 APP 端后,APP 端即可将图片连同签名一起送至腾讯云万象优图,进行鉴黄解决。

业务服务器该如何解决腾讯云万象优图的回调后果?

在服务器端,须要监听在控制台中配置的回调 URL 接口。当万象优图发现 APP 上传的图片分值在阈值(83~90,疑似黄图)内时,会默认回调该 URL,向其发送一个规范的 HTTP POST 告诉音讯。

HTTP 的 Response 信息如下表:

参数名称

类型

必选

形容

url

String

上传后的资源 url,包含域名

result

Int

供参考的辨认后果,0 失常,1 黄图,2 疑似图片

forbid\_status

Int

封禁状态,0 示意失常,1 示意图片已被封禁(只有存储在万象优图的图片才会被封禁)

confidence

Double

辨认为黄图的置信度,范畴 0 -100;是 normal, hot, porn 的综合评分

normal

Double

图片为失常图片的评分

hot

Double

图片为性感图片的评分

porn

Double

图片为色情图片的评分

业务端通过判断 Response 中的参数,来决定向 APP 端发送对应的解决(比方,回绝此次 UGC 上传),或者转向人工审查等。

如何应用万象优图来实现图片解决(裁剪 + 缩放 + 水印)?

万象优图提供了如下的图片解决性能:

其中,根本图像处理(imageView2)即为对 图片的长和宽按约束条件来等比压缩。在把原图上传到万象优图的对象存储空间后,(如果鉴黄通过)万象优图会返回该图片的 Url。当咱们再次申请该图片的 Url 时,能够在 Url 前面增加参数,来通知万象优图“请依照参数来等比缩放该图片,而后返回给我”。这样,APP 端就能拿到指定长宽的图片,不仅便于 UI 排版,还能实现缩略图显示。

举个例子来阐明:
点击万象优图→老手指引→web 端接入→样例,进入上面的试用界面:


上传一张图片 keji.jpg,长宽为 800×450,生成如上的下载链接。
拜访该链接能够看到原图。

而后,咱们在下载链接 Url 上增加根本图像处理(imageView2)的相应参数,含意为“调用根本图像处理 imageView2 接口,指明采纳模式 2 来等比缩放图片,并指定图片的宽的最大值为 400”:
http://test2p-10000002.image.myqcloud.com//u/can/use/slash/sample1470281794?imageView2/2/w/400
在浏览器中关上该 Url,即可看到万象优图将原图等比压缩后的处理结果:

根本图片解决中还提供了很多的等比缩放模式,以及指定图片格式、图片品质等等,大家能够按需设定参数。

但对于咱们的 APP,仅仅实现图片的“等比缩放性能”还不够,因为在大多数状况下,用户上传的图片长宽不一,等比缩放很容易造成“顾得了长但顾不了宽”,使得原有的图片通过缩放后,要么在显示时产生留白,要么就是图片的要害局部(比方两头局部)被缩放到了边缘,变得很难看。所以,在理论应用时,咱们会采纳上图中的模式 5,来指定在缩放时,先等比缩放,而后居中裁剪。举个例子:
http://test2p-10000002.image.myqcloud.com//u/can/use/slash/sample1470281794?imageView2/5/w/300

这样,即便通过了缩放和裁剪,也能够使得原图的两头局部失去保留。

对于万象优图提供的高级图像处理(imageMogr2)接口,能够依照九宫格来抉择更多的旋转、裁剪解决模式。

然而这种用 Url 传参数来指定图片解决形式的做法显得很笨呐有木有 Orz,每次申请图片资源都须要做一次解决……别急,万象优图提供了另外一种省心的图片解决形式——在 Web 控制台中,对某个存储空间下的所有图片,设定对立的图片款式。

新增加一个款式,点击编辑。



以及图片水印(左上角的蝙蝠侠标记)

总结:

通过以上操作,就将腾讯云提供的音视频上传下载、万象优图图片存储以及解决(缩放、裁剪、水印)等性能集成到了 APP 和业务端服务器中。

正文完
 0