全部產品
Search
文件中心

ApsaraVideo VOD:點播資源遷移

更新時間:Feb 26, 2025

ApsaraVideo for VOD支援將第三方平台的視頻資源遷移到ApsaraVideo for VOD,也支援阿里雲帳號間的視頻資源遷移。本文介紹上述資源的遷移方法。

遷移情境及方法

ApsaraVideo for VOD提供了多種方式進行資源遷移,支援將第三方資源(儲存於個人網站、雲端的視頻等第三方資料資源)、同帳號或跨帳號下的OSS資源及點播資源遷移到ApsaraVideo for VOD中。

資源遷移成功之後,資源將會在ApsaraVideo for VOD中產生新的視頻ID、播放地址、封面地址等視頻資訊,您需要自行關聯遷移前後的視頻資源關係。

遷移情境

遷移方法

遷移工具

第三方資源,遷移到ApsaraVideo for VOD

  • URL批量拉取(推薦)

  • ApsaraVideo for VOD上傳SDK

  • ApsaraVideo for VOD服務端API

同阿里雲帳號下的OSS資源,遷移到ApsaraVideo for VOD

  • URL批量拉取(推薦)

  • ApsaraVideo for VOD上傳SDK

  • ApsaraVideo for VOD服務端API

跨阿里雲帳號下的OSS資源,遷移到ApsaraVideo for VOD

  • URL批量拉取(推薦)

  • ApsaraVideo for VOD上傳SDK

  • ApsaraVideo for VOD服務端API

跨阿里雲帳號下的點播資源,遷移到ApsaraVideo for VOD

  • URL批量拉取(推薦)

  • ApsaraVideo for VOD上傳SDK

  • ApsaraVideo for VOD服務端API

準備工作

  • 您已經註冊了阿里雲帳號並完成帳號實名認證。登入位址請參見阿里雲官網。註冊指引請參見註冊阿里雲帳號

  • 調用服務端介面需要使用AccessKey完成身分識別驗證,請提前擷取AccessKey。擷取方法請參見建立AccessKey

    說明

    如果使用RAM使用者完成遷移,請先建立RAM使用者再擷取AccessKey。詳細步驟請參見RAM子帳號訪問

URL批量拉取上傳(推薦)

使用情境

如果需要遷移的檔案沒有儲存在本機伺服器或終端,需要通過公網訪問URL地址進行資源訪問遷移時,推薦您使用URL批量拉取的方式進行上傳。該方式的優勢在於能夠快速上傳大量檔案,同時上傳過程採用內網上傳方式,節省上傳流量。

使用限制

URL批量拉取上傳目前支援華東2(上海)、華北2(北京)、華南1(深圳)、新加坡、美國(矽谷)地區使用,其他地區的使用者建議您使用其他方式進行資源遷移。具體節點資訊請參見點播地區標識

注意事項

  • URL批量拉取上傳是非同步任務,非即時,不保證時效性,一般提交後會在數小時、甚至數天內完成遷移上傳。如果對時效性要求較高,建議使用上傳SDK上傳。

  • 同一個媒體檔案URL,每次提交上傳任務都會在點播中產生一個新的媒體資源(即產生新的媒體ID)。

遷移流程點播資源遷移-URL..png

操作步驟

  1. 整合ApsaraVideo for VOD服務端SDK。

    本文以整合Java SDK為例完成後續操作,更多語言的使用,請參見服務端SDK

    下載Java SDK請參見服務端SDK,安裝Java SDK請參見安裝

  2. 準備需要遷移的資源。

    說明
    • 使用者需要準備所有遷移檔案的下載地址,需要注意下載地址如果存在鑒權,盡量保證鑒權時間夠長,避免下載時檔案下載地址失效。

    • 檔案的下載地址必須是包含副檔名的完整路徑,例如:https://****.mp4

  3. 通過點播服務端SDK調用UploadMediaByURL - URL批量拉取上傳介面完成批量上傳。

    以下提供Java語言的調用樣本,更多語言的調用樣本,請參見URL批量拉取上傳

    您也可以通過OpenAPI開發人員門戶線上調試。

    展開查看Java範例程式碼

    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());
            }
        }
    
    }
  4. 擷取上傳結果。

    方式一:事件通知

    ApsaraVideo for VOD支援HTTP回調和MNS回調兩種方式的事件通知,通過提前配置事件通知,當媒體檔案處理完成(如上傳完成、轉碼完成等)後,ApsaraVideo for VOD服務會根據您配置的回調方式及時通知您。配置詳情請參見事件通知

    URL批量拉取上傳的事件類型為URL上傳視頻完成。您可以從接收到的回調結果中擷取到上傳任務的狀態等資訊。

    • 上傳成功回調樣本

      { 
        "Status": "success",
        "EventTime": "2017-03-20T07:49:17Z",
        "EventType": "UploadByURLComplete", 
        "VideoId": "43q9fjdun3f****", 
        "JobId": "4c815bjs83j1****", 
        "SourceURL ": "http://example.aliyundoc.com/27ffc438-164d55217ef-0005-6884-51a-1****.mp4",
        "Size":"123456"
      }
    • 上傳失敗回調樣本

      { 
        "Status": "fail",
        "EventTime": "2017-03-20T07:49:17Z",
        "EventType": "UploadByURLComplete", 
        "ErrorCode ": "URLInvalidError ", 
        "ErrorMessage ": "download video failed by the url, please check it", 
        "JobId": "4c815bjsued****" ,
        "SourceURL ": "http://example.aliyundoc.com/27ffc438-164d55217ef-0005-6884-51a-1****.mp4",
      }

    方式二:調用API查詢

    調用GetURLUploadInfos - 擷取URL上傳資訊介面來查詢指定URL拉取上傳任務的執行狀態等資訊。

