Todos os produtos
Search
Central de documentação

ApsaraVideo VOD:Usar o SDK de upload para C/C++

Última atualização: Jun 27, 2026

Este tópico descreve como usar o SDK de upload do servidor para C ou C++ para enviar arquivos de mídia ao ApsaraVideo VOD.

Processo de upload

O SDK de upload para C ou C++ segue o processo geral dos SDKs do ApsaraVideo VOD. Para obter mais informações, consulte Processo de upload. O conteúdo a seguir descreve o fluxo básico de uso do SDK de upload do servidor para C ou C++:

  1. Conclua as configurações conforme descrito na seção Pré-requisitos.

  2. Integre o SDK de upload do servidor para C ou C++. Para mais detalhes, consulte Integrar o SDK de upload do servidor para C ou C++.

  3. Configure as informações de upload para implementar a lógica de envio.

Pré-requisitos

  • O ApsaraVideo VOD está ativado. Para mais informações, consulte Ativar o ApsaraVideo VOD.

  • As configurações de sistema necessárias para o upload estão concluídas, incluindo o caminho de armazenamento na região especificada e as definições de callback. Consulte Gerenciar buckets de armazenamento e Configurar callbacks.

  • Crie um usuário RAM para acessar o ApsaraVideo VOD. Para evitar riscos de segurança causados pelo vazamento do par AccessKey da sua conta Alibaba Cloud, recomendamos criar um usuário RAM e conceder a ele as permissões necessárias para acesso ao ApsaraVideo VOD. Em seguida, use o par AccessKey desse usuário RAM para acessar o serviço. Para mais detalhes, consulte Criar um usuário RAM e conceder permissões.

  • Configure as variáveis de ambiente ALIBABA_CLOUD_ACCESS_KEY_ID e ALIBABA_CLOUD_ACCESS_KEY_SECRET. Para mais informações, consulte Configurar variáveis de ambiente no Linux, macOS e Windows.

    Importante
    • O par AccessKey de uma conta Alibaba Cloud tem permissões em todas as operações de API. Use o par AccessKey de um usuário RAM para chamar operações de API ou executar tarefas rotineiras de O&M.

    • Não codifique rigidamente (hard-code) seu AccessKey ID e AccessKey secret no código do projeto. Em caso de vazamento, todos os recursos da sua conta ficarão comprometidos.

  • (Opcional) Caso deseje acessar o ApsaraVideo VOD por meio do Security Token Service (STS), crie uma função para o usuário RAM e conceda a ela as permissões necessárias. Para mais informações, consulte Obter um token STS.

Integrar o SDK de upload do servidor para C ou C++

Nota
  • O SDK de upload do servidor para C ou C++ pode ser instalado apenas no sistema operacional Linux.

  • Este exemplo usa a versão V1.0.0 do SDK. Você pode usar outras versões conforme as necessidades do seu negócio.

  • Para obter detalhes sobre os diretórios do SDK de upload do servidor para C ou C++ e códigos de exemplo, consulte Diretórios.

  • Este tópico explica como instalar o SDK de upload do servidor para C ou C++ como um usuário não root e fornece exemplos de comandos de instalação.

A tabela a seguir descreve os pacotes de software necessários, suas finalidades e exemplos de instalação.

Pacote de software

Descrição

Instalação via YUM

Instalação via pacotes baixados da Internet

CMake

Compilador de terceiros.

  • Versão: V2.6.0 ou posterior

  • Código de exemplo:

    sudo yum install cmake
  • Link para download: CMake

  • Código de exemplo:

    ./configure
        make
        make install

libcurl

Resolve problemas de conexão de rede.

  • Versão: V7.29.0 ou posterior

  • Código de exemplo:

    sudo yum install libcurl-devel
  • Link para download: libcurl

  • Código de exemplo:

    ./configure
        make
        make install

libuuid

Gera UUIDs.

Código de exemplo:

sudo yum install libuuid-devel

N/A

apr

N/A

Código de exemplo:

sudo yum install apr-devel
  • Link para download: apr

  • Código de exemplo:

    ./configure
        make
        make install

apr-util

Gerencia o uso de memória e questões multiplataforma.

Código de exemplo:

sudo yum install apr-util
  • Link para download: apr-util

  • Código de exemplo:

    // Specify the with-apr parameter when you install the package. 
        ./configure --with-apr=/your/apr/install/path
        make
        make install

minixml

Analisa dados retornados no formato XML.

Código de exemplo:

