背景
業(yè)務(wù)需求炭庙,產(chǎn)品希望通過(guò)后臺(tái)接口上傳視頻后杏死,能立即獲取視頻切片的地址泵肄。然后將地址插入到相關(guān)業(yè)務(wù)的表中。
但是七牛的視頻處理(切片淑翼、轉(zhuǎn)碼等)是異步執(zhí)行腐巢,那么如何才能直接獲取到經(jīng)過(guò)七牛視頻處理后的資源地址呢?
解決思路
在做七牛普通上傳的 token
時(shí)玄括,我們可以提前設(shè)定上傳后的文件名(key)冯丙。當(dāng)前端向后端獲取token時(shí),一并將資源地址和token返回前端遭京。前端利用 token
進(jìn)行文件直傳到CDN胃惜,上傳成功后,將已獲得的資源地址進(jìn)行相關(guān)業(yè)務(wù)處理(資源地址上報(bào)等)哪雕。
那么船殉,可以不可以將類(lèi)似的思路,復(fù)用到帶數(shù)據(jù)處理的token生成中斯嚎。
我們?cè)谏蓆oken的時(shí)利虫,將兩種文件名(源資源文件名和經(jīng)處理的資源名)信息保存到token中。前端在獲取token時(shí)堡僻,提前獲取到文件訪(fǎng)問(wèn)地址糠惫。
但是有一個(gè)問(wèn)題,音視頻處理是一個(gè)很耗時(shí)的操作钉疫,不像文件直傳CDN進(jìn)行保存硼讽,可以立即得到反饋。那么陌选,如何確定視頻處理成功呢理郑?可以通過(guò)直傳返回的persistentId
,定期輪詢(xún)「持久化處理狀態(tài)查詢(xún)接口」咨油。來(lái)判斷是否處理完畢您炉。
步驟
Step1 生成帶數(shù)據(jù)處理的憑證
const qiniu = require("qiniu");
const accessKey = 'XXXXX';
const secretKey = '私鑰XXX';
const mac = new qiniu.auth.digest.Mac(accessKey, secretKey);
const bucket = '存儲(chǔ)空間名';
const origin_filename = 'prTEDwvJY18YBD_720_p1.mp4';
const save_as_filename = 'hls_prTEDwvJY18YBD_720_p1.m3u8';
const save_hls_entry = qiniu.util.urlsafeBase64Encode(`${bucket}:${save_as_filename}`);
const avthumbMp4Fop = `avthumb/m3u8/noDomain/1/segtime/15/vb/440k|saveas/${save_hls_entry}`;
const options = {
scope: `${bucket}:${origin_filename}`,
persistentOps: avthumbMp4Fop,
persistentPipeline: 'video_pipeline',
};
var putPolicy = new qiniu.rs.PutPolicy(options);
console.log(putPolicy.uploadToken(mac));
Step2 前端使用token直傳CDN
POST http://up.qiniu.com
格式: form-data
參數(shù):
key: 文件名,上文代碼中的 `origin_filename`
token: 上傳token
file: 具體文件
// 上傳成功的響應(yīng)體
// 狀態(tài)碼 200
{
"hash": "luVJbz9RtE3Ha7c9XaDerE6rPyvP",
"key": "prTEDwvJY18YBD_720_p1.mp4",
"persistentId": "z0.5b56c9b938b9f324a573edb4" // 可以使用persistentId役电,檢測(cè)當(dāng)前處理狀態(tài)
}
Step3 輪詢(xún)檢測(cè)當(dāng)前作業(yè)處理狀態(tài)
GET api.qiniu.com/status/get/prefop?id=${persistentId}
{
"code": 0, // 狀態(tài)碼0成功赚爵,1等待處理,2正在處理法瑟,3處理失敗冀膝,4通知提交失敗。
"desc": "The fop was completed successfully",
"id": "z0.5b56c9b938b9f324a573edb4",
"inputBucket": "ocean",
"inputKey": "prTEDwvJY18YBD_720_p1.mp4",
"items": [
{
"cmd": "avthumb/m3u8/noDomain/1/segtime/15/vb/440k|saveas/b2NlYW46aGxzX3ByVEVEd3ZKWTE4WUJEXzcyMF9wMS5tM3U4",
"code": 0,
"desc": "The fop was completed successfully",
"hash": "FraV6PX6Xp7mYYgAnY0sniTK-pPt",
"key": "hls_prTEDwvJY18YBD_720_p1.m3u8",
"returnOld": 0
}
],
"pipeline": "1381326751.k12_video",
"reqid": "FQIAAKAxpZfFOkQV"
}
相關(guān)文章
- 七牛上傳開(kāi)發(fā)(三)使用NodeJS生成帶數(shù)據(jù)處理的憑證
- 七牛上傳開(kāi)發(fā)(二)七碰控制臺(tái)實(shí)現(xiàn)視頻切片處理
- 七牛上傳開(kāi)發(fā)(一)限制文件類(lèi)型和文件大小