当前位置:首页 » 存储配置 » 七牛云存储视频调用

七牛云存储视频调用

发布时间: 2023-03-17 15:55:10

1. 关于七牛云存储自定义URL的问题

近段时间将使用七牛云存储来存放用户上传的数据,客户端通过七牛的js-sdk与七牛交互,服务端C#实现了七牛相关的接口。在这过程中多多少少遇到点问题,在这里总结一下。原文: 使用七牛云存储的一些经验总结
599错误处理
如果在与七牛的交互中出现http状态码为599的错误,一句话,不要犹豫,直接联系七牛技术支持 。七牛的文档也在很多地方提到这个错误,都是指导大家去联系技术支持的。笔者是在分块上传后的 mkfile 调用时出现的,联系技术支持后,说是调整了一下,让我重试。后来就好了...
分块上传无法从回调中获得文件的原始名
简单上传采用的是multipart/form-data方式上传,七牛服务端能够从请求中获得文件的原始名,并支持使用魔法变量 $(fname) 回调业务服务器。不过当使用分片上传的时候情况有所不同。分片上传需要在最后调用 mkfile ,来将分片拼接起来。但是, mkfile 接口支持普通的请求,并没有附带文件名,所以七牛也就无法获得文件名,此时从 $(fname) 中是取不到文件名的。这个问题我也向七牛技术支持提交了问题,得到的结果是使用自定义变量 mkfile 支持将自定义变量放在url中,回调的时候自定义变量可以传递给业务服务器。
慎用图片预处理
七牛云支持很多对文件的预处理,其中最常用的应该就是图片预处理了,可以对图片的大小做变换等。七牛推荐使用GET的方式直接指定图片处理结果的url,像这样:
http://qiniuphotos.qiniudn.com/gogopher.jpg?imageView2/1/w/200/h/200

处理后的图片会自动缓存,用户不用关心,只要每次访问都用这个url就行了。然而,笔者在开始的时候,为了保持与其他文件形式统一的处理方法,对图片使用了预处理(因为视频什么的只能预处理),即在token中指定了预处理。此时问题出现了,从后台的日志看到,图片的预处理通知回调竟然比正常的上传成功回调还要快!这就导致预处理结果到来之前,我的业务服务器的数据库中还没有这个图片,无法保存预处理结果了。所以 推荐还是使用url直接处理,对图片要慎用预处理
视频文件无法快进播放
通常用户在观看视频的时候都会根据自己的喜好,快速将视频定位到指定的时间播放。实现这个功能,需要视频本身有关键帧信息、服务端需要支持关键帧播放请求,在 这篇文章 中有详细讨论。
但是笔者发现,在使用七牛云转化后的视频,这样做是无效的。于是咨询技术支持,得到的答案是:转化的文件是具有关键帧的,但七牛使用CDN加速,所以关键帧请求需要CDN的支持,如果想要用这个功能的话,需要单独联系销售或技术支持在CDN上配置,而且时间比较长。笔者联系了销售和技术支持,说是帮我配置,但到现在还没有搞定,因为最近这个也不是特别重要,所以也没有跟下去。
Callback校验
这是可选的一个步骤。由于七牛云会在上传完成之后回调业务服务器,所以理论上说业务服务器需要校验这个回调的合理性。原理在七牛的 文档 中有,需要用到 HMAC-SHA1 签名函数。但是七牛的sdk中没有提供直接的方式来做校验,在研读文档、多次失败和查看sdk源码后,笔者终于校验成功了。关键的分歧在于,文档中的这句话:

获取明文:data = Request.URL.Path +”\n” +Request.Body

