全部產品
Search
文件中心

ApsaraVideo VOD:使用PHP SDK上傳檔案

更新時間:Jul 13, 2024

本文通過樣本詳細介紹如何使用服務端上傳SDK(PHP語言)將各類媒體檔案上傳至點播儲存。

整體說明

從內部邏輯角度看,PHP上傳SDK遵循點播服務端SDK的通用流程。詳情請參見上傳流程。從操作角度看,使用PHP上傳SDK的基礎流程如下:

  1. 完成前提條件。請參見前提條件

  2. 整合PHP上傳SDK。請參見整合PHP上傳SDK

  3. 實現上傳邏輯(主要是上傳資訊配置)。

  4. PHP上傳SDK預設服務存取點為cn-shanghai(上海), 若需要上傳媒體檔案到其他地區,可以通過AliyunVodUploader在初始化時指定地區,點播支援的服務存取點,請參見服務存取點

    以指定上傳地區為cn-beijing(北京)為例,配置樣本如下:

    $apiRegionId = 'cn-beijing';  //上傳目的地區域region
    $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret, $apiRegionId);

前提條件

  • 您已經開通了ApsaraVideo for VOD服務。開通步驟請參見開通ApsaraVideo for VOD服務

  • 您已經完成上傳相關的系統配置,包括啟用目標儲存地區的儲存地址和配置回調。操作指引請參見管理儲存Bucket回調設定

  • 您已準備好用於調用點播服務的帳號。為避免阿里雲帳號AccessKey泄露帶來的安全風險,推薦您建立RAM使用者並授予其VOD相關許可權。然後使用RAM使用者的AK對(AccessKey ID和AccessKey Secret)訪問點播服務。操作指引請參見建立RAM使用者並授權

  • 已配置環境變數ALIBABA_CLOUD_ACCESS_KEY_IDALIBABA_CLOUD_ACCESS_KEY_SECRET。具體操作,請參見在Linux、macOS和Windows系統配置環境變數

    重要
    • 阿里雲帳號的AccessKey擁有所有API的存取權限,建議您使用RAM使用者的AccessKey進行API訪問或日常營運。

    • 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。

  • (可選)如需使用STS臨時授權方式(阿里雲Security Token Service)訪問點播服務,請為RAM使用者建立角色並授予角色VOD相關許可權。操作指引請參見使用STS臨時授權方案上傳視頻

    說明

    STS臨時授權方式的適用情境請參見憑證方式與STS方式對比

整合PHP上傳SDK

  1. 下載PHP上傳SDK及範例程式碼VodUploadSDK-PHP_1.0.3.zip,請參見上傳SDK

    說明
    • 此處以SDK1.0.3版本舉例說明。其他版本請根據實際情況操作。

    • SDK及範例程式碼解壓後的詳細目錄說明,請參見下文目錄說明

  2. 解壓VodUploadSDK-PHP_1.0.3.zip,將VodUploadSDK-PHP_1.0.3目錄下的voduploadsdk複製到您的專案中。

更新PHP上傳SDK

若發現新的介面或已有介面新的功能在當前SDK沒有,請下載最新的PHP上傳SDK覆蓋到本地SDK檔案。更多資訊,請參見上傳SDK

說明

您可以開啟voduploadsdk目錄下的ChangeLog.txt檔案查看當前SDK的版本號碼和發布日期。

PHP上傳SDK目錄說明

