【視頻點播最佳實踐】使用OSS SDK上傳視頻到點播

摘要: 場景 點播上傳SDK缺少須要的語言版本(如C/C++、Go等)或相應的功能(如網絡流上傳、追加上傳),能夠直接使用OSS的SDK進行上傳。 準備工做 確認已開通點播服務並完成了相關配置。確認已準備了阿里雲帳號AK,並授予了上傳權限。php

場景html

點播上傳SDK缺少須要的語言版本(如C/C++、Go等)或相應的功能(如網絡流上傳、追加上傳),能夠直接使用OSS的SDK進行上傳。git

準備工做github

確認已開通點播服務並完成了相關配置。
確認已準備了阿里雲帳號AK,並授予了上傳權限。json

上傳步驟api

圖片描述

1、訪問點播服務獲取上傳地址和上傳憑證安全

這一步還會建立視頻媒資記錄,返回視頻ID,請妥善保存,後續可根據視頻ID進行視頻播放、管理和AI處理等。網絡

2、對上傳地址(UploadAddress)和上傳憑證(UploadAuth)分別進行Base64解析,獲得OSS的上傳地址和受權信息。curl

UploadAddress字段Base64解碼後,獲得JSON格式字符串,包含字段以下:ide

圖片描述

UploadAuth字段Base64解碼後,獲得JSON格式字符串,包含字段以下:

圖片描述

3、調用OSS SDK將視頻文件上傳至指定的bucket中,注意使用STS Auth方式,且使用UploadAddress和UploadAuth進行初始化,不要使用本身的AK等信息。

代碼實現

核心代碼實現共分4步:

1.使用AK初始化VOD客戶端
2.獲取視頻上傳地址和憑證
3.使用上傳憑證和地址初始化OSS客戶端
4.上傳本地文件

可使用點播服務的接口SDK(JavaPHPPython.NET),或API(接口說明調用示例)獲取上傳地址和憑證。

使用OSS SDK在服務端上傳,目前支持以下版本:
OSS-Java-SDKOSS-PHP-SDKOSS-Python-SDKOSS-C-SDKOSS-Go-SDKOSS-Ruby-SDKOSS-.NET-SDK

客戶端上傳建議使用VOD的上傳SDK:VOD-Android-SDK、VOD-iOS-SDK、VOD-JavaScript-SDK;客戶端上傳時須要在服務端獲取上傳地址和憑證下發給客戶端,以確保數據安全。

PHP上傳示例

環境準備

PHP 5.3+,可經過php -v命令查看當前的PHP版本。
cURL 擴展,可經過php -m命令查看curl擴展是否已經安裝好。

安裝

1.在您的PHP項目中添加空文件夾 aliyun-php-sdk。

2.從 aliyun-openapi-php-sdk 下載整個源碼,解壓後拷貝 aliyun-php-sdk-core 和 aliyun-php-sdk-vod 兩個文件夾到 aliyun-php-sdk 目錄下。

3.從 aliyun-oss-php-sdk 下載最新的OSS PHP SDK的源碼,解壓ZIP文件後添加文件夾到 aliyun-php-sdk 目錄下。如下載 v.2.2.4 Source code (zip) 爲例,解壓後文件夾爲 aliyun-oss-php-sdk-2.2.4。

4.打開 aliyun-php-sdk/aliyun-php-sdk-core/Config.php 文件,找到「//config sdk auto load path.」,在這行下面添加:

Autoloader::addAutoloadPath("aliyun-php-sdk-vod");

5.在代碼中引用VOD和OSS的文件:

require_once './aliyun-php-sdk/aliyun-php-sdk-core/Config.php';   // 假定您的源碼文件和aliyun-php-sdk處於同一目錄。
require_once './aliyun-php-sdk/aliyun-oss-php-sdk-2.2.4/autoload.php';
use vod\Request\V20170321 as vod;
use OSS\OssClient;
use OSS\Core\OssException;

更多信息可參考VOD PHP SDK安裝OSS PHP SDK安裝

參考代碼

定義核心步驟的函數:

使用AK初始化VOD客戶端

function init_vod_client($accessKeyId, $accessKeySecret) {
    $regionId = 'cn-shanghai';     // 點播服務所在的Region,國內請填cn-shanghai,不要填寫別的區域
    $profile = DefaultProfile::getProfile($regionId, $accessKeyId, $accessKeySecret);
    return new DefaultAcsClient($profile);
}

