アップロードプロセス
説明 PHP での開発には、ブラウザ/サーバー (B/S) アーキテクチャを使用することをお勧めします。
Java 用アップロード SDK は、ApsaraVideo VOD SDK の一般的なアップロードプロセスに従います。詳細については、「アップロードプロセス」をご参照ください。PHP アップロード SDK を使用したプロセスを以下に示します。
前提条件 セクションの説明に従って構成を完了します。
PHP アップロード SDK を統合します。詳細については、「PHP アップロード SDK の統合」をご参照ください。
アップロードロジックを実装するためにアップロード情報を構成します。
PHP アップロード SDK のデフォルトのエンドポイントは、cn-shanghai
です。中国 (上海) リージョン以外にメディアファイルをアップロードする場合は、SDK を初期化する際に AliyunVodUploader
を構成してリージョンを指定できます。サポートされているエンドポイントの詳細については、「エンドポイント」をご参照ください。
次のサンプルコードは、中国 (北京)
リージョンにメディアファイルをアップロードする方法の例を示しています。
$apiRegionId = 'cn-beijing'; // 中国 (北京) リージョンにメディアファイルをアップロードします。
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret, $apiRegionId);
前提条件
ApsaraVideo VOD がアクティブ化されている。詳細については、「ApsaraVideo VOD をアクティブ化する」をご参照ください。
指定されたリージョンのストレージパスやコールバック設定など、アップロードに必要なシステム設定が構成されている。詳細については、「ストレージバケットを管理する」および「コールバックを構成する」をご参照ください。
RAM ユーザーが作成され、ApsaraVideo VOD へのアクセスに使用されている。Alibaba Cloud アカウントの AccessKey ペアの漏洩によるセキュリティリスクを防ぐため、RAM ユーザーを作成し、ApsaraVideo VOD へのアクセスに必要な権限を RAM ユーザーに付与することをお勧めします。その後、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 シークレットをプロジェクトコードにハードコードしないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが危険にさらされる可能性があります。
オプション。セキュリティトークンサービス (STS) を使用して ApsaraVideo VOD にアクセスする場合、RAM ユーザーのロールが作成され、そのロールに ApsaraVideo VOD へのアクセスに必要な権限が付与されます。詳細については、「STS を使用してビデオをアップロードする」をご参照ください。
PHP アップロード SDK の統合
PHP アップロード SDK とサンプルコードを含むパッケージ VodUploadSDK-PHP_1.0.3.zip をダウンロードします。詳細については、「SDK の概要とダウンロード」をご参照ください。
VodUploadSDK-PHP_1.0.3.zip ファイルを展開し、VodUploadSDK-PHP_1.0.3 ディレクトリ内の voduploadsdk フォルダをプロジェクトにコピーします。
PHP アップロード SDK の更新
現在の SDK で新しい操作または既存の操作の新しい機能が使用できない場合は、SDK を最新バージョンに更新します。詳細については、「アップロード SDK」をご参照ください。
説明 現在の SDK のバージョン番号とリリース日は、voduploadsdk ディレクトリにある ChangeLog.txt ファイルの最初の行で確認できます。
ディレクトリ
/VodUploadSDK-PHP_1.0.3.zip/VodUploadSDK-PHP_1.0.3/voduploadsdk/uploader
[/voduploadsdk-php_1.0.3.zip/voduploadsdk-php_1.0.3/voduploadsdk]
aliyun-php-sdk-core: アップロード SDK が依存する基本クラスです。このパッケージは、Alibaba Cloud API 署名と HTTP リクエストをカプセル化します。
aliyun-php-sdk-vod: ApsaraVideo VOD SDK です。このパッケージは、ApsaraVideo VOD の API リクエストをカプセル化します。
aliyun-php-sdk-oss: アップロード SDK が依存する Object Storage Service (OSS) クラスです。このパッケージは、OSS アップロードなどの操作をカプセル化します。
[/voduploadsdk-php_1.0.3.zip/voduploadsdk-php_1.0.3/samples]
uploadVideo.php:動画アップロードのサンプルコードです。
uploadImage.php:画像アップロードのサンプルコードです。
uploadAttachedMedia.php:補助メディアアセットのアップロードのサンプルコードです。
シナリオ 1: 音声またはビデオファイルをアップロードする
標準の音声およびビデオファイル
PHP 用のアップロード SDK は、以下の種類の音声およびビデオファイルをサポートしています。
マルチパートアップロードを使用してローカルファイルをアップロードします。最大 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, 'PHP-SDK 経由で testUploadLocalVideo を実行');
//$uploadVideoRequest->setCateId(1);
// ビデオサムネイルの URL。例: 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(
// コールバック URL。例: 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, 'PHP-SDK 経由で testUploadWebVideo を実行');
$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 ペア (AccessKey ID と AccessKey シークレット) をプロジェクトコードに含めないことをお勧めします。含めると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
// この例では、ApsaraVideo VOD は環境変数から AccessKey ペアを読み取って、API アクセスの ID 検証を実装します。サンプルコードを実行する前に、環境変数 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);
// オンラインのオーディオまたはビデオファイルの URL。例: 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, 'PHP-SDK 経由で testUploadLocalM3u8 を実行');
// M3U8 ファイルのパートファイル URL を解析します。解析結果が無効な場合は、パートファイルの URL を連結します。デフォルトでは、パートファイルと 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, 'PHP-SDK 経由で testUploadWebM3u8 を実行');
// M3U8 ファイルのパートファイル URL を解析します。解析結果が無効な場合は、パートファイルの URL を連結します。デフォルトでは、パートファイルと 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 ペア (AccessKey ID と AccessKey シークレット) をプロジェクトコードに含めないことをお勧めします。含めると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
// この例では、ApsaraVideo VOD は環境変数から AccessKey ペアを読み取って、API アクセスの ID 検証を実装します。サンプルコードを実行する前に、環境変数 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);
// オンライン M3U8 ビデオの URL。例: 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);
アップロードアクセラレーション
ギガバイトまたはテラバイト単位の大容量ファイルをアップロードする場合、または中国本土から シンガポール リージョンなどのストレージの場所にリージョンを跨いでビデオをアップロードする場合は、アップロードアクセラレーション機能を有効にすることができます。詳細については、「アップロードアクセラレーションを有効にする」をご参照ください。アップロードアクセラレーションを有効にした後、対応する キーと値 のペア 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());
}
}
// オンラインイメージのアップロードをテストします。
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 オペレーションの呼び出しや日常の運用・保守には、RAM ユーザーの AccessKey ペアを使用することをお勧めします。
// プロジェクトコードに AccessKey ペア (AccessKey ID と AccessKey シークレット) を含めないことをお勧めします。含めると、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
// この例では、ApsaraVideo VOD は、API アクセスの ID 検証を実装するために、環境変数から AccessKey ペアを読み取ります。サンプルコードを実行する前に、環境変数 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());
}
}
// オンラインの補助メディアアセットのアップロードをテストします。
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 ペア (AccessKey ID と AccessKey シークレット) を含めないことをお勧めします。そうしないと、AccessKey ペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
// この例では、ApsaraVideo VOD は、API アクセスの ID 検証を実装するために、環境変数から AccessKey ペアを読み取ります。サンプルコードを実行する前に、環境変数 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);