日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

微短劇媒體上傳

微短劇解決方案提供SDK或API的媒體上傳方式。通過(guò)閱讀本文,您可以了解微短劇媒體上傳的基本操作步驟。

說(shuō)明

使用微短劇媒體上傳前,請(qǐng)確保您已基本了解什么是媒體上傳。詳情媒體上傳概述

媒體上傳基礎(chǔ)流程

  1. 在視頻點(diǎn)播服務(wù)內(nèi)獲取上傳憑證和上傳地址。

  2. 調(diào)用OSS上傳能力上傳媒體。

上傳SDK(推薦使用)

上傳SDK封裝了獲取上傳憑證及地址的邏輯和OSS上傳的邏輯。開發(fā)者僅需要簡(jiǎn)單配置就可以實(shí)現(xiàn)上傳功能,推薦使用

調(diào)用相應(yīng)接口完成上傳,示例Demo如下:

public class Sample {
    // 賬號(hào)AK信息請(qǐng)?zhí)顚懀ū剡x)
    // 阿里云賬號(hào)AccessKey擁有所有API的訪問(wèn)權(quán)限,建議您使用RAM用戶進(jìn)行API訪問(wèn)或日常運(yùn)維。
    // 強(qiáng)烈建議不要把AccessKey ID和AccessKey Secret保存到工程代碼里,否則可能導(dǎo)致AccessKey泄露,威脅您賬號(hào)下所有資源的安全。
    // 本示例通過(guò)從環(huán)境變量中讀取AccessKey,來(lái)實(shí)現(xiàn)API訪問(wèn)的身份驗(yàn)證。運(yùn)行代碼示例前,請(qǐng)配置環(huán)境變量ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
    private static final String accessKeyId = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID");
    private static final String accessKeySecret = System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET");