这里的 Request.URL.Path 是否包含Querystring?答案是包含的!下面是笔者C#服务端的校验代码,使用的是ASP.NET Web Api:
```C#
byte[] key = System.Text.Encoding.UTF8.GetBytes(Qiniu.Conf.Config.SECRET_KEY);
using (HMACSHA1 hmac = new HMACSHA1(key))
{
var t = filterContext.Request.Content.ReadAsStringAsync();
t.Wait();
string rawbody = t.Result;
log.DebugFormat("request's rawbody : {0}", rawbody);
string text = filterContext.Request.RequestUri.PathAndQuery + "\n" + rawbody;
log.DebugFormat("PathAndQuery + \n + rawbody : {0}", text);
byte[] digest = hmac.ComputeHash(System.Text.Encoding.UTF8.GetBytes(text));
string computed = Qiniu.Util.Base64URLSafe.Encode(digest);
log.DebugFormat("Computed hash after base64 : {0}", computed);
IEnumerable<string> auths;
if (filterContext.Request.Headers.TryGetValues("Authorization", out auths) && auths.Count() == 1)
{
string auth = auths.First();
log.DebugFormat("Authorization in header : {0}", auth);
if (auth.StartsWith("QBox "))
{
var arr = auth.Substring(5).Split(':');
if (arr.Length == 2)
{
if (arr[1] != computed)
{
log.ErrorFormat("Authorization failed. Since auth from header {0} not equals computed {1}", arr[1], computed);
}
else
{
log.Debug("Authorization success.");
//only pass can be return
return;
}
}
else
{
log.Error("Callback Authorization's format is invalid, can not find two part after split by ':'.");
}
}
else
{
log.Error("Callback Authorization's format is invalid, missing leading 'QBox '.");
}
}
else
{
log.Error("The request from qiniu callback is missing 'Authorization'");
}

filterContext.Response = filterContext.Request.CreateResponse(System.Net.HttpStatusCode.Forbidden);

}

如下几个注意点:

- 明文应当是请求的path+querystring部分和rawbody
- 对于.NET而言,明文和key都需要用UTF-8编码变换成字节才能进行签名。而php中的hash_hmac函数完全不用这么复杂...
- 签名的结果再用base64的url安全的方式编码,再与请求的http头部的Authorization比较

建议官方在文档中加入一些相对底层一些的编程语言的实现,php太高端了...

## js-sdk实现略显粗糙 ##

在使用过程中,我发现[官方的js-sdk](https://github.com/qiniupd/qiniu-js-sdk/)有几个我觉得不好的地方:

**不能为每个文件获取UpToken**

试想,在文件上传过程中有获取UpToken是必须的,而且UpToken又需要包含预处理指令,不同的文件显然需要不同的UpToken,而在js-sdk的实现中,只在初始化这个上传组件对象的时候请求一次上传凭证,后面所有的上传都需要使用这个预先得到的UpToken:

```javascript
uploader.bind('Init', function(up, params) {
getUpToken();
});

于是我修改了这部分,在 BeforeUpload 事件中请求UpToken。建议官方考虑更改这个地方
只能实现分片上传,无法断点续传
js-sdk的实现在分片上传的实现上,是很简单的,不仅没有使用分片,而是分块(一块4m,调用mkblk),而且没有实现持久化ctx,或者类似的回调或接口。4m分块这个问题还可以不追究,没有实现持久化ctx就说不过去了,不持久化怎么实现断点续传撒?!就算不实现,也应该给出回调的入口,让调用者来实现持久化,而我实在无法找到这个'空子'可钻,只能直接在源码上改动了。
没有复用流行类库的东西
这个其实算不上问题,因为作为一个不依赖jquery的sdk,当然不能使用jquery现成的东西,比如ajax。不依赖jquery就算了,依赖plupload是几个意思嘛,还依赖全局对象...于是最后,我干脆自己将sdk改成了Backbone的类,将不要的东西统统去掉,使用jquery和underscore简化代码了...

2. 有什么好的网站,可以把视频存储在上面,网页上可以通过video标签调用

七牛云,可以放图片也可以放视频,一般大型项目都会用到

3. 在小程序后台上传视频播放不了,调用七牛云视频链接又可以播放,这是什么原因呢

因为七牛给你充潜了

4. 七牛云存储的关于七牛

七牛,是一家云存储初创企业,由国内存储行业的领军人物之一许式伟于2011年创立。团队核心成员主要来自盛大、金山、网龙、惠普等知名互联网公司,核心成员之间已合作多年。
七牛采用全分布式存储架构,可以解决单一数据中心架构可能存在的风险。和传统的云存储服务不同,七牛还增加了上传下载全网加速以及图片、音视频的处理服务。
七牛云存储主要托管企业的静态资源,为企业提供一站式在线数据托管、上传下载全网加速、以及数据云端处理服务。主要做静态文件,包括富媒体一体化解决方案,解决富媒体存储、上传下载加速、数据处理,包括图片处理、音视频处理,比如说做缩略图,打水印。
此外,七牛还提供了镜像存储、客户端直传以及断点续上传等功能,方便开发者的使用。