獲取視頻上傳地址和憑證

function create_upload_video($vodClient) {
    $request = new vod\CreateUploadVideoRequest();
    $request->setTitle("視頻標題");        // 視頻標題(必填參數)
    $request->setFileName("文件名稱.mov"); // 視頻源文件名稱,必須包含擴展名(必填參數)
    $request->setDescription("視頻描述");  // 視頻源文件描述(可選)
    $request->setCoverURL("http://img.alicdn.com/tps/TB1qnJ1PVXXXXXCXXXXXXXXXXXX-700-700.png"); // 自定義視頻封面(可選)
    $request->setTags("標籤1,標籤2"); // 視頻標籤,多個用逗號分隔(可選)
    return $vodClient->getAcsResponse($request);
}

使用上傳憑證和地址初始化OSS客戶端(注意須要先Base64解碼並Json Decode再傳入)

function init_oss_client($uploadAuth, $uploadAddress) {
    $ossClient = new OssClient($uploadAuth['AccessKeyId'], $uploadAuth['AccessKeySecret'], $uploadAddress['Endpoint'], 
        false, $uploadAuth['SecurityToken']);
    $ossClient->setTimeout(86400*7);    // 設置請求超時時間,單位秒,默認是5184000秒, 建議不要設置過小,若是上傳文件很大,消耗的時間會比較長
    $ossClient->setConnectTimeout(10);  // 設置鏈接超時時間,單位秒,默認是10秒
    return $ossClient;
}

上傳本地文件

function upload_local_file($ossClient, $uploadAddress, $localFile) {
    return $ossClient->uploadFile($uploadAddress['Bucket'], $uploadAddress['FileName'], $localFile);
}

刷新上傳憑證

function refresh_upload_video($vodClient, $videoId) {
    $request = new vod\RefreshUploadVideoRequest();
    $request->setVideoId($videoId);
    return $vodClient->getAcsResponse($request);
}
執行完整流程(注意捕獲異常):
$accessKeyId = '<AccessKeyId>';                    // 您的AccessKeyId
$accessKeySecret = '<AccessKeySecret>';            // 您的AccessKeySecret
$localFile = '/Users/yours/Video/testVideo.flv';   // 須要上傳到VOD的本地視頻文件的完整路徑
try {
    // 初始化VOD客戶端並獲取上傳地址和憑證
    $vodClient = init_vod_client($accessKeyId, $accessKeySecret);
    $createRes = create_upload_video($vodClient);
    // 執行成功會返回VideoId、UploadAddress和UploadAuth
    $videoId = $createRes->VideoId;
    $uploadAddress = json_decode(base64_decode($createRes->UploadAddress), true);
    $uploadAuth = json_decode(base64_decode($createRes->UploadAuth), true);
    // 使用UploadAuth和UploadAddress初始化OSS客戶端
    $ossClient = init_oss_client($uploadAuth, $uploadAddress);
    // 上傳文件,注意是同步上傳會阻塞等待,耗時與文件大小和網絡上行帶寬有關
    //$result = upload_local_file($ossClient, $uploadAddress, $localFile);
    $result = multipart_upload_file($ossClient, $uploadAddress, $localFile);
    printf("Succeed, VideoId: %s", $videoId);
} catch (Exception $e) {
    // var_dump($e);
    printf("Failed, ErrorMessage: %s", $e->getMessage());
}

Demo下載

可下載完整的 PHP版上傳Demo源碼,更多使用信息請參考 OSS-PHP-SDK上傳文件。

爲了扶持更多創業者,下降入行門檻,視頻點播已在原有的視頻點播服務五個套餐包基礎上,推出了超值體驗套餐包。

只需9.9元便可得到10GB流量、50GB存儲、100分鐘轉碼,可供我的、小微企業門戶網站體驗使用。

圖片描述

點擊進入活動頁面,當即購買,完成支付

圖片描述

進入視頻點播產品頁面,點擊當即開通,開通視頻點播服務,進行初始化配置,用戶能夠在控制檯進行視頻上傳,轉碼設置、視頻管理和視頻預覽等操做。
圖片描述

另外,體驗完成後,阿里雲也爲提供了五個點播套餐包,供各類需求用戶選擇。

圖片描述

點擊查看購買詳情

閱讀更多幹貨好文,請關注掃描如下二維碼:

圖片描述

相關文章
相關標籤/搜索