自行下載檔案並搭建上傳服務上傳

當您的服務地區不支援使用URL批量拉取方式上傳或您對上傳即時性要求較高時,您可以自行下載檔案並使用ApsaraVideo for VOD提供的上傳SDK進行上傳。如果您把上傳服務部署在ECS上,根據您的ECS地區的不同可以選擇內網上傳和公網上傳兩種方式進行資源遷移。

內網下載內網上傳

使用情境

當您的上傳服務所在ECS與視頻源檔案在同一個地區時,可以通過ECS內網,將同帳號或跨帳號下的OSS資源遷移到ApsaraVideo for VOD中,或將跨帳號下的ApsaraVideo for VOD資源遷移到ApsaraVideo for VOD中。

遷移流程點播資源遷移-內網..png

前提條件

您的上傳服務所在的ECS與視頻源檔案必須在同一個地區。

操作步驟

  1. 準備需要遷移的OSS資源或ApsaraVideo for VOD資源的內網地址並儲存。

    說明

    需要注意資源檔地址如果存在鑒權,盡量保證鑒權時間夠長,避免下載時檔案下載地址失效。

    • 點播資源

      1. 調用ApsaraVideo for VOD服務端GetMezzanineInfo - 擷取源檔案資訊介面擷取檔案OSS地址,請務必將請求參數OutputType的值設為oss

      2. 將擷取到的OSS地址修改為內網地址,修改方法為在OSS地區後增加-internal

    • OSS資源

      1. 可以通過列舉檔案,得到object列表,擷取到資源的源檔案地址並儲存。

      2. 將擷取到的OSS地址修改為內網地址,修改方法為在OSS地區後增加-internal

    修改前後的地址樣本如下:

    擷取的OSS回源地址

    修改後的內網地址

    outin-67870fd5b29****98a3900163e1c35d5.oss-cn-shanghai.aliyuncs.com/customerTrans/2a13b91506f9158f****7317f4a9d4c9/30f24681-1718d5c6237-**4bd.mp4

    outin-67870fd5b29****98a3900163e1c35d5.oss-cn-shanghai-internal.aliyuncs.com/customerTrans/2a13b91506f9158f****7317f4a9d4c9/30f24681-1718d5c6237-**4bd.mp4

    更多擷取OSS資源的內網訪問地址的資訊,請參見ECS執行個體通過OSS內網地址訪問OSS資源

  2. 搭建上傳服務。

    說明

    將上傳服務部署在與點播OSS Bucket(中國內地預設上海)同地區的ECS。按照此方式部署後,使用上傳SDK上傳時指定參數regionId為上述地區,上傳過程會自動走內網。

    程式碼範例請參考上傳服務搭建及程式碼範例。推薦使用ApsaraVideo for VOD上傳SDK完成遷移。

  3. 執行步驟2搭建的上傳代碼,上傳視頻至ApsaraVideo for VOD。

    使用修改後的內網地址作為檔案地址傳入上傳介面進行上傳。

公網下載公網上傳

使用情境

當您未將上傳服務部署在ECS上或上傳服務所在ECS與視頻源檔案不在同一個地區時,您可以選擇使用公網下載公網上傳方式進行資源遷移。

遷移流程點播資源遷移-公網..png