/VodUploadSDK-PHP_1.0.3.zip解壓目錄/VodUploadSDK-PHP_1.0.3/voduploadsdk/uploader

  • UploadVideoRequest.php

    目錄

    說明

    UploadVideoRequest

    上傳視頻的請求類,欄位請參見擷取音視頻上傳地址和憑證

  • UploadImageRequest.php

    目錄

    說明

    UploadImageRequest

    上傳圖片的請求類,欄位請參見擷取圖片上傳地址和憑證

  • UploadAttachedMediaRequest.php

    目錄

    說明

    UploadAttachedMediaRequest

    上傳輔助媒資的請求類,欄位請參見擷取輔助媒資上傳地址和憑證

  • AliyunVodUploader.php

    目錄

    說明

    __construct

    可設定上傳的AccessKey以及ApsaraVideo for VOD中心和訪問網域名稱。請參見AccessKey點播地區標識

    uploadLocalVideo

    上傳本地視頻的介面。

    uploadWebVideo

    上傳網路視頻的介面。

    uploadLocalImage

    上傳本地圖片。

    uploadWebImage

    上傳網狀圖片。

    uploadLocalAttachedMedia

    上傳本地輔助媒資檔案。

    uploadWebAttachedMedia

    上傳網路輔助媒資檔案。

    uploadLocalM3u8

    上傳本地m3u8檔案。

    uploadWebM3u8

    上傳網路m3u8檔案。

    parseM3u8File

    解析m3u8索引檔案得到分區地址清單。

    setEcsRegionId

    設定上傳指令碼部署的ECS地區(如果有),如果與ApsaraVideo for VOD儲存同一地區會自動啟用內網上傳。

    setEnableSSL

    是否啟用SSL(網路請求使用HTTPS),預設不啟用,以避免相關擴充未安裝或配置異常時無法使用。

    uploadProgressCallback

    上傳進度回呼函數,可重寫。

  • AliyunVodUtils.php

    目錄

    說明

    AliyunVodUtils

    工具類,提供截取字串、擷取副檔名、擷取檔案名稱等靜態函數。

    AliyunVodLog

    實現簡單列印的日誌類,logSwitch為日誌開關。

    AliyunVodDownloader

    實現下載網路檔案。

    AliyunVodReportUpload

    實現上傳進度彙報。

    AliyunVodError

    定義錯誤碼。

/VodUploadSDK-PHP_1.0.3.zip解壓目錄/VodUploadSDK-PHP_1.0.3/voduploadsdk

  • aliyun-php-sdk-core:上傳SDK依賴的基礎類,封裝了阿里雲API簽名和HTTP請求等。

  • aliyun-php-sdk-vod:ApsaraVideo for VOD的服務端介面SDK,封裝了ApsaraVideo for VODAPI的請求。

  • aliyun-php-sdk-oss:上傳SDK依賴的OSS類,封裝了OSS上傳等操作。

/VodUploadSDK-PHP_1.0.3.zip解壓目錄/VodUploadSDK-PHP_1.0.3/samples

  • uploadVideo.php:上傳視頻的範例程式碼。

  • uploadImage.php:上傳圖片的範例程式碼。

  • uploadAttachedMedia.php:上傳輔助媒資的範例程式碼。

情境一:上傳音視頻

普通音視頻

音視頻上傳目前支援以下類型檔案上傳:

  • 上傳本地檔案,使用分區上傳,最大支援48.8 TB的單個檔案,不支援斷點續傳。請參見testUploadLocalVideo函數。

  • 上傳網路檔案,可指定檔案URL進行上傳,最大支援48.8 TB的單個檔案。該上傳方式需要先將網路檔案下載到本地磁碟,再進行上傳,所以要保證本地磁碟有充足的空間。請參見testUploadWebVideo函數。

展開查看範例程式碼

