このトピックでは、PHP 用のサーバー側アップロードソフトウェア開発キット (SDK) を使用して、さまざまなメディアファイルを ApsaraVideo VOD のストレージにアップロードする方法について、詳細な例を挙げて説明します。
概要
説明 PHP 開発では、B/S (ブラウザ/サーバー) アーキテクチャを推奨します。
PHP アップロード SDK は、ApsaraVideo VOD のサーバー側 SDK の一般的なプロセスに従います。詳細については、「アップロードプロセス」をご参照ください。PHP アップロード SDK を使用する基本的なプロセスは次のとおりです。
前提条件を満たします。詳細については、「前提条件」をご参照ください。
PHP アップロード SDK を統合します。詳細については、「PHP アップロード SDK の統合」をご参照ください。
アップロード情報を設定することを含む、アップロードロジックを実装します。
PHP アップロード SDK のデフォルトのエンドポイントは cn-shanghai (中国 (上海)) です。他のリージョンにメディアファイルをアップロードするには、AliyunVodUploader を初期化する際にリージョンを指定できます。ApsaraVideo VOD がサポートするエンドポイントの詳細については、「エンドポイント」をご参照ください。
次の例は、アップロードリージョンを cn-beijing (中国 (北京)) に設定する方法を示しています。
$apiRegionId = 'cn-beijing'; // アップロード先のリージョン
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret, $apiRegionId);
前提条件
-
ApsaraVideo VOD が有効化されていること。詳細については、「ApsaraVideo VOD の有効化」をご参照ください。
-
指定されたリージョンのストレージパスやコールバック設定など、アップロードに必要なシステム設定が構成されていること。詳細については、「ストレージバケットの管理」および「コールバックの設定」をご参照ください。
-
ApsaraVideo VOD にアクセスするための RAM ユーザーが作成されていること。Alibaba Cloud アカウントの AccessKey ペアの漏洩によるセキュリティリスクを防ぐため、RAM ユーザーを作成し、その RAM ユーザーに ApsaraVideo VOD へのアクセスに必要な権限を付与することを推奨します。その後、RAM ユーザーの AccessKey ペア を使用して ApsaraVideo VOD にアクセスできます。詳細については、「RAM ユーザーの作成と権限付与」をご参照ください。
ALIBABA_CLOUD_ACCESS_KEY_ID および ALIBABA_CLOUD_ACCESS_KEY_SECRET 環境変数が設定されていること。詳細については、「Linux、macOS、Windows で環境変数を設定する」をご参照ください。
重要 Alibaba Cloud アカウントの AccessKey ペアは、すべての API 操作に対する権限を持っています。API 操作の呼び出しや日常の O&M (運用保守) には、RAM ユーザーの AccessKey ペアを使用することを推奨します。
AccessKey ID と AccessKey Secret をプロジェクトコードにハードコーディングしないでください。ハードコーディングすると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
-
任意。セキュリティトークンサービス (STS) を使用して ApsaraVideo VOD にアクセスする場合、RAM ユーザー用のロールを作成し、そのロールに ApsaraVideo VOD へのアクセスに必要な権限を付与します。詳細については、「STS トークンの取得」をご参照ください。
PHP アップロード SDK の統合
SDK とデモをダウンロードします。
VodUploadSDK-PHP_1.0.3.zip を解凍し、VodUploadSDK-PHP_1.0.3 ディレクトリから voduploadsdk フォルダをプロジェクトにコピーします。
PHP アップロード SDK のディレクトリ構造
パス:VodUploadSDK-PHP_1.0.3/voduploadsdk/uploader
パス:VodUploadSDK-PHP_1.0.3/voduploadsdk
aliyun-php-sdk-core:アップロード SDK のベースクラスを提供する依存関係です。Alibaba Cloud API の署名、HTTP リクエスト、その他のコア機能をカプセル化します。
aliyun-php-sdk-vod:ApsaraVideo VOD のサーバー側 API SDK です。ApsaraVideo VOD API のリクエストをカプセル化します。
aliyun-php-sdk-oss:アップロード SDK の OSS クラスを提供する依存関係です。OSS のアップロード操作やその他の関連機能をカプセル化します。
パス:VodUploadSDK-PHP_1.0.3/samples
uploadVideo.php:動画をアップロードするためのサンプルコードです。
uploadImage.php:画像をアップロードするためのサンプルコードです。
uploadAttachedMedia.php:補助メディアアセットをアップロードするためのサンプルコードです。
シナリオ 1:音声ファイルと動画ファイルのアップロード
標準の音声ファイルと動画ファイル
以下の種類の音声ファイルと動画ファイルをアップロードできます。
マルチパートアップロードを使用してローカルファイルをアップロードできます。単一ファイルのサイズは最大 48.8 TB です。レジュームアップロードはサポートされていません。詳細については、`testUploadLocalVideo` 関数をご参照ください。
ファイル URL を指定して Web ファイルをアップロードできます。単一ファイルのサイズは最大 48.8 TB です。このメソッドでは、Web ファイルをアップロードする前にローカルディスクにダウンロードする必要があります。ローカルディスクに十分な空き容量があることを確認してください。詳細については、`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(
// コールバックの例: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());
}
}
// Web 動画のアップロードをテストします。
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());
}
}
#### テストコードの実行 ####
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API アクセスや日常の O&M には RAM ユーザーの AccessKey ペアを使用してください。
// 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/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');
// API を呼び出して 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());
}
}
// Web M3U8 動画のアップロードをテストします。
function testUploadWebM3u8($accessKeyId, $accessKeySecret, $m3u8FileUrl)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($m3u8FileUrl, 'testUploadWebM3u8 via PHP-SDK');
// API を呼び出して 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());
}
}
#### テストコードの実行 ####
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API アクセスや日常の O&M には RAM ユーザーの AccessKey ペアを使用してください。
// 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);
アップロードアクセラレーション
大容量ファイル (GB または TB 単位) のアップロードや、リージョンをまたいだアップロード (例えば、中国本土から シンガポール リージョンのストレージへのアップロードなど) を行う場合は、アップロードアクセラレーション機能を有効にできます。詳細については、「有効化の方法」をご参照ください。この機能を有効にした後、アップロード設定の UserData オブジェクトに AccelerateConfig キーと値のペア を追加する必要があります。UserData オブジェクトが存在しない場合は作成してください。次のコードは例です。
$userData = array(
"AccelerateConfig"=>array("Type"=>"oss","Domain"=>"****Bucket.oss-accelerate.aliyuncs.com"),
);
$uploadVideoRequest->setUserData(json_encode($userData));
パラメーターの説明
名前 | タイプ | 説明 |
Type | string | 有効にするアップロードアクセラレーションのタイプです。`oss` のみがサポートされています。 |
Domain | string | ユーザーのバケットのアクセラレーションエンドポイントです。デフォルトで HTTPS が使用されます。
説明 有効化後に割り当てられたアクセラレーションエンドポイントを使用してください。例:`vod-*******.oss-accelerate.aliyuncs.com`。 |
シナリオ 2:画像のアップロード
サンプルコードの表示
<?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());
}
}
// Web 画像のアップロードをテストします。
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());
}
}
#### テストコードの実行 ####
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API アクセスや日常の O&M には RAM ユーザーの AccessKey ペアを使用してください。
// 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);
シナリオ 3:補助メディアアセットのアップロード
次のコードは例です。
サンプルコードの表示
<?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());
}
}
// Web 補助メディアアセットのアップロードをテストします。
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());
}
}
#### テストコードの実行 ####
// Alibaba Cloud アカウントの AccessKey ペアは、すべての API へのアクセス権限を持っています。API アクセスや日常の O&M には RAM ユーザーの AccessKey ペアを使用してください。
// 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);