操作步驟

  1. 準備需要遷移的資源的源檔案地址並儲存。

    說明
    • 需要注意資源檔地址如果存在鑒權,盡量保證鑒權時間夠長,避免下載時檔案下載地址失效。

    • 資源檔的地址必須是包含副檔名的完整路徑,例如:https://****.mp4

    • 點播資源

      1. 調用點播SearchMedia - 搜尋媒體資訊介面篩選出要遷移的視頻VideoId。

      2. 調用GetMezzanineInfo - 擷取源檔案資訊介面擷取所有需要遷移視頻的源檔案地址並儲存。

        說明
        • 此處以調用介面擷取源檔案地址為例介紹遷移步驟。您也可以通過ApsaraVideo for VOD控制台擷取源檔案地址,詳細操作請參見媒資資料匯出

        • 如果您需要使用轉碼流作為遷移源檔案下載地址,可使用點播服務,更多操作,請參見媒資管理

    • OSS資源

      可以通過列舉檔案,得到object列表,擷取到資源的源檔案地址並儲存。

    • 第三方資源(儲存於個人網站、雲端的視頻等第三方資料資源)

      請自行準備所有遷移檔案的下載地址,您可以根據自身的資料處理習慣儲存遷移檔案下載地址。

  2. 搭建上傳服務。

    程式碼範例請參考上傳服務搭建及程式碼範例。推薦使用ApsaraVideo for VOD上傳SDK完成遷移。

    說明

    需要整理遷移前後資源關係的使用者,上傳程式應當記錄源檔案地址和上傳後VideoId的關聯,如:在上傳時列印日誌形式記錄、上傳時源檔案地址寫入視頻媒資資訊記錄等,具體如何記錄依賴於使用者情境。如果使用URL批量拉取,該介面同步返回資訊中有對應上傳源檔案地址,有需求可以合理使用。

  3. 執行步驟2搭建的上傳代碼,上傳視頻至ApsaraVideo for VOD。

    不需要修改源檔案地址,直接將源檔案地址作為檔案地址傳入上傳介面進行上傳。

  4. (可選)整理點播資源關係。

    順利完成資料移轉,如有整理資源的需求,請根據上傳時記錄的遷移源檔案地址和上傳到點播後VideoId之間的對應關係進行整理。

將OSS自有Bucket添加到ApsaraVideo for VOD並註冊資源

使用情境

適用於資源儲存在同帳號下的OSS Bucket時,無需二次上傳,直接通過將OSS自有Bucket添加到ApsaraVideo for VOD中後並註冊資源來達到遷移資源的目的。

使用限制

  • 目前僅支援將標準儲存類型的OSS Bucket添加到ApsaraVideo for VOD中。

  • 每個服務地區下最多僅支援添加10個OSS自有Bucket。

操作步驟

  1. 將需要遷移資源的OSS自有Bucket添加到ApsaraVideo for VOD中。

    詳細的操作步驟及參數解釋,請參見管理儲存Bucket

  2. 通過介面將OSS中的資源註冊到ApsaraVideo for VOD中。

    1. 使用OSS的API/SDK,列舉bucket下的所有檔案,得到object列表。詳情請參見列舉檔案

    2. 調用RegisterMedia - 註冊媒資資訊介面註冊媒資檔案產生音/視頻ID,其中,RegisterMetadatas中的FileURL參數為OSS列舉檔案得到的object的完整路徑,即必須加上OSS網域名稱地址,例如:

      https://oss-cn-hangzhou.aliyuncs.com/video/example.mp4

上傳服務搭建及程式碼範例

無論是第三方資源還是阿里雲帳號間資源遷移,都需要下載原視頻再通過上傳工具上傳到ApsaraVideo for VOD。ApsaraVideo for VOD提供上傳SDK及服務端介面兩種上傳工具。您的上傳服務可通過上傳SDK或服務端介面實現。使用上傳SDK為同步上傳,更具實效性,故推薦使用。使用服務端介面較為繁瑣,故不推薦。

搭建上傳服務步驟

  1. 整合上傳SDK或服務端SDK。

    根據您使用的語言,整合上傳SDK請參考上傳SDK,整合服務端SDK請參考服務端SDK

  2. 編寫上傳服務代碼。如何編寫請參考下述程式碼範例。

上傳SDK程式碼範例(推薦)

以下代碼僅以Java上傳SDK為例展示。更多語言的上傳SDK及操作樣本,請參考上傳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);
        
        /* 自訂訊息回調設定,參數說明請參見基礎資料型別 (Elementary Data Type) */
        //request.setUserData(""{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackURL\":\"http://example.aliyundoc.com\"}}"");
        /* 視頻分類ID(可選) */
        //request.setCateId(0);
        /* 視頻標籤,多個用逗號分隔(可選) */
        //request.setTags("標籤1,標籤2");
        /* 視頻描述(可選) */
        //request.setDescription("視頻描述");
        /* 封面圖片(可選),如http://****.example.com/image_01.jpg*/
        //request.setCoverURL("<Your CoverURL>");
        /* 模板組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");  //請求ApsaraVideo for VOD服務的請求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;
        //您的視頻地址。如http://example.aliyundoc.com/video/****.mp4
        String url = "<Your File URL>";
        try {
            inputStream = new URL(url).openStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
        // 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
        // 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
        String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

        //以下參數中的AccessKey ID, AccessKey Secret為提前準備好的AccessKey資訊。<Your Video Title>為視頻標題。<Your Video with File Extension>為含副檔名的視頻,如video-1.mp4。
        testUploadStream(accessKeyId, accessKeySecret, "<Your Video Title>", "<Your Video with File Extension>", inputStream);
    }
}

服務端API程式碼範例(不推薦)

整合服務端SDK並進行上傳,需要開發人員自行實現所有上傳邏輯,包括在點播服務擷取上傳地址和憑證、Base64解碼上傳憑證和地址、以及調用OSS能力完成上傳。此方式較為繁瑣且出錯率較高,因此不推薦使用。完整的上傳邏輯請參見通過ApsaraVideo for VODAPI上傳媒體檔案