當前位置:首頁 » 存儲配置 » 七牛雲存儲視頻調用

七牛雲存儲視頻調用

發布時間: 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-04-28 16:35:21 瀏覽:862
pythonwindowsweb 發布:2024-04-28 16:10:29 瀏覽:542
王牌競速如何找到最開始的伺服器 發布:2024-04-28 14:53:09 瀏覽:403
airpod安卓怎麼切換下一曲 發布:2024-04-28 14:23:03 瀏覽:835
百姓網源碼 發布:2024-04-28 14:18:56 瀏覽:893
war包防止反編譯 發布:2024-04-28 14:17:16 瀏覽:328
linuxll命令 發布:2024-04-28 14:16:27 瀏覽:860
阿里雲伺服器增強安全配置取消 發布:2024-04-28 14:16:12 瀏覽:867
war3存儲空間不足 發布:2024-04-28 13:20:54 瀏覽:949
微信密碼已經忘記了如何找回 發布:2024-04-28 11:54:13 瀏覽:306