    public static void main(String[] args) {
        // 視頻文件上傳
        // 視頻標(biāo)題(必選)
        String title = "測(cè)試標(biāo)題";
        // 1.本地文件上傳和文件流上傳時(shí),文件名稱為上傳文件絕對(duì)路徑,如:/User/sample/文件名稱.mp4 (必選)
        // 2.網(wǎng)絡(luò)流上傳時(shí),文件名稱為源文件名,如文件名稱.mp4(必選)。
        // 3.流式上傳時(shí),文件名稱為源文件名,如文件名稱.mp4(必選)。
        // 任何上傳方式文件名必須包含擴(kuò)展名
        String fileName = "/Users/test/video/test.mp4";
        // 本地文件上傳
        testUploadVideo(accessKeyId, accessKeySecret, title, fileName);

        // 待上傳視頻的網(wǎng)絡(luò)流地址
        String url = "http://test.aliyun.com/video/test.mp4";

        // 2.網(wǎng)絡(luò)流上傳
        // 文件擴(kuò)展名,當(dāng)url中不包含擴(kuò)展名時(shí),需要設(shè)置該參數(shù)
        String fileExtension = "mp4";
        testUploadURLStream(accessKeyId, accessKeySecret, title, url, fileExtension);

        // 3.文件流上傳
        testUploadFileStream(accessKeyId, accessKeySecret, title, fileName);

        // 4.流式上傳,如文件流和網(wǎng)絡(luò)流
        InputStream inputStream = null;
        // 4.1 文件流
        try {
            inputStream = new FileInputStream(fileName);
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
        // 4.2 網(wǎng)絡(luò)流
        try {
            inputStream = new URL(url).openStream();
        } catch (IOException e) {
            e.printStackTrace();
        }
        testUploadStream(accessKeyId, accessKeySecret, title, fileName, inputStream);
    }

    /**
 * 本地文件上傳接口
 *
 * @param accessKeyId
 * @param accessKeySecret
 * @param title
 * @param fileName
 */
    private static void testUploadVideo(String accessKeyId, String accessKeySecret, String title, String fileName) {
        UploadVideoRequest request = new UploadVideoRequest(accessKeyId, accessKeySecret, title, fileName);
        /* 可指定分片上傳時(shí)每個(gè)分片的大小,默認(rèn)為2M字節(jié) */
        request.setPartSize(2 * 1024 * 1024L);
        /* 可指定分片上傳時(shí)的并發(fā)線程數(shù),默認(rèn)為1,(注:該配置會(huì)占用服務(wù)器CPU資源,需根據(jù)服務(wù)器情況指定)*/
        request.setTaskNum(1);
        /* 是否開啟斷點(diǎn)續(xù)傳, 默認(rèn)斷點(diǎn)續(xù)傳功能關(guān)閉。當(dāng)網(wǎng)絡(luò)不穩(wěn)定或者程序崩潰時(shí),再次發(fā)起相同上傳請(qǐng)求,可以繼續(xù)未完成的上傳任務(wù),適用于超時(shí)3000秒仍不能上傳完成的大文件。
    注意:斷點(diǎn)續(xù)傳開啟后,會(huì)在上傳過(guò)程中將上傳位置寫入本地磁盤文件,影響文件上傳速度,請(qǐng)您根據(jù)實(shí)際情況選擇是否開啟*/
        //request.setEnableCheckpoint(false);
        /* OSS慢請(qǐng)求日志打印超時(shí)時(shí)間,是指每個(gè)分片上傳時(shí)間超過(guò)該閾值時(shí)會(huì)打印debug日志,如果想屏蔽此日志,請(qǐng)調(diào)整該閾值。單位:毫秒,默認(rèn)為300000毫秒*/
        //request.setSlowRequestsThreshold(300000L);
        /* 可指定每個(gè)分片慢請(qǐng)求時(shí)打印日志的時(shí)間閾值,默認(rèn)為300s*/
        //request.setSlowRequestsThreshold(300000L);
        /* 是否顯示水印(可選),指定模板組ID時(shí),根據(jù)模板組配置確定是否顯示水印*/
        //request.setIsShowWaterMark(true);
        /* 自定義消息回調(diào)設(shè)置及上傳加速設(shè)置(可選), Extend為自定義擴(kuò)展設(shè)置,MessageCallback為消息回調(diào)設(shè)置,AccelerateConfig為上傳加速設(shè)置(上傳加速功能需要先申請(qǐng)開通后才能使用)*/
        //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 視頻分類ID(可選) */
    //request.setCateId(0);
    /* 視頻標(biāo)簽,多個(gè)用逗號(hào)分隔(可選) */
    //request.setTags("標(biāo)簽1,標(biāo)簽2");
    /* 視頻描述(可選)*/
    //request.setDescription("視頻描述");
    /* 封面圖片(可選)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板組ID(可選)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e5****");
    /* 工作流ID(可選)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存儲(chǔ)區(qū)域(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟默認(rèn)上傳進(jìn)度回調(diào) */
    //request.setPrintProgress(false);
    /* 設(shè)置自定義上傳進(jìn)度回調(diào)(必須繼承 VoDProgressListener)*/
    /*默認(rèn)關(guān)閉。如果開啟了這個(gè)功能,上傳過(guò)程中服務(wù)端會(huì)在日志中返回上傳詳情。如果不需要接收此消息,需關(guān)閉此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 設(shè)置您實(shí)現(xiàn)的生成STS信息的接口實(shí)現(xiàn)類*/
    // request.setVoDRefreshSTSTokenListener(new RefreshSTSTokenImpl());
    /* 設(shè)置應(yīng)用ID*/
    //request.setAppId("app-100****");
    /* 點(diǎn)播服務(wù)接入點(diǎn) */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署區(qū)域*/
    // request.setEcsRegionId("cn-shanghai");

    /* 配置代理訪問(wèn)(可選) */
    //OSSConfig ossConfig = new OSSConfig();
    /* <必填>設(shè)置代理服務(wù)器主機(jī)地址 */
    //ossConfig.setProxyHost("<yourProxyHost>");
    /* <必填>設(shè)置代理服務(wù)器端口 */
    //ossConfig.setProxyPort(-1);
    /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認(rèn)為HTTP */
    //ossConfig.setProtocol("HTTP");
    /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認(rèn)為aliyun-sdk-java */
    //ossConfig.setUserAgent("<yourUserAgent>");
    /* 設(shè)置代理服務(wù)器驗(yàn)證的用戶名,https協(xié)議時(shí)需要填 */
    //ossConfig.setProxyUsername("<yourProxyUserName>");
    /* 設(shè)置代理服務(wù)器驗(yàn)證的密碼,https協(xié)議時(shí)需要填 */
    //ossConfig.setProxyPassword("<yourProxyPassword>");
    //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadVideoResponse response = uploader.uploadVideo(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n");  //請(qǐng)求視頻點(diǎn)播服務(wù)的請(qǐng)求ID
    if (response.isSuccess()) {
    System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
    /* 如果設(shè)置回調(diào)URL無(wú)效,不影響視頻上傳,可以返回VideoId同時(shí)會(huì)返回錯(cuò)誤碼。其他情況上傳失敗時(shí),VideoId為空,此時(shí)需要根據(jù)返回錯(cuò)誤碼分析具體錯(cuò)誤原因 */
    System.out.print("VideoId=" + response.getVideoId() + "\n");
    System.out.print("ErrorCode=" + response.getCode() + "\n");
    System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
    }

    /**
    * URL網(wǎng)絡(luò)流上傳。支持?jǐn)帱c(diǎn)續(xù)傳,最大支持48.8TB的單個(gè)文件。
    * 該上傳方式需要先將網(wǎng)絡(luò)文件下載到本地磁盤,再進(jìn)行上傳,所以要保證本地磁盤有充足的空間。
    * 當(dāng)您設(shè)置的URL中不包括文件擴(kuò)展名時(shí),需要單獨(dú)設(shè)置fileExtension,表示文件擴(kuò)展名。
    * @param accessKeyId
    * @param accessKeySecret
    * @param title
    * @param fileExtension
    * @param url
    */
    private static void testUploadURLStream(String accessKeyId, String accessKeySecret, String title, String url, String fileExtension) {
    UploadURLStreamRequest request = new UploadURLStreamRequest(accessKeyId, accessKeySecret, title, url);

    /* 文件擴(kuò)展名*/
    request.setFileExtension(fileExtension);
    /* 網(wǎng)絡(luò)文件下載連接超時(shí),單位毫秒,0-表示不限制*/
    request.setDownloadConnectTimeout(1000);
    /* 網(wǎng)絡(luò)文件下載讀取超時(shí),單位毫秒,0-表示不限制*/
    request.setDownloadReadTimeout(0);
    /* 網(wǎng)絡(luò)文件下載后保存的本地目錄*/
    request.setLocalDownloadFilePath("/Users/download");
    /* 是否顯示水印(可選),指定模板組ID時(shí),根據(jù)模板組配置確定是否顯示水印*/
    //request.setShowWaterMark(true);
    /* 自定義消息回調(diào)設(shè)置及上傳加速設(shè)置(可選),Extend為自定義擴(kuò)展設(shè)置,MessageCallback為消息回調(diào)設(shè)置,AccelerateConfig為上傳加速設(shè)置(上傳加速功能需要先申請(qǐng)開通后才能使用) */
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 視頻分類ID(可選) */
    //request.setCateId(0);
    /* 視頻標(biāo)簽,多個(gè)用逗號(hào)分隔(可選) */
    //request.setTags("標(biāo)簽1,標(biāo)簽2");
    /* 視頻描述(可選) */
    //request.setDescription("視頻描述");
    /* 封面圖片(可選)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板組ID(可選)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流ID(可選)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存儲(chǔ)區(qū)域(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟默認(rèn)上傳進(jìn)度回調(diào) */
    //request.setPrintProgress(true);
    /* 設(shè)置自定義上傳進(jìn)度回調(diào) (必須繼承 VoDProgressListener)*/
    /*默認(rèn)關(guān)閉。如果開啟了這個(gè)功能,上傳過(guò)程中服務(wù)端會(huì)在日志中返回上傳詳情。如果不需要接收此消息,需關(guān)閉此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 設(shè)置應(yīng)用ID*/
    //request.setAppId("app-100****");
    /* 點(diǎn)播服務(wù)接入點(diǎn) */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署區(qū)域*/
    // request.setEcsRegionId("cn-shanghai");

    /* 配置代理訪問(wèn)(可選) */
    //OSSConfig ossConfig = new OSSConfig();
    /* <必填>設(shè)置代理服務(wù)器主機(jī)地址 */
    //ossConfig.setProxyHost("<yourProxyHost>");
    /* <必填>設(shè)置代理服務(wù)器端口 */
    //ossConfig.setProxyPort(-1);
    /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認(rèn)為HTTP */
    //ossConfig.setProtocol("HTTP");
    /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認(rèn)為aliyun-sdk-java */
    //ossConfig.setUserAgent("<yourUserAgent>");
    /* 設(shè)置代理服務(wù)器驗(yàn)證的用戶名,https協(xié)議時(shí)需要填 */
    //ossConfig.setProxyUsername("<yourProxyUserName>");
    /* 設(shè)置代理服務(wù)器驗(yàn)證的密碼,https協(xié)議時(shí)需要填 */
    //ossConfig.setProxyPassword("<yourProxyPassword>");
    //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadURLStreamResponse response = uploader.uploadURLStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n"); //請(qǐng)求視頻點(diǎn)播服務(wù)的請(qǐng)求ID
    if (response.isSuccess()) {
    System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
    /* 如果設(shè)置回調(diào)URL無(wú)效,不影響視頻上傳,可以返回VideoId同時(shí)會(huì)返回錯(cuò)誤碼。其他情況上傳失敗時(shí),VideoId為空,此時(shí)需要根據(jù)返回錯(cuò)誤碼分析具體錯(cuò)誤原因 */
    System.out.print("VideoId=" + response.getVideoId() + "\n");
    System.out.print("ErrorCode=" + response.getCode() + "\n");
    System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
    }

    /**
    * 文件流上傳接口
    *
    * @param accessKeyId
    * @param accessKeySecret
    * @param title
    * @param fileName
    */
    private static void testUploadFileStream(String accessKeyId, String accessKeySecret, String title, String fileName) {
    UploadFileStreamRequest request = new UploadFileStreamRequest(accessKeyId, accessKeySecret, title, fileName);
    /* 是否使用默認(rèn)水印(可選),指定模板組ID時(shí),根據(jù)模板組配置確定是否使用默認(rèn)水印*/
    //request.setShowWaterMark(true);
    /* 自定義消息回調(diào)設(shè)置及上傳加速設(shè)置(可選),Extend為自定義擴(kuò)展設(shè)置,MessageCallback為消息回調(diào)設(shè)置,AccelerateConfig為上傳加速設(shè)置(上傳加速功能需要先申請(qǐng)開通后才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 視頻分類ID(可選)*/
    //request.setCateId(0);
    /* 視頻標(biāo)簽,多個(gè)用逗號(hào)分隔(可選) */
    //request.setTags("標(biāo)簽1,標(biāo)簽2");
    /* 視頻描述(可選)*/
    //request.setDescription("視頻描述");
    /* 封面圖片(可選)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板組ID(可選)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流ID(可選)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存儲(chǔ)區(qū)域(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟默認(rèn)上傳進(jìn)度回調(diào) */
    //request.setPrintProgress(true);
    /* 設(shè)置自定義上傳進(jìn)度回調(diào)(必須繼承 VoDProgressListener)*/
    /*默認(rèn)關(guān)閉。如果開啟了這個(gè)功能,上傳過(guò)程中服務(wù)端會(huì)在日志中返回上傳詳情。如果不需要接收此消息,需關(guān)閉此功能*/
    //request.setProgressListener(new PutObjectProgressListener());
    /* 設(shè)置應(yīng)用ID*/
    //request.setAppId("app-100****");
    /* 點(diǎn)播服務(wù)接入點(diǎn) */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署區(qū)域*/
    // request.setEcsRegionId("cn-shanghai");

    /* 配置代理訪問(wèn)(可選) */
    //OSSConfig ossConfig = new OSSConfig();
    /* <必填>設(shè)置代理服務(wù)器主機(jī)地址 */
    //ossConfig.setProxyHost("<yourProxyHost>");
    /* <必填>設(shè)置代理服務(wù)器端口 */
    //ossConfig.setProxyPort(-1);
    /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認(rèn)為HTTP */
    //ossConfig.setProtocol("HTTP");
    /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認(rèn)為aliyun-sdk-java */
    //ossConfig.setUserAgent("<yourUserAgent>");
    /* 設(shè)置代理服務(wù)器驗(yàn)證的用戶名,https協(xié)議時(shí)需要填 */
    //ossConfig.setProxyUsername("<yourProxyUserName>");
    /* 設(shè)置代理服務(wù)器驗(yàn)證的密碼,https協(xié)議時(shí)需要填 */
    //ossConfig.setProxyPassword("<yourProxyPassword>");
    //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadFileStreamResponse response = uploader.uploadFileStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n"); //請(qǐng)求視頻點(diǎn)播服務(wù)的請(qǐng)求ID
    if (response.isSuccess()) {
    System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else {
    /* 如果設(shè)置回調(diào)URL無(wú)效,不影響視頻上傳,可以返回VideoId同時(shí)會(huì)返回錯(cuò)誤碼。其他情況上傳失敗時(shí),VideoId為空,此時(shí)需要根據(jù)返回錯(cuò)誤碼分析具體錯(cuò)誤原因 */
    System.out.print("VideoId=" + response.getVideoId() + "\n");
    System.out.print("ErrorCode=" + response.getCode() + "\n");
    System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
    }

    /**
    * 流式上傳接口
    *
    * @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);
    /* 是否使用默認(rèn)水印(可選),指定模板組ID時(shí),根據(jù)模板組配置確定是否使用默認(rèn)水印*/
    //request.setShowWaterMark(true);
    /* 自定義消息回調(diào)設(shè)置及上傳加速設(shè)置(可選), Extend為自定義擴(kuò)展設(shè)置,MessageCallback為消息回調(diào)設(shè)置,AccelerateConfig為上傳加速設(shè)置(上傳加速功能需要先申請(qǐng)開通后才能使用)*/
    //request.setUserData("{\"Extend\":{\"test\":\"www\",\"localId\":\"xxxx\"},\"MessageCallback\":{\"CallbackType\":\"http\",\"CallbackURL\":\"http://example.aliyundoc.com\"},\"AccelerateConfig\":{\"Type\":\"oss\",\"Domain\":\"****Bucket.oss-accelerate.aliyuncs.com\"}}");
    /* 視頻分類ID(可選) */
    //request.setCateId(0);
    /* 視頻標(biāo)簽,多個(gè)用逗號(hào)分隔(可選) */
    //request.setTags("標(biāo)簽1,標(biāo)簽2");
    /* 視頻描述(可選)*/
    //request.setDescription("視頻描述");
    /* 封面圖片(可選)*/
    //request.setCoverURL("http://cover.example.com/image_01.jpg");
    /* 模板組ID(可選)*/
    //request.setTemplateGroupId("8c4792cbc8694e7084fd5330e56****");
    /* 工作流ID(可選)*/
    //request.setWorkflowId("d4430d07361f0*be1339577859b0****");
    /* 存儲(chǔ)區(qū)域(可選)*/
    //request.setStorageLocation("in-201703232118266-5sejd****.oss-cn-shanghai.aliyuncs.com");
    /* 開啟默認(rèn)上傳進(jìn)度回調(diào) */
    // request.setPrintProgress(true);
    /* 設(shè)置自定義上傳進(jìn)度回調(diào)(必須繼承 VoDProgressListener) */
    /*默認(rèn)關(guān)閉。如果開啟了這個(gè)功能,上傳過(guò)程中服務(wù)端會(huì)在日志中返回上傳詳情。如果不需要接收此消息,需關(guān)閉此功能*/
    // request.setProgressListener(new PutObjectProgressListener());
    /* 設(shè)置應(yīng)用ID*/
    //request.setAppId("app-100****");
    /* 點(diǎn)播服務(wù)接入點(diǎn) */
    //request.setApiRegionId("cn-shanghai");
    /* ECS部署區(qū)域*/
    // request.setEcsRegionId("cn-shanghai");

    /* 配置代理訪問(wèn)(可選) */
    //OSSConfig ossConfig = new OSSConfig();
    /* <必填>設(shè)置代理服務(wù)器主機(jī)地址 */
    //ossConfig.setProxyHost("<yourProxyHost>");
    /* <必填>設(shè)置代理服務(wù)器端口 */
    //ossConfig.setProxyPort(-1);
    /* 設(shè)置連接OSS所使用的協(xié)議(HTTP或HTTPS),默認(rèn)為HTTP */
    //ossConfig.setProtocol("HTTP");
    /* 設(shè)置用戶代理,指HTTP的User-Agent頭,默認(rèn)為aliyun-sdk-java */
    //ossConfig.setUserAgent("<yourUserAgent>");
    /* 設(shè)置代理服務(wù)器驗(yàn)證的用戶名,https協(xié)議時(shí)需要填 */
    //ossConfig.setProxyUsername("<yourProxyUserName>");
    /* 設(shè)置代理服務(wù)器驗(yàn)證的密碼,https協(xié)議時(shí)需要填 */
    //ossConfig.setProxyPassword("<yourProxyPassword>");
    //request.setOssConfig(ossConfig);

    UploadVideoImpl uploader = new UploadVideoImpl();
    UploadStreamResponse response = uploader.uploadStream(request);
    System.out.print("RequestId=" + response.getRequestId() + "\n");  //請(qǐng)求視頻點(diǎn)播服務(wù)的請(qǐng)求ID
    if (response.isSuccess()) {
    System.out.print("VideoId=" + response.getVideoId() + "\n");
    } else { //如果設(shè)置回調(diào)URL無(wú)效,不影響視頻上傳,可以返回VideoId同時(shí)會(huì)返回錯(cuò)誤碼。其他情況上傳失敗時(shí),VideoId為空,此時(shí)需要根據(jù)返回錯(cuò)誤碼分析具體錯(cuò)誤原因
    System.out.print("VideoId=" + response.getVideoId() + "\n");
    System.out.print("ErrorCode=" + response.getCode() + "\n");
    System.out.print("ErrorMessage=" + response.getMessage() + "\n");
    }
    }
    }

URL批量拉取上傳

通過(guò)UploadMediaByURL接口,將媒體文件通過(guò)公網(wǎng)訪問(wèn)的URL地址拉取并上傳到視頻點(diǎn)播的存儲(chǔ)地址。

示例Demo如下:

import com.aliyun.tea.*;

public class Sample {

    /**
     * <b>description</b> :
     * <p>使用AK&amp;SK初始化賬號(hào)Client</p>
     * @return Client
     * 
     * @throws Exception
     */
    public static com.aliyun.vod20170321.Client createClient() throws Exception {
        // 工程代碼泄露可能會(huì)導(dǎo)致 AccessKey 泄露,并威脅賬號(hào)下所有資源的安全性。以下代碼示例僅供參考。
        // 建議使用更安全的 STS 方式,更多鑒權(quán)訪問(wèn)方式請(qǐng)參見(jiàn):http://m.bestwisewords.com/document_detail/378657.html。
        com.aliyun.teaopenapi.models.Config config = new com.aliyun.teaopenapi.models.Config()
        // 必填,請(qǐng)確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_ID。
        .setAccessKeyId(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"))
        // 必填,請(qǐng)確保代碼運(yùn)行環(huán)境設(shè)置了環(huán)境變量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
        .setAccessKeySecret(System.getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
        // Endpoint 請(qǐng)參考 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 {
        java.util.List<String> args = java.util.Arrays.asList(args_);
        com.aliyun.vod20170321.Client client = Sample.createClient();
        com.aliyun.vod20170321.models.UploadMediaByURLRequest uploadMediaByURLRequest = new com.aliyun.vod20170321.models.UploadMediaByURLRequest();
        com.aliyun.teautil.models.RuntimeOptions runtime = new com.aliyun.teautil.models.RuntimeOptions();
        try {
            // 復(fù)制代碼運(yùn)行請(qǐng)自行打印 API 的返回值
            client.uploadMediaByURLWithOptions(uploadMediaByURLRequest, runtime);
        } catch (TeaException error) {
            // 此處僅做打印展示,請(qǐng)謹(jǐn)慎對(duì)待異常處理,在工程項(xiàng)目中切勿直接忽略異常。
            // 錯(cuò)誤 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);
            // 此處僅做打印展示,請(qǐng)謹(jǐn)慎對(duì)待異常處理,在工程項(xiàng)目中切勿直接忽略異常。
            // 錯(cuò)誤 message
            System.out.println(error.getMessage());
            // 診斷地址
            System.out.println(error.getData().get("Recommend"));
            com.aliyun.teautil.Common.assertAsString(error.message);
        }        
    }
}

基于OSS原生SDK

當(dāng)上傳SDK無(wú)法滿足業(yè)務(wù)需求(如開發(fā)語(yǔ)言不匹配)時(shí),開發(fā)者可以結(jié)合點(diǎn)播服務(wù)端SDK(獲取上傳憑證及地址)和OSS原生SDK(Base64解碼獲取到的上傳憑證及地址,然后調(diào)用OSS接口)完成上傳。

基于OSS服務(wù)端API(不推薦)

開發(fā)者也可以直接調(diào)用點(diǎn)播服務(wù)端接口獲取上傳地址和憑證,再調(diào)用OSS原生API完成上傳。考慮到上傳效率和出錯(cuò)概率等因素,一般不推薦這種方式。

常見(jiàn)問(wèn)題

  1. 為什么上傳文件一致處于上傳中?

    請(qǐng)排查是否由以下原因造成:

    • 原因一:URL批量拉取上傳為異步上傳,不保證時(shí)效性

    如果您是通過(guò)UploadMediaByURL - URL批量拉取上傳接口上傳,URL批量拉取上傳是異步任務(wù),非實(shí)時(shí),不保證時(shí)效性,一般提交后會(huì)在數(shù)小時(shí)甚至數(shù)天內(nèi)完成遷移上傳。

    • 原因二:只生成了上傳憑證,但沒(méi)有上傳文件

    如果您是通過(guò)調(diào)用CreateUploadVideo - 獲取音視頻上傳地址和憑證接口上傳,此接口僅用于獲取上傳憑證和創(chuàng)建媒資基礎(chǔ)信息,并非上傳文件,后續(xù)您還需要調(diào)用OSS能力完成上傳,完整的上傳步驟,請(qǐng)參見(jiàn)通過(guò)視頻點(diǎn)播API上傳媒體文件

    • 原因三:上傳文件過(guò)大導(dǎo)致上傳時(shí)間較長(zhǎng)

    請(qǐng)確認(rèn)上傳文件大小以及處于“上傳中”狀態(tài)的時(shí)間是否處于合理范圍。通過(guò)控制臺(tái)、上傳SDK和客戶端上傳工具等方式上傳文件時(shí),默認(rèn)會(huì)使用分片上傳,最大支持上傳48.8 TB的單個(gè)文件;上傳SDK同時(shí)也提供簡(jiǎn)單上傳功能,其最大支持上傳5 GB的單個(gè)文件。

    • 原因四:網(wǎng)絡(luò)問(wèn)題

    請(qǐng)確認(rèn)您的網(wǎng)絡(luò)帶寬是否符合預(yù)期。

  2. 使用IOS上傳SDK上傳失敗并報(bào)錯(cuò)Error Domain=NSCocoaErrorDomain

    上傳失敗并報(bào)錯(cuò)(錯(cuò)誤碼207,錯(cuò)誤信息Error Domain=NSCocoaErrorDomain),通常是由于讀取文件錯(cuò)誤,沒(méi)有權(quán)限導(dǎo)致。您可以通過(guò)以下方式解決:

    • 方式一:授予iOS上傳SDK讀取本地資源的權(quán)限。

    • 方式二:將本地資源存放到沙盒路徑下,再上傳。

  3. 使用URL批量拉取上傳時(shí)提示“The service is not open in current region”的錯(cuò)誤

    提示The service is not open in current region表示當(dāng)前服務(wù)地域暫不支持使用URL批量拉取上傳方式進(jìn)行上傳,URL批量拉取上傳目前僅支持在華東2(上海)新加坡地域使用。

    如果您非上述地域,建議您將音視頻文件下載到本地,然后再通過(guò)上傳SDK進(jìn)行上傳,詳情請(qǐng)參見(jiàn)上傳SDK概述

  4. 微信中使用JS SDK上傳存在兼容性問(wèn)題,無(wú)法正常上傳

    經(jīng)過(guò)排查由于微信瀏覽器對(duì)于H5存在兼容性問(wèn)題,需要將<input type="file" name="file" id="files" multiple="">中的 multiple=""參數(shù)去掉就可以正常上傳。

  5. 推流SDK特定分辨率時(shí)出現(xiàn)預(yù)覽頁(yè)面拉伸現(xiàn)象

    推流SDK在選擇推流分辨率為480p時(shí)預(yù)覽頁(yè)面出現(xiàn)拉伸的現(xiàn)象,但是實(shí)際推流是正常的。主要因?yàn)?80p對(duì)應(yīng)的分辨率為480×640,由于大多數(shù)手機(jī)屏幕均不支持該分辨率的比例導(dǎo)致出現(xiàn)拉伸的現(xiàn)象。

    解決辦法:修改預(yù)覽頁(yè)面surfaceview的比例,請(qǐng)將activity_push.xml內(nèi)容修改如下即可。

    imageimage

  6. Android Studio如何查看和導(dǎo)入aar包數(shù)據(jù)

    查看aar包數(shù)據(jù):將.aar文件后綴改成.zip并解壓,查看.class.xml.jar、圖片、文本等各種內(nèi)容。導(dǎo)入aar包數(shù)據(jù):

    1. 拷貝.aar文件到工程項(xiàng)目下,路徑一般為projectName/libs/,重新載入工程。image

    2. 在build.gradle根標(biāo)簽下添加本地倉(cāng)庫(kù)路徑,并在dependencies中添加編譯依賴。其中l(wèi)ibs目錄按照實(shí)際工程下的包引入文件夾名稱而定。在compile參數(shù)中,name的值為aar文件的名字,ext為文件的擴(kuò)展名。image

    3. 選擇 build > rebuild,重新構(gòu)建project。構(gòu)建完成之后,在工程的External Libraries中即可看到引入的aar包。image