<?php
/**
 * Created by Aliyun ApsaraVideo VOD.
 */
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
//測試上傳本地視頻
function testUploadLocalVideo($accessKeyId, $accessKeySecret, $filePath)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadVideoRequest = new UploadVideoRequest($filePath, 'testUploadLocalVideo via PHP-SDK');
        //$uploadVideoRequest->setCateId(1);
        //CoverURL樣本:http://example.com/example****.jpg
        //$uploadVideoRequest->setCoverURL("<your CoverURL>");
        //$uploadVideoRequest->setTags('test1,test2');
        //$uploadVideoRequest->setStorageLocation('outin-xx.oss-cn-beijing.aliyuncs.com');
        //$uploadVideoRequest->setTemplateGroupId('6ae347b0140181ad371d197ebe289****');
        $userData = array(
            //Callback樣本:https://demo.aliyundoc.com/ProcessMessageCallback
            "MessageCallback"=>array("CallbackURL"=>"<your callback URL>"),
            "Extend"=>array("localId"=>"xxx", "test"=>"www")
        );
        $uploadVideoRequest->setUserData(json_encode($userData));
        $res = $uploader->uploadLocalVideo($uploadVideoRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadLocalVideo Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
    }
}
// 測試上傳網路視頻
function testUploadWebVideo($accessKeyId, $accessKeySecret, $fileURL)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadVideoRequest = new UploadVideoRequest($fileURL, 'testUploadWebVideo via PHP-SDK');
        $res = $uploader->uploadWebVideo($uploadVideoRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadWebVideo Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
    }
}

####  執行測試代碼   ####
// 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
// 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
// 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');

//$localFilePath = 'C:\test\sample.mp4';
$localFilePath = '/opt/video/sample.mp4';
//testUploadLocalVideo($accessKeyId, $accessKeySecret, $localFilePath);

//webFileURL樣本:http://example-bucket-****.cn-shanghai.aliyuncs.com/b55b904bc612463b812990b7c8cc****/daa30814c0c340cf8199926f78aa****-a0bc05ba62c3e95cc672e88b8281****-ld.mp4?auth_key=1608774986-0-0-c56acd302bea0c331370d8ed6865****
$webFileURL = '<your webFileURL>';
testUploadWebVideo($accessKeyId, $accessKeySecret, $webFileURL);

M3U8視頻檔案

部分程式碼範例如下所示:

展開查看範例程式碼

<?php
/**
 * Created by Aliyun ApsaraVideo VOD.
 */
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
// 測試上傳本地m3u8視頻
function testUploadLocalM3u8($accessKeyId, $accessKeySecret, $m3u8FilePath)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadVideoRequest = new UploadVideoRequest($m3u8FilePath, 'testUploadLocalM3u8 via PHP-SDK');
        // 調用介面解析m3u8的分區地址清單,如果解析結果不準確,請自行拼接地址清單(預設分區檔案和m3u8檔案位於同一目錄)
        $sliceFiles = $uploader->parseM3u8File($m3u8FilePath);
        //print_r($sliceFiles);
        $res = $uploader->uploadLocalM3u8($uploadVideoRequest, $sliceFiles);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadLocalM3u8 Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
    }
}

// 測試上傳網路m3u8視頻
function testUploadWebM3u8($accessKeyId, $accessKeySecret, $m3u8FileUrl)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadVideoRequest = new UploadVideoRequest($m3u8FileUrl, 'testUploadWebM3u8 via PHP-SDK');
        // 調用介面解析m3u8的分區地址清單,如果解析結果不準確,請自行拼接地址清單(預設分區檔案和m3u8檔案位於同一目錄)
        $sliceFileUrls = $uploader->parseM3u8File($m3u8FileUrl);
        //print_r($sliceFileUrls);
        $res = $uploader->uploadWebM3u8($uploadVideoRequest, $sliceFileUrls);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadWebM3u8 Failed, ErrorMessage: %s\n Location: %s %s\n Trace: %s\n",
            $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
    }
}
####  執行測試代碼   ####
// 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
// 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
// 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localM3u8FilePath = '/opt/video/m3u8/sample.m3u8';
//testUploadLocalM3u8($accessKeyId, $accessKeySecret, $localM3u8FilePath);

//webM3u8FileURL樣本:http://example-bucket-****.cn-shanghai.aliyuncs.com/b55b904bc612463b812990b7c8cc****/daa30814c0c340cf8199926f78aa****-195a25af366b5edae324c47e99a0****-ld.m3u8?auth_key=1608775606-0-0-9fb038deaecd009dadd86721c585****
$webM3u8FileURL = '<your webM3u8FileURL>';
//testUploadWebM3u8($accessKeyId, $accessKeySecret, $webM3u8FileURL);