5. 七牛云存储 视频获取缩略图

//获取视频缩略图具体地址操作
//具陵逗体参数参照
https://developer.qiniu.com/dora/1313/video-frame-thumbnails-vframe (单尺凳卖帧缩略图)
https://developer.qiniu.com/dora/1315/video-sampling-thumbnails-vsample (视频采样缩略图)
https://developer.qiniu.com/dora/1279/basic-processing-images-imageview2 (图片截取)

案例

案例的使用方法是找的,但是还不知道这个%7C的这个拼接是从哪里来的,后续知道了再更粗闷新!

6. 初次使用七牛云存储,请问这是什么问题

使用七牛云存储解决ios7.1的app部署问题

一.问题描述

开发完ios版本的app。需要将.ipa文件和.plist文件打包上传,供用户下载,在线安装。用户安装过程简单描述如下:

首先通过手机浏览器safari或者扫描二维码获取到下载.plist的地址。然后浏览器会自动跳转到这个地址,下载、读取.plist。(用户跳转的地址是.plist的下载地址。)这个过程,显然使用http协议来下载.plist文件。最后,iphone通过读取.plist文件中配置的.ipa下载地址,来安装.ipa文件,来完成ios版本的app。

举例,网站首页中,下载.plist的代码:

<ahref="itms-services://?action=download-manifest&url=http://www.ekwing.com/ekwing.plist"class="mobile-ios"></a>

但是,苹果从ios7.1开始,用户安装app,需要使用https协议,来下载plist文件。也就说,在安装app的第一步,下载.plist文件,需要使用https协议。https协议如下:

这里不详细描述https协议。HTTPS的信任继承基于预先安装在浏览器中的证书颁发机构(如VeriSign、Microsoft等)(意即“我信任证书颁发机构告诉我应该信任的”)。因此,一个到某网站的HTTPS连接可被信任,当且仅当:

1. 用户相信他们的浏览器正确实现了HTTPS且安装了正确的证书颁发机构;

2. 用户相信证书颁发机构仅信任合法的网站;

3. 被访问的网站提供了一个有效的证书,意即,它是由一个被信任的证书颁发机构签发的(大部分浏览器会对无效的证书发出警告);