sudo yum install mxml mxml-devel
  • Link para download: minixml

  • Código de exemplo:

    ./configure
        make
        make install

jsoncpp

Analisa dados retornados no formato JSON.

Código de exemplo:

sudo yum install jsoncpp-devel
  • Link para download: jsoncpp

  • Código de exemplo:

    ./configure
        make
        make install

OSS SDK

Antes de usar o SDK de upload do servidor para C ou C++, baixe e instale o SDK do Object Storage Service (OSS) para C ou C++.

N/A

Para obter o link de download e o procedimento de instalação, consulte Instalação (C SDK).

Importante

Se algumas dependências do OSS já estiverem instaladas, não será necessário reinstalá-las.

Upload SDK para C ou C++

Envia arquivos de mídia.

N/A

  • Código de exemplo:

cmake .
make
make install

Diretórios

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

Diretório

Descrição

CreateUploadVideoRequest

Classe de solicitação para upload de vídeo. Para obter detalhes sobre os parâmetros, consulte CreateUploadVideo.

CreateUploadImageRequest

Classe de solicitação para upload de imagem. Para obter detalhes sobre os parâmetros, consulte CreateUploadImage.

CreateUploadAttachedMediaRequest

Classe de solicitação para upload de ativos de mídia auxiliares. Para obter detalhes sobre os parâmetros, consulte CreateUploadAttachedMedia.

UploadOptions

Estrutura de parâmetros de upload. Os itens a seguir descrevem os parâmetros.

  • void (*uploadProgressCallback) (int64_t, int64_t): configure uma função de callback para o progresso do upload. Se este parâmetro não for definido, as configurações padrão de callback serão usadas. Se definido como NULL, nenhum callback de progresso será invocado.

  • ecsRegionId: especifique a região da instância ECS onde o script de upload está implantado. Se a região da ECS for igual à região de armazenamento do ApsaraVideo VOD, o arquivo será enviado automaticamente pela rede interna.

  • multipartUploadLimit: defina o limite de tamanho de arquivo para upload multipart. Unidade: bytes. Valor padrão: 10 MB. Este parâmetro é válido apenas para uploads de vídeo.

  • multipartUploadOnceSize: defina o tamanho de cada parte no upload multipart. Unidade: bytes. Valor padrão: 10 MB. Este parâmetro é válido apenas para uploads de vídeo.

  • tmpDir: especifique um diretório local para armazenar temporariamente os arquivos. Este parâmetro é válido apenas para o upload de arquivos online.

uploadLocalVideo

Operação de API usada para enviar vídeos locais.

uploadWebVideo

Operação de API usada para enviar vídeos online.

uploadLocalImage

Operação de API usada para enviar imagens locais.

uploadWebImage

Operação de API usada para enviar imagens online.

uploadLocalAttachedMedia

Operação de API usada para enviar ativos de mídia auxiliares locais.

uploadWebAttachedMedia

Operação de API usada para enviar ativos de mídia auxiliares online.

uploadLocalM3u8

Operação de API usada para enviar vídeos M3U8 locais.

uploadWebM3u8

Operação de API usada para enviar vídeos M3U8 online.

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

Diretório

Descrição

uploadVideo.cpp

Código de exemplo para upload de vídeos.

uploadImage.cpp

Código de exemplo para upload de imagens.

uploadAttachedMedia.cpp

Código de exemplo para upload de ativos de mídia auxiliares.

Cenário 1: Upload de arquivos de áudio e vídeo

Arquivos comuns de áudio e vídeo

O ApsaraVideo VOD permite o envio de arquivos de áudio ou vídeo por um dos seguintes métodos:

  • Use o upload multipart para enviar um arquivo local. É possível enviar arquivos de até 48,8 TB. O upload retomável não é suportado. Para mais informações, consulte a função testUploadLocalVideo no código de exemplo.

  • Use a URL do arquivo para enviar um arquivo online. O tamanho máximo suportado é de 48,8 TB. Antes de enviar arquivos online, baixe-os para um disco local e certifique-se de que há espaço suficiente disponível. Para mais detalhes, consulte a função testUploadWebVideo no código de exemplo a seguir.

Mostrar código de exemplo

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

Arquivos M3U8

Mostrar código de exemplo

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

Cenário 2: Upload de imagens

Mostrar código de exemplo

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

Mostrar código de exemplo

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

Cenário 3: Upload de ativos de mídia auxiliares

Mostrar código de exemplo

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

Mostrar código de exemplo

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