情境二:上傳圖片

展開查看範例程式碼

展開查看範例程式碼

<?php
/**
 * Created by Aliyun ApsaraVideo VoD.
 * User: https://www.aliyun.com/product/vod
 */

require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';

date_default_timezone_set('PRC');

// 測試上傳本地圖片
function testUploadLocalImage($accessKeyId, $accessKeySecret, $filePath)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadImageRequest = new UploadImageRequest($filePath, 'testUploadLocalImage via PHP-SDK');
        $uploadImageRequest->setCateId(1000009458);
        $res = $uploader->uploadLocalImage($uploadImageRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadLocalImage Failed, ErrorMessage: %s\n", $e->getMessage());
    }

}

// 測試上傳網狀圖片
function testUploadWebImage($accessKeyId, $accessKeySecret, $fileURL)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadImageRequest = new UploadImageRequest($fileURL, 'testUploadWebImage via PHP-SDK');
        $uploadImageRequest->setCateId(1000009458);
        $res = $uploader->uploadWebImage($uploadImageRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadWebImage Failed, ErrorMessage: %s\n", $e->getMessage());
    }

}



####  執行測試代碼   ####
// 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
// 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
// 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');

$localFilePath = '/opt/image/test-image.jpg';
//testUploadLocalImage($accessKeyId, $accessKeySecret, $localFilePath);

$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif';
testUploadWebImage($accessKeyId, $accessKeySecret, $webFileURL);

情境三:上傳輔助媒資檔案

部分程式碼範例如下所示:

展開查看範例程式碼

展開查看範例程式碼

<?php
/**
 * Created by Aliyun ApsaraVideo VoD.
 * User: https://www.aliyun.com/product/vod
 */

require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';

date_default_timezone_set('PRC');

// 測試上傳本地輔助媒資檔案
function testUploadLocalAttachedMedia($accessKeyId, $accessKeySecret, $filePath)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadAttachedRequest = new UploadAttachedMediaRequest($filePath, 'watermark',
            'testUploadLocalAttachedMedia via PHP-SDK');
        //$uploadAttachedRequest->setCateId(100000****);
        $res = $uploader->uploadLocalAttachedMedia($uploadAttachedRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadLocalAttachedMedia Failed, ErrorMessage: %s\n", $e->getMessage());
    }

}

// 測試上傳網路輔助媒資檔案
function testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $fileURL)
{
    try {
        $uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
        $uploadAttachedRequest = new UploadAttachedMediaRequest($fileURL, 'watermark',
            'testUploadWebAttachedMedia via PHP-SDK');
        //$uploadAttachedRequest->setCateId(100000****);
        $res = $uploader->uploadWebAttachedMedia($uploadAttachedRequest);
        print_r($res);
    } catch (Exception $e) {
        printf("testUploadWebAttachedMedia Failed, ErrorMessage: %s\n", $e->getMessage());
    }

}


####  執行測試代碼   ####
// 阿里雲帳號AccessKey擁有所有API的存取權限,建議您使用RAM使用者進行API訪問或日常營運。
// 強烈建議不要把AccessKey ID和AccessKey Secret儲存到工程代碼裡,否則可能導致AccessKey泄露,威脅您帳號下所有資源的安全。
// 本樣本通過從環境變數中讀取AccessKey,來實現API訪問的身分識別驗證。運行程式碼範例前,請配置環境變數ALIBABA_CLOUD_ACCESS_KEY_ID和ALIBABA_CLOUD_ACCESS_KEY_SECRET。
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');

$localFilePath = '/opt/image/test.png';
//testUploadLocalAttachedMedia($accessKeyId, $accessKeySecret, $localFilePath);

$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif';
testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $webFileURL);

相關文檔

媒體上傳概述

STS SDK概覽