すべてのプロダクト
Search
ドキュメントセンター

ApsaraVideo VOD:アップロードSDK for C/C + を使用してファイルをアップロードする

最終更新日:Oct 28, 2024

このトピックでは、CまたはC ++ 用のサーバーアップロードSDKを使用してメディアファイルをApsaraVideo VODにアップロードする方法について説明します。

アップロードのプロセス

CまたはC ++ 用のアップロードSDKは、ApsaraVideo VOD SDKの一般的なプロセスに従います。 詳細については、「アップロードプロセス」をご参照ください。 次のコンテンツでは、CまたはC ++ 用のサーバーアップロードSDKを使用する基本的なプロセスについて説明します。

  1. [前提条件] セクションの説明に従って、設定を完了します。

  2. CまたはC ++ 用のサーバーアップロードSDKを統合します。 詳細については、「CまたはC ++ 用のサーバーアップロードSDKの統合」をご参照ください。

  3. アップロードロジックを実装するためのアップロード情報を設定します。

前提条件

  • ApsaraVideo VODが有効化されています。 詳細については、「ApsaraVideo VODの有効化」をご参照ください。

  • 指定されたリージョンのストレージパスやコールバック設定など、アップロードに必要なシステム設定が構成されます。 詳細については、「ストレージバケットの管理」および「コールバックの設定」をご参照ください。

  • RAMユーザーが作成され、ApsaraVideo VODへのアクセスに使用されます。 Alibaba CloudアカウントのAccessKeyペアの漏洩によるセキュリティリスクを防ぐため、RAMユーザーを作成し、ApsaraVideo VODへのアクセスに必要な権限をRAMユーザーに付与することを推奨します。 その後、RAMユーザーのAccessKeyペアを使用してApsaraVideo VODにアクセスできます。 詳細については、「Create and grant permissions to a RAM user」をご参照ください。

  • 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を使用した動画のアップロード」をご参照ください。

    説明

    STSを使用できるシナリオの詳細については、「資格情報とSTSの比較」をご参照ください。

CまたはC ++ 用のサーバーアップロードSDKの統合

説明
  • CまたはC ++ 用のサーバーアップロードSDKは、Linuxオペレーティングシステムにのみインストールできます。

  • この例では、SDK V1.0.0が使用されています。 ビジネス要件に基づいて他のバージョンを使用できます。

  • サーバーアップロードSDK For CまたはC ++ のディレクトリとサンプルコードの詳細については、「ディレクトリ」をご参照ください。

  • このトピックでは、CまたはC ++ 用のサーバーアップロードSDKを非rootユーザーとしてインストールする方法と、インストールコマンドの例について説明します。

次の表に、必要なソフトウェアパッケージとその使用方法、およびインストール例を示します。

ソフトウェアパッケージ

説明

YUMによるインストール

インターネット経由でダウンロードしたパッケージを使用したインストール

CMake

