このトピックでは、CまたはC ++ 用のサーバーアップロードSDKを使用してメディアファイルをApsaraVideo VODにアップロードする方法について説明します。
アップロードのプロセス
CまたはC ++ 用のアップロードSDKは、ApsaraVideo VOD SDKの一般的なプロセスに従います。 詳細については、「アップロードプロセス」をご参照ください。 次のコンテンツでは、CまたはC ++ 用のサーバーアップロードSDKを使用する基本的なプロセスについて説明します。
[前提条件] セクションの説明に従って、設定を完了します。
CまたはC ++ 用のサーバーアップロードSDKを統合します。 詳細については、「CまたはC ++ 用のサーバーアップロードSDKの統合」をご参照ください。
アップロードロジックを実装するためのアップロード情報を設定します。
前提条件
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操作に対する権限があります。 RAMユーザーのAccessKeyペアを使用して、API操作を呼び出したり、ルーチンのO&Mを実行したりすることを推奨します。
AccessKey IDとAccessKeyシークレットをプロジェクトコードにハードコードしないことを推奨します。 そうしないと、AccessKeyペアが漏洩し、アカウント内のすべてのリソースのセキュリティが侵害される可能性があります。
オプションです。 RAMユーザー用にロールが作成され、Security Token Service (STS) を使用してApsaraVideo VODにアクセスする場合は、ApsaraVideo VODにアクセスするために必要な権限がロールに付与されます。 詳細については、「STSを使用した動画のアップロード」をご参照ください。
CまたはC ++ 用のサーバーアップロードSDKの統合
説明
CまたはC ++ 用のサーバーアップロードSDKは、Linuxオペレーティングシステムにのみインストールできます。
この例では、SDK V1.0.0が使用されています。 ビジネス要件に基づいて他のバージョンを使用できます。
サーバーアップロードSDK For CまたはC ++ のディレクトリとサンプルコードの詳細については、「ディレクトリ」をご参照ください。
このトピックでは、CまたはC ++ 用のサーバーアップロードSDKを非rootユーザーとしてインストールする方法と、インストールコマンドの例について説明します。
次の表に、必要なソフトウェアパッケージとその使用方法、およびインストール例を示します。
ソフトウェアパッケージ | 説明 | YUMによるインストール | インターネット経由でダウンロードしたパッケージを使用したインストール |
ソフトウェアパッケージ | 説明 | YUMによるインストール | インターネット経由でダウンロードしたパッケージを使用したインストール |
CMake | サードパーティのコンパイラ。 | | ダウンロードリンク: CMake サンプルコード:
./configure
make
make install
|
libcurl | ネットワーク接続の問題をトラブルシューティングします。 | バージョン: V7.29.0以降 サンプルコード:
sudo yum install libcurl-devel
| ダウンロードリンク: libcurl サンプルコード:
./configure
make
make install
|
libuuid | UUIDを生成します。 | サンプルコード:
sudo yum install libuuid-devel
| 非該当 |
apr | 非該当 | サンプルコード:
sudo yum install apr-devel
| ダウンロードリンク: apr サンプルコード:
./configure
make
make install
|
apr-util | メモリ使用量とクロスプラットフォームの問題を管理します。 | サンプルコード:
sudo yum install apr-util
| ダウンロードリンク: apr-util サンプルコード:
./configure --with-apr=/your/apr/install/path
make
make install
|
minixml | XML形式で返されるデータを解析します。 | サンプルコード:
sudo yum install mxml mxml-devel
| ダウンロードリンク: minixml サンプルコード:
./configure
make
make install
|
jsoncpp | JSON形式で返されたデータを解析します。 | サンプルコード:
sudo yum install jsoncpp-devel
| ダウンロードリンク: jsoncpp サンプルコード:
./configure
make
make install
|
OSS SDK | CまたはC ++ 用のサーバーアップロードSDKを使用する前に、CまたはC ++ 用のObject Storage Service (OSS) SDKをダウンロードしてインストールする必要があります。 | 非該当 | ダウンロードリンクとインストール手順の詳細については、「インストール」をご参照ください。 重要 一部のOSS依存関係がインストールされている場合は、再度インストールする必要はありません。 |
CまたはC ++ 用のSDKのアップロード | | 非該当 | ダウンロードリンク: Upload SDK サンプルコード:
cmake .
make
make install
|
CまたはC ++ 用のアップロードSDKの更新
現在のSDKで新しい操作または既存の操作の新機能が使用できない場合は、SDKを最新バージョンに更新します。 詳細については、「SDKのアップロード」をご参照ください。
説明
現在のSDKのバージョン番号とリリース日は、aliyun-c-sdk-vodディレクトリのChangeLog.txtファイルから取得できます。
ディレクトリ
/VodSDK-C_1.0.0.gz/VodSDK-C_1.0.0/aliyun-c-sdk-vod/src/upload.h
ディレクトリ | 説明 |
CreateUploadVideoRequest | ビデオアップロードのリクエストクラス。 パラメーターの詳細については、「CreateUploadVideo」をご参照ください。 |
CreateUploadImageRequest | 画像アップロードのリクエストクラス。 パラメーターの詳細については、「CreateUploadImage」をご参照ください。 |
CreateUploadAttachedMediaRequest | 補助メディアアセットのアップロードのリクエストクラス。 パラメーターの詳細については、「CreateUploadAttachedMedia」をご参照ください。 |
UploadOptions | アップロードパラメーター構造。 次の項目は、パラメータについて説明します。 void (* uploadProgressCallback) (int64_t, int64_t): アップロードの進行状況のコールバック関数を設定します。 このパラメーターを設定しない場合、デフォルトのコールバック設定が使用されます。 このパラメーターをNULLに設定すると、アップロードの進行状況のコールバックは呼び出されません。 ecsRegionId: アップロードスクリプトがデプロイされるECSインスタンスのリージョンを指定します。 ECSリージョンがApsaraVideo VODのストレージリージョンと同じ場合、ファイルは内部ネットワーク経由で自動的にアップロードされます。 multipartUploadLimit: マルチパートアップロードのファイルサイズ制限を指定します。 単位はバイトです。 デフォルト値: 10 MB。 このパラメータは、ビデオのアップロードに対してのみ有効です。 multipartUploadOnceSize: マルチパートアップロードの各パートのサイズを指定します。 単位はバイトです。 デフォルト値: 10 MB。 このパラメータは、ビデオのアップロードに対してのみ有効です。 tmpDir: ファイルを一時的に格納するローカルディレクトリを指定します。 このパラメーターは、オンラインファイルのアップロードに対してのみ有効です。
|
uploadLocalVideo | ローカルビデオのアップロードに使用されるAPI操作。 |
uploadWebVideo | オンラインビデオのアップロードに使用されるAPI操作。 |
uploadLocalImage | ローカル画像のアップロードに使用されるAPI操作。 |
uploadWebImage | オンライン画像のアップロードに使用されるAPI操作。 |
uploadLocalAttachedMedia | ローカル補助メディアアセットをアップロードするために使用されるAPI操作。 |
uploadWebAttachedMedia | オンライン補助メディアアセットのアップロードに使用されるAPI操作。 |
uploadLocalM3u8 | ローカルM3U8ビデオのアップロードに使用されるAPI操作。 |
uploadWebM3u8 | オンラインM3U8ビデオのアップロードに使用されるAPI操作。 |
/VodSDK-C_1.0.0.gz/VodSDK-C_1.0.0/aliyun-c-sdk-vod/samples
ディレクトリ | 説明 |
uploadVideo.cpp | ビデオをアップロードするためのサンプルコード。 |
uploadImage.cpp | 画像をアップロードするためのサンプルコード。 |
uploadAttachedMedia.cpp | 補助メディア資産をアップロードするためのサンプルコード。 |
シナリオ1: オーディオファイルとビデオファイルのアップロード
通常のオーディオおよびビデオファイル
ApsaraVideo VODでは、次のいずれかの方法でオーディオまたはビデオファイルをアップロードできます。
マルチパートアップロードを使用して、ローカルファイルをアップロードします。 最大48.8テラバイトのファイルをアップロードできます。 再開可能なアップロードはサポートされていません。 詳細については、サンプルコードのtestUploadLocalVideo関数を参照してください。
ファイルのURLを使用してオンラインファイルをアップロードします。 最大48.8テラバイトのファイルをアップロードできます。 オンラインファイルをアップロードする前に、ファイルをローカルディスクにダウンロードする必要があります。 ローカルディスクに十分な容量があることを確認してください。 詳細については、次のサンプルコードのtestUploadWebVideo関数を参照してください。
void testCallback(int64_t consumed_bytes, int64_t total_bytes)
{
printf("total :%ld, %ld\n", consumed_bytes, total_bytes);
}
VodApiResponse testUploadLocalVideo(VodCredential authInfo) {
CreateUploadVideoRequest request;
request.fileName = "test.mp4";
request.title = "testVideo****";
request.cateId = "1";
request.coverURL = "<your cover URL>";
request.tags = "test1,test2";
request.templateGroupId = "6ae347b0140181ad371d197ebe28****";
requests.storageLocation = "<your torageLocation>";
Json::Value userData;
Json::Value callbackUrl;
callbackUrl["CallbackURL"] = "<your callback URL>";
userData["MessageCallback"] = callbackUrl;
Json::Value extend;
extend["localId"] = "xxx";
extend["test"] = "www";
userData["Extend"] = extend;
request.userData = userData.toStyledString();
UploadOptions uploadOptions;
VodApiResponse result = uploadLocalVideo(authInfo, request, "./test.mp4", uploadOptions);
return result;
}
VodApiResponse testUploadWebVideo(VodCredential authInfo) {
CreateUploadVideoRequest request;
request.fileName = "testWeb****.mp4";
request.title = "testUploadWebVideo****";
UploadOptions uploadOptions;
VodApiResponse result = uploadWebVideo(authInfo, request, "<Your Download Url>", uploadOptions);
return result;
}
#### Run the test code. ####
VodCredential initVodClient(std::string accessKeyId, std::string accessKeySecret) {
VodCredential authInfo;
authInfo.accessKeyId = accessKeyId;
authInfo.accessKeySecret = accessKeySecret;
authInfo.regionId = "cn-shanghai";
return authInfo;
}
int main(int argc, char * argv[]) {
VodCredential authInfo = initVodClient(std:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), std:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
VodApiResponse response;
response = testUploadLocalVideo(authInfo);
printf("httpCode: %d, result: %s\n", response.httpCode, response.result.c_str());
}
M3U8ファイル
void testCallback(int64_t consumed_bytes, int64_t total_bytes)
{
printf("total :%ld, %ld\n", consumed_bytes, total_bytes);
}
VodApiResponse testUploadLocalM3u8(VodCredential authInfo) {
CreateUploadVideoRequest request;
request.fileName = "testLocal****.m3u8";
request.title = "testUploadLocalM3u8****";
list<string> tsList;
UploadOptions uploadOptions;
VodApiResponse result = uploadLocalM3u8(authInfo, request, "./test****.m3u8", tsList, uploadOptions);
return result;
}
VodApiResponse testUploadWebM3u8(VodCredential authInfo) {
CreateUploadVideoRequest request;
request.fileName = "testWeb****.m3u8";
request.title = "testUploadWebM3u8****";
list<string> tsList;
UploadOptions uploadOptions;
VodApiResponse result = uploadWebM3u8(authInfo, request, "<Your M3u8 Download Url>", tsList, uploadOptions);
return result;
}
#### Run the test code. ####
VodCredential initVodClient(std::string accessKeyId, std::string accessKeySecret) {
VodCredential authInfo;
authInfo.accessKeyId = accessKeyId;
authInfo.accessKeySecret = accessKeySecret;
authInfo.regionId = "cn-shanghai";
return authInfo;
}
int main(int argc, char * argv[]) {
VodCredential authInfo = initVodClient(std:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), std:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
VodApiResponse response;
response = testUploadLocalVideo(authInfo);
printf("httpCode: %d, result: %s\n", response.httpCode, response.result.c_str());
}
シナリオ2: 画像のアップロード
void testCallback(int64_t consumed_bytes, int64_t total_bytes)
{
printf("total :%ld, %ld\n", consumed_bytes, total_bytes);
}
VodApiResponse testUploadLocalImage(VodCredential authInfo)
{
CreateUploadImageRequest request;
request.imageType = "default";
request.title = "testUploadLocalImage";
UploadOptions uploadOptions;
VodApiResponse result = uploadLocalImage(authInfo, request, "./test.png", uploadOptions);
return result;
}
VodApiResponse testUploadWebImage(VodCredential authInfo) {
CreateUploadImageRequest request;
request.imageType = "default";
request.title = "testUploadWebImage";
UploadOptions uploadOptions;
VodApiResponse result = uploadWebImage(authInfo, request, "<Your Download Url>", uploadOptions);
return result;
}
VodCredential initVodClient(std::string accessKeyId, std::string accessKeySecret) {
VodCredential authInfo;
authInfo.accessKeyId = accessKeyId;
authInfo.accessKeySecret = accessKeySecret;
authInfo.regionId = "cn-shanghai";
return authInfo;
}
int main(int argc, char * argv[]) {
VodCredential authInfo = initVodClient(std:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), std:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
VodApiResponse response;
response = testUploadLocalImage(authInfo);
printf("httpCode: %d, result: %s\n", response.httpCode, response.result.c_str());
}
シナリオ3: 補助メディア資産のアップロード
void testCallback(int64_t consumed_bytes, int64_t total_bytes)
{
printf("total :%ld, %ld\n", consumed_bytes, total_bytes);
}
VodApiResponse testUploadLocalAttachedMedia(VodCredential authInfo)
{
CreateUploadAttachedMediaRequest request;
request.businessType = "watermark";'
request.mediaExt = "png";
request.title = "testUploadLocalAttachedMedia";
UploadOptions uploadOptions;
return uploadLocalAttachedMedia(authInfo, request, "./test.png", uploadOptions);
}
VodApiResponse testUploadWebAttachedMedia(VodCredential authInfo)
{
CreateUploadAttachedMediaRequest request;
request.businessType = "watermark";
request.mediaExt = "png";
request.title = "testUploadWebAttachedMedia";
UploadOptions uploadOptions;
return uploadWebAttachedMedia(authInfo, request, "<Your Download Url>", uploadOptions);
}
VodCredential initVodClient(std::string accessKeyId, std::string accessKeySecret) {
VodCredential authInfo;
authInfo.accessKeyId = accessKeyId;
authInfo.accessKeySecret = accessKeySecret;
authInfo.regionId = "cn-shanghai";
return authInfo;
}
int main(int argc, char * argv[]) {
VodCredential authInfo = initVodClient(std:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), std:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
VodApiResponse response;
response = testUploadLocalAttachedMedia(authInfo);
printf("httpCode: %d, result: %s\n", response.httpCode, response.result.c_str());
}