アップロードプロセス
説明
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
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 を実行');
$userData = array(
"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());
}
}
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localFilePath = '/opt/video/sample.mp4';
$webFileURL = '<your webFileURL>';
testUploadWebVideo($accessKeyId, $accessKeySecret, $webFileURL);
M3U8 ビデオ
サンプルコード:
<?php
require_once dirname(__DIR__) . DIRECTORY_SEPARATOR . 'voduploadsdk' . DIRECTORY_SEPARATOR . 'Autoloader.php';
date_default_timezone_set('PRC');
function testUploadLocalM3u8($accessKeyId, $accessKeySecret, $m3u8FilePath)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($m3u8FilePath, 'PHP-SDK 経由で testUploadLocalM3u8 を実行');
$sliceFiles = $uploader->parseM3u8File($m3u8FilePath);
$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());
}
}
function testUploadWebM3u8($accessKeyId, $accessKeySecret, $m3u8FileUrl)
{
try {
$uploader = new AliyunVodUploader($accessKeyId, $accessKeySecret);
$uploadVideoRequest = new UploadVideoRequest($m3u8FileUrl, 'PHP-SDK 経由で testUploadWebM3u8 を実行');
$sliceFileUrls = $uploader->parseM3u8File($m3u8FileUrl);
$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());
}
}
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localM3u8FilePath = '/opt/video/m3u8/sample.m3u8';
$webM3u8FileURL = '<your 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
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());
}
}
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localFilePath = '/opt/image/test-image.jpg';
$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif';
testUploadWebImage($accessKeyId, $accessKeySecret, $webFileURL);
シナリオ 3:補助メディアアセットのアップロード
サンプルコード:
<?php
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');
$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');
$res = $uploader->uploadWebAttachedMedia($uploadAttachedRequest);
print_r($res);
} catch (Exception $e) {
printf("testUploadWebAttachedMedia Failed, ErrorMessage: %s\n", $e->getMessage());
}
}
$accessKeyId = getenv('ALIBABA_CLOUD_ACCESS_KEY_ID');
$accessKeySecret = getenv('ALIBABA_CLOUD_ACCESS_KEY_SECRET');
$localFilePath = '/opt/image/test.png';
$webFileURL = 'http://vod-download.cn-shanghai.aliyuncs.com/retina/pic/20180208/496AE240-54AE-4CC8-8578-3EEC8F38****.gif';
testUploadWebAttachedMedia($accessKeyId, $accessKeySecret, $webFileURL);