サードパーティのコンパイラ。

  • バージョン: V2.6.0以降

  • サンプルコード:

    sudo yum install 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

  • サンプルコード:

    // Specify the with-apr parameter when you install the package. 
    ./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);
}
// Test the upload of a local video.
VodApiResponse testUploadLocalVideo(VodCredential authInfo) {
    CreateUploadVideoRequest request;
    // The name of the source file.
    request.fileName = "test.mp4";
    // The title of the video.
    request.title = "testVideo****";
    // The category ID of the video.
    request.cateId = "1";
    // The URL of the custom video thumbnail. Example: http://example.com/example-****.jpg.
    request.coverURL = "<your cover URL>";
    // The tags of the video.
    request.tags = "test1,test2";
    // The ID of the transcoding template group.
    request.templateGroupId = "6ae347b0140181ad371d197ebe28****";
    // The storage address. Example: example-bucket-****.oss-cn-shanghai.aliyuncs.com.
    requests.storageLocation = "<your torageLocation>";
    Json::Value userData;
    Json::Value callbackUrl;
    // The callback URL. Example: https://example.aliyundoc.com/ProcessMessageCallback.
    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;
    // Specify the region of the ECS instance where the upload script is deployed. If the ECS region is the same as the storage region of ApsaraVideo VOD, the file is automatically uploaded over the internal network.
    //uploadOptions.ecsRegionId = "cn-shanghai";
    // Configure a callback function for the upload progress. If you do not set this parameter, the default callback configurations are used. If you set this parameter to NULL, no callback for the upload progress is invoked.
    //uploadOptions.uploadProgressCallback = testCallback;
    //uploadOptions.multipartUploadLimit = 20*1024*1024;// Specify the file size limit for multipart upload.
    //uploadOptions.multipartUploadOnceSize = 10*1024*1024;// Specify the size of each part in multipart upload.
    VodApiResponse result = uploadLocalVideo(authInfo, request, "./test.mp4", uploadOptions);
    return result;
}
// Test the upload of an online video.
VodApiResponse testUploadWebVideo(VodCredential authInfo) {
    CreateUploadVideoRequest request;
    request.fileName = "testWeb****.mp4";
    request.title = "testUploadWebVideo****";
    UploadOptions uploadOptions;
    // Specify the region of the ECS instance where the upload script is deployed. If the ECS region is the same as the storage region of ApsaraVideo VOD, the file is automatically uploaded over the internal network.
    //uploadOptions.ecsRegionId = "cn-shanghai";
    // Configure a callback function for the upload progress. If you do not set this parameter, the default callback configurations are used. If you set this parameter to NULL, no callback for the upload progress is invoked.
    //uploadOptions.uploadProgressCallback = testCallback;
    //uploadOptions.multipartUploadLimit = 20*1024*1024;// Specify the file size limit for multipart upload.
    //uploadOptions.multipartUploadOnceSize = 10*1024*1024;// Specify the size of each part in multipart upload.
    // Specify a local directory to temporarily store the downloaded online files. Default value: /tmp/.
    //uploadOptions.tmpDir = "/tmp/";
    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[]) {
    // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. 
    // We recommend that you not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. 
    // In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
    VodCredential authInfo = initVodClient(std:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), std:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
    VodApiResponse response;
    response = testUploadLocalVideo(authInfo);
    //response = testUploadWebVideo(authInfo);
    //response = testUploadLocalM3u8(authInfo);
    //response = testUploadWebM3u8(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);
}
// Test the upload of a local M3U8 video.
VodApiResponse testUploadLocalM3u8(VodCredential authInfo) {
    CreateUploadVideoRequest request;
    // The name of the source file.
    request.fileName = "testLocal****.m3u8";
    // The title of the video.
    request.title = "testUploadLocalM3u8****";
    list<string> tsList;
    // If you do not specify the URLs of part files, the files are automatically parsed.
    //tsList.push_back("/tmp/1.ts");
    UploadOptions uploadOptions;
    VodApiResponse result = uploadLocalM3u8(authInfo, request, "./test****.m3u8", tsList, uploadOptions);
    return result;
}
// Test the upload of an online M3U8 video.
VodApiResponse testUploadWebM3u8(VodCredential authInfo) {
    CreateUploadVideoRequest request;
    // The name of the source file.
    request.fileName = "testWeb****.m3u8";
    // The title of the video.
    request.title = "testUploadWebM3u8****";
    list<string> tsList;
    // If you do not specify the URLs of part files, the files are automatically parsed.
    //tsList.push_back("<Ts1 Download Url>");
    //tsList.push_back("<Ts2 Download Url>");
    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[]) {
    // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. 
    // We recommend that you not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. 
    // In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
    VodCredential authInfo = initVodClient(std:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), std:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
    VodApiResponse response;
    response = testUploadLocalVideo(authInfo);
    //response = testUploadWebVideo(authInfo);
    //response = testUploadLocalM3u8(authInfo);
    //response = testUploadWebM3u8(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;
    // The type of the image.
    request.imageType = "default";
    // The title of the image.
    request.title = "testUploadLocalImage";
    UploadOptions uploadOptions;
    // Specify the region of the ECS instance where the upload script is deployed. If the ECS region is the same as the storage region of ApsaraVideo VOD, the file is automatically uploaded over the internal network.
    //uploadOptions.ecsRegionId = "cn-shanghai";
    // Configure a callback function for the upload progress. If you do not set this parameter, the default callback configurations are used. If you set this parameter to NULL, no callback for the upload progress is invoked.
    //uploadOptions.uploadProgressCallback = testCallback;
    VodApiResponse result = uploadLocalImage(authInfo, request, "./test.png", uploadOptions);
    return result;
}

