Tous les produits
Search
Centre de documentation

ApsaraVideo VOD:Utiliser le SDK de téléchargement pour C/C++

Dernière mise à jour :Sep 22, 2026

Cette rubrique explique comment utiliser le SDK de téléchargement côté serveur pour C ou C++ afin de transférer des fichiers multimédias vers ApsaraVideo VOD.

Processus de téléchargement

Le SDK de téléchargement pour C ou C++ suit le processus général des SDK ApsaraVideo VOD. Pour plus d'informations, consultez la section Processus de téléchargement. La suite décrit les étapes de base pour utiliser le SDK de téléchargement côté serveur pour C ou C++ :

  1. Effectuez les configurations décrites dans la section Prérequis.

  2. Intégrez le SDK de téléchargement côté serveur pour C ou C++. Pour plus d'informations, consultez la section Intégrer le SDK de téléchargement côté serveur pour C ou C++.

  3. Configurez les informations de téléchargement pour implémenter la logique de transfert.

Prérequis

  • ApsaraVideo VOD est activé. Pour plus d'informations, consultez la page Activer ApsaraVideo VOD.

  • Les paramètres système requis pour le téléchargement, y compris le chemin de stockage dans la région spécifiée et les paramètres de rappel, sont configurés. Pour plus d'informations, consultez les pages Gérer les buckets de stockage et Configurer les rappels.

  • Un utilisateur RAM est créé et utilisé pour accéder à ApsaraVideo VOD. Afin de prévenir les risques de sécurité liés à la divulgation de la paire AccessKey de votre compte Alibaba Cloud, nous vous recommandons de créer un utilisateur RAM et de lui accorder les autorisations nécessaires pour accéder à ApsaraVideo VOD. Vous pouvez ensuite utiliser la paire AccessKey de l'utilisateur RAM pour accéder à ApsaraVideo VOD. Pour plus d'informations, consultez la page Créer un utilisateur RAM et accorder des autorisations.

  • Configurez les variables d'environnement ALIBABA_CLOUD_ACCESS_KEY_ID et ALIBABA_CLOUD_ACCESS_KEY_SECRET. Pour plus d'informations, consultez la page Configurer les variables d'environnement sous Linux, macOS et Windows.

    Important
    • Une paire AccessKey de compte Alibaba Cloud dispose d'autorisations sur toutes les opérations API. Utilisez la paire AccessKey d'un utilisateur RAM pour appeler des opérations API ou effectuer des tâches d'exploitation et de maintenance courantes.

    • N'intégrez pas directement votre AccessKey ID et votre AccessKey Secret dans le code de votre projet. En cas de fuite, toutes les ressources de votre compte seraient compromises.

  • Facultatif. Créez un rôle pour l'utilisateur RAM et accordez-lui les autorisations nécessaires pour accéder à ApsaraVideo VOD si vous souhaitez accéder au service via Security Token Service (STS). Pour plus d'informations, consultez la page Obtenir un jeton STS.

Intégrer le SDK de téléchargement côté serveur pour C ou C++

Remarque
  • Le SDK de téléchargement côté serveur pour C ou C++ ne peut être installé que sur le système d'exploitation Linux.

  • Cet exemple utilise la version 1.0.0 du SDK. Vous pouvez utiliser d'autres versions selon les besoins de votre activité.

  • Pour plus d'informations sur les répertoires du SDK de téléchargement côté serveur pour C ou C++ et sur l'exemple de code, consultez la section Répertoires.

  • Cette rubrique explique comment installer le SDK de téléchargement côté serveur pour C ou C++ en tant qu'utilisateur non root et fournit des exemples de commandes d'installation.

Le tableau suivant décrit les packages logiciels requis, leur utilisation et des exemples d'installation.

Package logiciel

Description

Installation via YUM

Installation via des packages téléchargés depuis Internet

CMake

Compilateur tiers.

  • Version : V2.6.0 ou ultérieure

  • Exemple de code :

    sudo yum install cmake
  • Lien de téléchargement : CMake

  • Exemple de code :

    ./configure
        make
        make install

libcurl

Résout les problèmes de connexion réseau.

  • Version : V7.29.0 ou ultérieure

  • Exemple de code :

    sudo yum install libcurl-devel
  • Lien de téléchargement : libcurl

  • Exemple de code :

    ./configure
        make
        make install

libuuid

Génère des UUID.

Exemple de code :

sudo yum install libuuid-devel

S.O.

apr

S.O.

Exemple de code :

sudo yum install apr-devel
  • Lien de téléchargement : apr

  • Exemple de code :

    ./configure
        make
        make install

apr-util

Gère l'utilisation de la mémoire et les problèmes multiplateformes.

Exemple de code :

sudo yum install apr-util
  • Lien de téléchargement : apr-util

  • Exemple de code :

    // Spécifiez le paramètre with-apr lors de l'installation du package. 
        ./configure --with-apr=/your/apr/install/path
        make
        make install

minixml

Analyse les données renvoyées au format XML.

Exemple de code :

sudo yum install mxml mxml-devel
  • Lien de téléchargement : minixml

  • Exemple de code :

    ./configure
        make
        make install

jsoncpp

