使用視訊點播,部分使用者會有大量存量視訊在個人網站、雲端上,使用阿裡雲視訊點播會有原有視訊遷移到 VOD 的需求,此篇文檔希望能協助使用者完成資料資源遷移到點播。
準備工作
上傳 SDK 流程圖解
- 正常遷移
産品百科 |如何進行點播資源遷移 - 使用阿裡雲 ECS 遷移
産品百科 |如何進行點播資源遷移
說明 如果使用者遷移資源原本在點播或 OSS,源位址使用内網的話,檔案可通過内網下載下傳到 ecs,詳情請參見:
内網遷移資源詳細步驟
-
準備資源遷移
說明 使用者需要準備所有遷移檔案的下載下傳位址,需要注意下載下傳位址如果存在鑒權,盡量保證鑒權時間夠長,避免下載下傳時檔案下載下傳位址失效。
示例:使用者可以根據自身的資料處理習慣儲存遷移檔案下載下傳位址,本次以每行一個檔案下載下傳位址文本格式,儲存遷移資源,如圖所示:
産品百科 |如何進行點播資源遷移 - 編寫 VOD 上傳程式說明遷移程式編寫過程中,需要記錄視訊上傳位址與上傳至點播後視訊 ID 之間的關聯,友善遷移後視訊的整理歸類。此處介紹兩種上傳方式,可以根據自身情況選擇使用,推薦使用第一種上傳 SDK 方式。
-
- 使用 VOD 上傳 SDK 上傳視訊 (推薦)遷移流程不變,但是在資源上傳時采用視訊點播的上傳 SDK 進行上傳,此種方式為同步上傳,更具有時效性,使用上傳 SDK 可以将程式優先部署在點播 bucket (國内預設上海) 同地區的 ecs (需使用者自行準備 ecs),使用 SDK 接口上傳時指定參數 regionId 後,檔案上傳至點播時會自動走内網。 上傳 SDK
import com.aliyun.vod.upload.impl.UploadVideoImpl;
import com.aliyun.vod.upload.req.UploadStreamRequest;
import com.aliyun.vod.upload.resp.UploadStreamResponse;
import java.io.*;
import java.net.URL;
/**
* 使用上傳SDK進行視訊檔案上傳
*/
public class UploadStreamDemo {
/**
* 流式上傳接口
*
* @param accessKeyId
* @param accessKeySecret
* @param title
* @param fileName
* @param inputStream
*/
private static void testUploadStream(String accessKeyId, String accessKeySecret, String title, String fileName, InputStream inputStream) {
UploadStreamRequest request = new UploadStreamRequest(accessKeyId, accessKeySecret, title, fileName, inputStream);
/* 自定義消息回調設定,參數說明參考文檔 https://help.aliyun.com/document_detail/86952.html#UserData */
//request.setUserData(""{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://test.test.com\"}}"");
/* 視訊分類ID(可選) */
//request.setCateId(0);
/* 視訊标簽,多個用逗号分隔(可選) */
//request.setTags("标簽1,标簽2");
/* 視訊描述(可選) */
//request.setDescription("視訊描述");
/* 封面圖檔(可選) */
//request.setCoverURL("http://cover.sample.com/sample.jpg");
/* 模闆組ID(可選) */
//request.setTemplateGroupId("8c4792cbc8694e****fd5330e56a33d");
/* 工作流ID(可選) */
//request.setWorkflowId("d4430d07361f****1339577859b0177b");
/* 存儲區域(可選) */
//request.setStorageLocation("outin-20170323****266-5sejdln9o.oss-cn-shanghai.aliyuncs.com");
/* 點播服務接入點 */
request.setApiRegionId("cn-shanghai");
/* ECS部署區域*/
// request.setEcsRegionId("cn-shanghai");
UploadVideoImpl uploader = new UploadVideoImpl();
UploadStreamResponse response = uploader.uploadStream(request);
System.out.print("RequestId=" + response.getRequestId() + "\n"); //請求視訊點播服務的請求ID
if (response.isSuccess()) {
System.out.print("VideoId=" + response.getVideoId() + "\n");
} else { //如果設定回調URL無效,不影響視訊上傳,可以傳回VideoId同時會傳回錯誤碼。其他情況上傳失敗時,VideoId為空,此時需要根據傳回錯誤碼分析具體錯誤原因
System.out.print("VideoId=" + response.getVideoId() + "\n");
System.out.print("ErrorCode=" + response.getCode() + "\n");
System.out.print("ErrorMessage=" + response.getMessage() + "\n");
}
}
public static void main(String[] args) {
/**
* 使用者可自行添加url資料源,并傳入視訊媒資資訊,上傳視訊資源
*/
InputStream inputStream = null;
String url = "http://test.aliyun.com/video/test.mp4";
try {
inputStream = new URL(url).openStream();
} catch (IOException e) {
e.printStackTrace();
}
testUploadStream("<Your AccessKeyId>", "<Your AccessKeySecret>", "title", "video-1.mp4", inputStream);
}
}
-
- 使用 URL 批量拉取上傳視訊 (不推薦) UploadMediaByURL 使用者可參考下方的批量拉取代碼,将遷移資源檔案下載下傳位址逐個傳入,執行完成上傳任務送出,也可以根據個人需求在上傳時傳入視訊的媒資資訊,如:标題、分類、描述等,這樣總體遷移流程不變,但需要使用者根據個人場景設計遷移步驟的具體行為。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.exceptions.ClientException;
import com.aliyuncs.profile.DefaultProfile;
import com.aliyuncs.vod.model.v20170321.UploadMediaByURLRequest;
import com.aliyuncs.vod.model.v20170321.UploadMediaByURLResponse;
import java.net.URLEncoder;
/**
* URL異步批量拉取
* 使用前建議閱讀該接口文檔,了解其優勢及缺陷
* https://help.aliyun.com/document_detail/86311.html?spm=a2c4g.11186623.6.714.4d9d3dbdFBPe6k
*/
public class UploadMediaByURLDemo {
public static DefaultAcsClient initVodClient(String accessKeyId, String accessKeySecret) throws ClientException {
String regionId = "cn-shanghai"; // 點播服務接入區域
DefaultProfile profile = DefaultProfile.getProfile(regionId, accessKeyId, accessKeySecret);
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* URL批量拉取上傳
* @param client 發送請求用戶端
* @return UploadMediaByURLResponse URL批量拉取上傳響應資料
* @throws Exception
*/
public static UploadMediaByURLResponse uploadMediaByURL(DefaultAcsClient client,String url) throws Exception{
UploadMediaByURLRequest request = new UploadMediaByURLRequest();
//String url = "http://xxxx.mp4";
String encodeUrl = URLEncoder.encode(url, "UTF-8");
request.setUploadURLs(encodeUrl);
//上傳視訊中繼資料資訊,為JSON字元串
JSONObject uploadMetadata = new JSONObject();
uploadMetadata.put("SourceUrl", encodeUrl);
uploadMetadata.put("Title", "upload by url sample");
JSONArray uploadMetadataList = new JSONArray();
uploadMetadataList.add(uploadMetadata);
request.setUploadMetadatas(uploadMetadataList.toJSONString());
JSONObject userData = new JSONObject();
//回調資訊設定,點播控制台勾選視訊上傳能完成事件,視訊成功上傳後會發送通知消息到該URL
JSONObject messageCallback = new JSONObject();
messageCallback.put("CallbackURL", "http://xxxxx");//使用者接受回調消息的url
messageCallback.put("CallbackType", "http");
userData.put("MessageCallback", messageCallback.toJSONString());
JSONObject extend = new JSONObject();//此處寫入的消息會寫入回調消息中,用于資料透傳
extend.put("MyId", "user-defined-id");
userData.put("Extend", extend.toJSONString());
request.setUserData(userData.toJSONString());
return client.getAcsResponse(request);
}
// 請求示例
public static void main(String[] argv) throws ClientException {
DefaultAcsClient client = initVodClient("<Your AccessKeyId>", "<Your AccessKeySecret>");
UploadMediaByURLResponse response = new UploadMediaByURLResponse();
try {
//此處使用者可修改成讀取,事前準備的遷移資源文本
response = uploadMediaByURL(client,"http://xxxx.mp4");檔案中的上傳位址進行上傳
System.out.print("UploadJobs = " + JSON.toJSONString(response.getUploadJobs()) + "\n");
} catch (Exception e) {
System.out.print("ErrorMessage = " + e.getLocalizedMessage());
}
System.out.print("RequestId = " + response.getRequestId() + "\n");
}
}
- 部署程式上傳
-
- 根據自身場景編寫完上傳代碼,将程式部署并開始資源上傳至 VOD。
-
需要整理遷移前後資源關系的使用者,上傳程式應當記錄源檔案位址和上傳後 VideoId 的關聯,如:在上傳時列印日志形式記錄、上傳時源檔案位址寫入視訊媒資資訊記錄等,具體如何記錄看使用者個人場景。
說明 URL 批量拉取,該接口同步傳回資訊中有對應上傳源檔案位址,有需求可以合理使用。
- 點播資源關系整理順利完成資料遷移,部分客戶會有整理資源的步驟,因為之前在上傳時,記錄了遷移源檔案位址和上傳到點播後 VideoId 之間的對應關系,可根據此記錄依照個人場景進行關系整理。
阿裡雲賬号之間的點播視訊資源遷移
将視訊點播 bucket 中的視訊遷移到另一個賬戶中的另一個 bucket 中,部分客戶希望在更多地區複制視訊點播解決方案,這就需要将現有視訊點播存儲的内容遷移到不同的帳戶,産生了阿裡雲賬号之間的視訊資源遷移。
針對這種場景提供的方案是:
- 調用點播 SearchMedia 接口篩選出要遷移的視訊 VideoId。
- 根據 VideoId 調用點播 GetMezzanineInfo
接口擷取所有需要遷移視訊的源檔案位址并儲存。
說明 如果使用者需要使用轉碼流作為遷移源檔案下載下傳位址,可通過點播
媒資導出産品百科 |如何進行點播資源遷移 - 自詳細步驟第二步 開始進行資源遷移。
如果使用者的 ecs 與源檔案在同一地域的話,這裡在調用 GetMezzanineInfo 接口時推薦擷取檔案 OSS 位址,然後手動将檔案下載下傳位址的域名替換為
OSS 内網 通過 OSS 内網位址通路 OSS 資源例:原 OSS 位址: outin-67870fd5b29****98a3900163e1c35d5.oss-cn-shanghai.aliyuncs.com/customerTrans/2a13b91506f9158f****7317f4a9d4c9/30f24681-1718d5c6237-**4bd.mp4
通過 ecs 内網通路位址 ((oss region 後增加 "-internal")): outin-67870fd5b29****98a3900163e1c35d5.oss-cn-shanghai-internal.aliyuncs.com/customerTrans/2a13b91506f9158f****7317f4a9d4c9/30f24681-1718d5c6237-**4bd.mp4
「視訊雲技術」你最值得關注的音視訊技術公衆号,每周推送來自阿裡雲一線的實踐技術文章,在這裡與音視訊領域一流工程師交流切磋。![]()
産品百科 |如何進行點播資源遷移