VodApiResponse testUploadWebImage(VodCredential authInfo) {
    CreateUploadImageRequest request;
    request.imageType = "default";
    request.title = "testUploadWebImage";
    UploadOptions uploadOptions;
    // Specify the region of the ECS instance where the upload script is deployed. If the ECS region is the same as the storage region of ApsaraVideo VOD, the file is automatically uploaded over the internal network.
    //uploadOptions.ecsRegionId = "cn-shanghai";
    // Configure a callback function for the upload progress. If you do not set this parameter, the default callback configurations are used. If you set this parameter to NULL, no callback for the upload progress is invoked.
    //uploadOptions.uploadProgressCallback = testCallback;
    // Specify a local directory to temporarily store the downloaded online files. Default value: /tmp/.
    //uploadOptions.tmpDir = "/tmp/";
    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[]) {
    // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. 
    // We recommend that you not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. 
    // In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
    VodCredential authInfo = initVodClient(std:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), std:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
    VodApiResponse response;

    response = testUploadLocalImage(authInfo);
    //response = testUploadWebImage(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;
    // The type of the auxiliary media asset.
    request.businessType = "watermark";'
    // The file name extension.
    request.mediaExt = "png";
    // The title of the auxiliary media asset.
    request.title = "testUploadLocalAttachedMedia";
    UploadOptions uploadOptions;
    // Specify the region of the ECS instance where the upload script is deployed. If the ECS region is the same as the storage region of ApsaraVideo VOD, the file is automatically uploaded over the internal network.
    //uploadOptions.ecsRegionId = "cn-shanghai";
    // Configure a callback function for the upload progress. If you do not set this parameter, the default callback configurations are used. If you set this parameter to NULL, no callback for the upload progress is invoked.
    //uploadOptions.uploadProgressCallback = testCallback;
    return uploadLocalAttachedMedia(authInfo, request, "./test.png", uploadOptions);
}

VodApiResponse testUploadWebAttachedMedia(VodCredential authInfo)
{
    CreateUploadAttachedMediaRequest request;
    // The type of the auxiliary media asset.
    request.businessType = "watermark";
    // The file name extension.
    request.mediaExt = "png";
    // The title of the auxiliary media asset.
    request.title = "testUploadWebAttachedMedia";
    UploadOptions uploadOptions;
    // Specify the region of the ECS instance where the upload script is deployed. If the ECS region is the same as the storage region of ApsaraVideo VOD, the file is automatically uploaded over the internal network.
    //uploadOptions.ecsRegionId = "cn-shanghai";
    // Configure a callback function for the upload progress. If you do not set this parameter, the default callback configurations are used. If you set this parameter to NULL, no callback for the upload progress is invoked.
    //uploadOptions.uploadProgressCallback = testCallback;
    // Specify a local directory to temporarily store the downloaded online files. Default value: /tmp/.
    //uploadOptions.tmpDir = "/tmp/";
    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[]) {
    // The AccessKey pair of an Alibaba Cloud account has permissions on all API operations. We recommend that you use a RAM user to call API operations or perform routine O&M. 
    // We recommend that you not include your AccessKey pair (AccessKey ID and AccessKey secret) in your project code. Otherwise, the AccessKey pair may be leaked and the security of all resources within your account may be compromised. 
    // In this example, ApsaraVideo VOD reads the AccessKey pair from the environment variables to implement identity verification for API access. Before you run the sample code, configure the environment variables ALIBABA_CLOUD_ACCESS_KEY_ID and ALIBABA_CLOUD_ACCESS_KEY_SECRET. 
    VodCredential authInfo = initVodClient(std:getenv("ALIBABA_CLOUD_ACCESS_KEY_ID"), std:getenv("ALIBABA_CLOUD_ACCESS_KEY_SECRET"));
    VodApiResponse response;
    response = testUploadLocalAttachedMedia(authInfo);
    //response = testUploadWebAttachedMedia(authInfo);
    printf("httpCode: %d, result: %s\n", response.httpCode, response.result.c_str());
}

関連ドキュメント

概要

概要