Analyse les données renvoyées au format JSON.

Exemple de code :

sudo yum install jsoncpp-devel
  • Lien de téléchargement : jsoncpp

  • Exemple de code :

    ./configure
        make
        make install

SDK OSS

Avant d'utiliser le SDK de téléchargement côté serveur pour C ou C++, vous devez télécharger et installer le SDK Object Storage Service (OSS) pour C ou C++.

S.O.

Pour plus d'informations sur le lien de téléchargement et la procédure d'installation, consultez la page Installation (SDK C).

Important

Si certaines dépendances OSS ont déjà été installées, il n'est pas nécessaire de les installer à nouveau.

SDK de téléchargement pour C ou C++

Transfère des fichiers multimédias.

S.O.

  • Exemple de code :

cmake .
make
make install

Répertoires

/VodSDK-C_1.0.0.gz/VodSDK-C_1.0.0/aliyun-c-sdk-vod/src/upload.h

Répertoire

Description

CreateUploadVideoRequest

Classe de requête pour le téléchargement de vidéos. Pour plus d'informations sur les paramètres, consultez la page CreateUploadVideo.

CreateUploadImageRequest

Classe de requête pour le téléchargement d'images. Pour plus d'informations sur les paramètres, consultez la page CreateUploadImage.

CreateUploadAttachedMediaRequest

Classe de requête pour le téléchargement de ressources multimédias auxiliaires. Pour plus d'informations sur les paramètres, consultez la page CreateUploadAttachedMedia.

UploadOptions

Structure des paramètres de téléchargement. Les éléments suivants décrivent les paramètres.

  • void (*uploadProgressCallback) (int64_t, int64_t) : configure une fonction de rappel pour la progression du téléchargement. Si ce paramètre n'est pas défini, les configurations de rappel par défaut sont utilisées. Si vous le définissez sur NULL, aucun rappel de progression n'est invoqué.

  • ecsRegionId : spécifie la région de l'instance ECS où le script de téléchargement est déployé. Si la région ECS correspond à la région de stockage d'ApsaraVideo VOD, le fichier est automatiquement téléchargé via le réseau interne.

  • multipartUploadLimit : spécifie la limite de taille de fichier pour le téléchargement multipart. Unité : octets. Valeur par défaut : 10 Mo. Ce paramètre s'applique uniquement aux téléchargements de vidéos.

  • multipartUploadOnceSize : spécifie la taille de chaque partie lors du téléchargement multipart. Unité : octets. Valeur par défaut : 10 Mo. Ce paramètre s'applique uniquement aux téléchargements de vidéos.

  • tmpDir : spécifie un répertoire local pour stocker temporairement les fichiers. Ce paramètre s'applique uniquement au téléchargement de fichiers en ligne.

uploadLocalVideo

Opération API utilisée pour télécharger des vidéos locales.

uploadWebVideo

Opération API utilisée pour télécharger des vidéos en ligne.

uploadLocalImage

Opération API utilisée pour télécharger des images locales.

uploadWebImage

Opération API utilisée pour télécharger des images en ligne.

uploadLocalAttachedMedia

Opération API utilisée pour télécharger des ressources multimédias auxiliaires locales.

uploadWebAttachedMedia

Opération API utilisée pour télécharger des ressources multimédias auxiliaires en ligne.

uploadLocalM3u8

Opération API utilisée pour télécharger des vidéos M3U8 locales.

uploadWebM3u8

Opération API utilisée pour télécharger des vidéos M3U8 en ligne.

/VodSDK-C_1.0.0.gz/VodSDK-C_1.0.0/aliyun-c-sdk-vod/samples

Répertoire

Description

uploadVideo.cpp

Exemple de code pour le téléchargement de vidéos.

uploadImage.cpp

Exemple de code pour le téléchargement d'images.

uploadAttachedMedia.cpp

Exemple de code pour le téléchargement de ressources multimédias auxiliaires.

Scénario 1 : Télécharger des fichiers audio et vidéo

Fichiers audio et vidéo standard

ApsaraVideo VOD vous permet de télécharger des fichiers audio ou vidéo selon l'une des méthodes suivantes :

  • Utilisez le téléchargement multipart pour transférer un fichier local. Vous pouvez transférer un fichier dont la taille atteint 48,8 To. La reprise de téléchargement n'est pas prise en charge. Pour plus d'informations, consultez la fonction testUploadLocalVideo dans l'exemple de code.

  • Utilisez l'URL du fichier pour transférer un fichier en ligne. Vous pouvez transférer un fichier dont la taille atteint 48,8 To. Avant de transférer des fichiers en ligne, vous devez les enregistrer sur un disque local. Assurez-vous que l'espace disque local est suffisant. Pour plus d'informations, consultez la fonction testUploadWebVideo dans l'exemple de code ci-dessous.

Afficher l'exemple de code

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());
}

Fichiers M3U8

Afficher l'exemple de code

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());
}

Scénario 2 : Télécharger des images

Afficher l'exemple de code

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;
}

Afficher l'exemple de code

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());
}

Scénario 3 : Télécharger des ressources multimédias auxiliaires

Afficher l'exemple de code

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;
}

Afficher l'exemple de code

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());
}