4. 该证书正确地验证了被访问的网站(如,访问https://example时收到了给“Example Inc.”而不是其它组织的证书);

5. 或者互联网上相关的节点是值得信任的,或者用户相信本协议的加密层(TLS或SSL)不能被窃听者破坏。

简单描述,用户使用https来下载.plist文件。则需要网站支持https协议。支持https协议,除了服务端做一些配置外,还需要申请一个数据签名证书。这个签名证书是由签发机构签发的。不能自己配置生成。而申请签名证书需要一段时间。而我们的目的只是希望能够让我们的app被用户正常下载安装即可。

二.问题分析

解决该问题,就2个方法:

1.自己网站服务上配置https服务,并购买数字签名证书以保证每种类型及其不同版本的浏览器能够安装了证书颁发机构颁发的,我们购买的数据签名证书。时间开销7天左右。

2.将app文件托管到支持https协议的第三方服务器上。

三.解决问题

使用七牛云存储,可以快速,免费解决这个问题。只需要到http://www.qiniu.com/注册一个账号。然后,开通https协议的域名即可。最后将.plist和.ipa文件上传到七牛云存储上即可。操作过程,非常简单。只要注意几点:

1. 开通一个http协议的域名,和一个https协议的域名。

如上图。后缀名是.qiniudn.com的是支持http协议的域名。后缀名是.qbox.me的是支持https协议的域名。上传.plist、.ipa到七牛云存储。

2. 修改下载.plist文件的地址,修改.plist文件内容。

网站首页,下载.plist地址改成上传到七牛云存储上的支持https协议(域名后缀名是.qbox.me)的下载链接地址。

<ahref="itms-services://?action=download-manifest&url=https://dn-ekwing.qbox.me/ekwing.plist"class="mobile-ios"></a>

3. 将.plist文件内容中,.ipa的下载地址,改成七牛云存储上的支持http协议(后缀名是.qiniudn.com)

<string>http://ekwing.qiniudn.com/ekwing.ipa</string>

4. 总结,.plist的下载用https协议,而.ipa的下载用http协议即可。修改完后,就可应用ios6、ios7、ios7.1进行测试了。

四. 感谢七牛云存储

感谢七牛运存储提供免费服务。不过,目前防盗链还不能用。希望能够加上防盗链功能。

五. 因ios7.1安装app,需要用https协议而提示的错误

无法安装应用程序因为证书无效

<Warning>:[ERROR]: Cannot load non-https manifest URL:http://192.168.1.22/ekwing.plist

<Warning>:Could not load download manifest with underlying error: ErrorDomain=SSErrorDomain Code=128 "无法连接" UserInfo=0x1669d990 {NSLocalizedDescription=无法连接}

<Warning>: NSURLConnection/CFURLConnection HTTP loadfailed (kCFStreamErrorDomainSSL, -9813)

<Warning>: Could not load download manifest withunderlying error: Error Domain=NSURLErrorDomain Code=-1202 "无法连接到商店" UserInfo=0x166bc640{NSLocalizedDescription=无法连接到商店,NSLocalizedRecoverySuggestion=您仍要连接此服务器吗?,NSLocalizedFailureReason=无法建立安全连接。请检查“日期与时间”设置。,NSErrorFailingURLStringKey=https://192.168.1.22/ekwing.plist,NSUnderlyingError=0x165b37e0 "此服务器的证书无效。您可能正在连接到一个伪装成“192.168.1.22”的服务器,这会威胁到您的机密信息的安全。",=<SecTrustRef:0x166b83e0>,NSErrorFailingURLKey=https://192.168.1.22/ekwing.plist}

7. 如何通过 SSL 的形式来访问七牛云存储上的资源

基本上所有七牛云存储 API 都同时支持 HTTP 和 HTTPS,但 HTTPS 下载 有些需要注意的点。如果您的资源希望支持 HTTPS 下载,有如下限制:
不能用 <bucket-name>.qiniudn.com 这样的二级域名,只能用 dn-<bucket-name>.qbox.me域名。样例:https://dn-abc.qbox.me/1.txt
使用自定义域名是付费的。我们并不建议使用自定义域名,但如确有需要,请联系我们的销售人员。
其中域名 <bucket-name>.qiniudn.com 是在一个空间申请后默认绑定的永久域名,但是域名dn-<bucket-name>.qbox.me 是需要手动绑定的(其中 <bucket-name> 需要替换成别的合法字符串,为了保持唯一性以及更好的识别,这个字符串可以是空间名,也可以是空间名后面加上别的字符串),请到 https://portal.qiniu.com -> 选择一个空间(选择需要绑定的空间) -> 空间设置 ->基本设置 -> 申请域名绑定 -> 选择 .qbox.me 的域名后缀进行绑定。由于这是七牛提供的二级域名,因此不用审核,即刻生效。
生效以后就可以使用HTTPS协议下载资源。例如:https://dn-<bucket-name>.qbox.me/key

8. 七牛云视频资源怎么设置访问权限

1、首先打开七牛云视频资源并登棚慎录自己的账号和密码。
2、其次在视频主页面找到设置并点击进入。
3、最后点击设置里的访问权限并点橡团击允许即梁和橘可完成。

热点内容
进阶版自行车建议装什么配置 发布:2024-05-13 13:57:01 浏览:126
sql表中输入数据 发布:2024-05-13 13:31:01 浏览:878
生成函数语法树编译原理 发布:2024-05-13 13:29:18 浏览:662
快手上传视频有钱吗 发布:2024-05-13 13:24:08 浏览:172
thinkphp缓存文件写入失败 发布:2024-05-13 13:17:20 浏览:531
linux数据迁移 发布:2024-05-13 13:12:08 浏览:88
模糊算法java 发布:2024-05-13 13:10:54 浏览:748
java反转字符串 发布:2024-05-13 13:10:39 浏览:552
京东电脑配置哪个好 发布:2024-05-13 12:25:22 浏览:543
城堡争霸台服脚本精灵 发布:2024-05-13 12:19:38 浏览:242