當檔案沒有儲存在本地且支援通過公網URL訪問時,您可使用ApsaraVideo for VOD封裝好的介面拉取上傳。該方式可以免去先將檔案下載到本地後再上傳到點播的過程,適用於離線搬站情境。
功能說明
URL批量拉取上傳是非同步任務,非即時,不保證時效性,一般提交後會在數小時、甚至數天內完成遷移上傳。如果對時效性要求較高,建議使用上傳SDK上傳檔案、或者使用OSS SDK上傳檔案。
同一個媒體檔案 URL,每次提交上傳任務都會在點播中產生一個新的媒體資源(即產生新的媒體 ID)。
URL批量拉取僅可使用視訊或音頻格式上傳,詳情請參見支援的媒體格式。
單個檔案超過20GB時,將導致上傳失敗,請使用其他上傳方式。
通過控制台上傳
控制台情境下,目前僅華東2(上海)地區支援通過URL拉取方式上傳音視頻,其他地區暫不支援該方式上傳。
在點播控制台左側導覽列的媒資庫地區,單擊音/視頻。
單擊上傳音/視頻。

單擊添加音/視頻。

添加上傳檔案,配置轉碼,單擊開始上傳。
選擇URL拉取方式時,若URL中不包含副檔名,為提高拉取成功率,請填寫副檔名。由於網路或資源所在服務地區的原因,您的拉取任務可能失敗,請調整網路或資源的服務地區後重新嘗試拉取。

通過API方式上傳
推薦整合點播服務端SDK,調用點播的UploadMediaByURL - URL批量拉取上傳介面提交任務。該介面目前僅支援華東 2(上海)、華北 2(北京)、華南 1(深圳)、新加坡、美國(矽谷)地區。
前提條件
您已經開通了ApsaraVideo for VOD服務。開通步驟請參見開通ApsaraVideo for VOD服務。
您已經完成上傳相關的系統配置,包括啟用目標儲存地區的儲存地址和配置回調。操作指引請參見管理儲存Bucket及回調設定。
您已準備好用於調用點播服務的帳號。為避免阿里雲帳號AccessKey泄露帶來的安全風險,推薦您建立RAM使用者並授予其VOD相關許可權。然後使用RAM使用者的AK對(AccessKey ID和AccessKey Secret)訪問點播服務。操作指引請參見建立RAM使用者並授權。
已配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統配置環境變數。
重要阿里雲帳號的AccessKey擁有所有API的存取權限,建議您使用RAM使用者的AccessKey進行API訪問或日常營運。
強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
(可選)如需使用STS臨時授權方式(阿里雲Security Token Service)訪問點播服務,請為RAM使用者建立角色並授予角色VOD相關許可權。操作指引請參見擷取STS Token。
範例程式碼
其他語言樣本請直接參考UploadMediaByURL的SDK樣本。
V1.0 SDK
步驟一、安裝依賴
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.1</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-vod</artifactId>
<version>2.16.32</version>
</dependency>步驟二、範例程式碼
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.aliyuncs.DefaultAcsClient;
import com.aliyuncs.auth.AlibabaCloudCredentials;
import com.aliyuncs.auth.EnvironmentVariableCredentialsProvider;
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批量拉取上傳功能樣本
*
*/
public class AudioOrVideoUploadByUrl {
/**
* 讀取AccessKey資訊
*/
public static DefaultAcsClient initVodClient() throws ClientException {
// 點播服務接入地區
String regionId = "cn-shanghai";
// 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
// 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
// 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
DefaultProfile profile = DefaultProfile.getProfile(regionId, System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
DefaultAcsClient client = new DefaultAcsClient(profile);
return client;
}
/**
* URL批量拉取上傳
*
* @param client 發送請求用戶端
* @return UploadMediaByURLResponse URL批量拉取上傳響應資料
* @throws Exception
*/
public static UploadMediaByURLResponse uploadMediaByURL(DefaultAcsClient client) throws Exception {
UploadMediaByURLRequest request = new UploadMediaByURLRequest();
String url = "http://video_01.mp4";
String encodeUrl = URLEncoder.encode(url, "UTF-8");
//視頻源檔案URL
request.setUploadURLs(encodeUrl);
//上傳視頻中繼資料資訊
JSONObject uploadMetadata = new JSONObject();
//需要上傳的視頻源檔案URL,與UploadURLs裡的URL匹配才會生效
uploadMetadata.put("SourceUrl", encodeUrl);
//視頻標題
uploadMetadata.put("Title", "upload by url sample");
JSONArray uploadMetadataList = new JSONArray();
uploadMetadataList.add(uploadMetadata);
request.setUploadMetadatas(uploadMetadataList.toJSONString());
//UserData,使用者自訂設定參數,使用者需要單獨回調URL及資料透傳時設定(非必須)
JSONObject userData = new JSONObject();
//UserData回調部分設定
//訊息回調設定,指定時以此為準,否則以全域設定的事件通知為準
JSONObject messageCallback = new JSONObject();
//設定回調地址
messageCallback.put("CallbackURL", "http://192.168.0.0/16");
//設定回調類型,預設為http
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) {
try {
DefaultAcsClient client = initVodClient();
UploadMediaByURLResponse response = uploadMediaByURL(client);
System.out.print("UploadJobs = " + JSON.toJSONString(response.getUploadJobs()) + "\n");
System.out.print("RequestId = " + response.getRequestId() + "\n");
} catch (Exception e) {
System.out.print("ErrorMessage = " + e.getLocalizedMessage());
}
}
}V2.0 SDK
步驟一、安裝依賴
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>vod20170321</artifactId>
<version>3.6.4</version>
</dependency>步驟二、範例程式碼
工程代碼建議使用更安全的無AK方式,憑據配置方式請參見管理訪問憑據。
package com.aliyun.sample;
import com.aliyun.tea.*;
public class UploadMediaByURL {
/**
* <b>description</b> :
* <p>使用憑據初始化帳號Client</p>
* @return Client
*
* @throws Exception
*/
public static com.aliyun.vod20170321.Client createClient() throws Exception {
com.aliyun.credentials.Client credential = new com.aliyun.credentials.Client();
com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
.setCredential(credential);
// Endpoint 請參考 https://api.aliyun.com/product/vod
config.endpoint = "vod.cn-shanghai.aliyuncs.com";
return new com.aliyun.vod20170321.Client(config);
}
public static void main(String[] args_) throws Exception {
com.aliyun.vod20170321.Client client = Sample.createClient();
com.aliyun.vod20170321.models.UploadMediaByURLRequest uploadMediaByURLRequest = new com.aliyun.vod20170321.models.UploadMediaByURLRequest()
.setUploadURLs("http://cloud.video.taobao.com/play/u/3897629815/p/1/e/6/t/1/301659704826.mp4");
com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
try {
// 複製代碼運行請自行列印 API 的傳回值
com.aliyun.vod20170321.models.UploadMediaByURLResponse response = client.uploadMediaByURLWithOptions(uploadMediaByURLRequest, runtime);
com.aliyun.teaconsole.Client.log(com.aliyun.teautil.Common.toJSONString(response));
} catch (TeaException error) {
// 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
// 錯誤 message
System.out.println(error.getMessage());
// 診斷地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
} catch (Exception _error) {
TeaException error = new TeaException(_error.getMessage(), _error);
// 此處僅做列印展示,請謹慎對待異常處理,在工程專案中切勿直接忽略異常。
// 錯誤 message
System.out.println(error.getMessage());
// 診斷地址
System.out.println(error.getData().get("Recommend"));
com.aliyun.teautil.Common.assertAsString(error.message);
}
}
}