本文通过示例详细介绍如何使用服务端上传SDK(C/C++语言)将各类媒体文件上传至点播存储。
上传流程
前提条件
-
您已经开通了视频点播服务。开通步骤请参见开通视频点播服务。
- 您已经完成上传相关的系统配置,包括启用目标存储地域的存储地址和配置回调。操作指引请参见存储管理及回调设置。
- 您已准备好用于调用点播服务的账号。为避免阿里云账号AccessKey泄露带来的安全风险,推荐您创建RAM用户并授予其VOD相关权限。然后使用RAM用户的AK对(AccessKey ID和AccessKey Secret)访问点播服务。操作指引请参见创建RAM用户并授权。
- (可选)如需使用STS临时授权方式(阿里云Security Token Service)访问点播服务,请为RAM用户创建角色并授予角色VOD相关权限。操作指引请参见创建角色并进行STS临时授权。
说明 STS临时授权方式的适用场景请参见凭证方式与STS方式对比。
集成C/C++上传SDK
说明
- 此处以SDK1.0.0版本举例说明。其他版本请根据实际情况操作。
- 上传SDK及示例代码解压后的目录详细信息,请参见下文目录说明。
更新C/C++上传SDK
若发现新的接口或已有接口新的功能在当前SDK没有,请下载最新的C/C++上传SDK覆盖到本地SDK文件。更多信息,请参见服务端上传SDK。
说明 您可以打开aliyun-c-sdk-vod目录下的ChangeLog.txt文件查看当前SDK的版本号和发布日期。
音视频上传
普通音视频音视频上传目前支持以下类型文件上传:
- 上传本地文件,使用分片上传,最大支持48.8 TB的单个文件,不支持断点续传。请参见testUploadLocalVideo函数。
- 上传网络文件,可指定文件URL进行上传,最大支持48.8 TB的单个文件。该上传方式需要先将网络文件下载到本地磁盘,再进行上传,所以要保证本地磁盘有充足的空间。请参见示例代码中的testUploadWebVideo函数。
示例代码
M3U8文件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****";
//视频分类ID
request.cateId = "1";
//自定义视频封面的URL地址,coverURL示例:http://example.com/example-****.jpg
request.coverURL = "<your cover URL>";
//视频标签
request.tags = "test1,test2";
//转码模板组ID
request.templateGroupId = "6ae347b0140181ad371d197ebe28****";
//存储地址,storageLocation示例:example-bucket-****.oss-cn-shanghai.aliyuncs.com
requests.storageLocation = "<your torageLocation>";
Json::Value userData;
Json::Value callbackUrl;
//CallbackURL示例: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;
//设置上传脚本部署的ECS区域(如果有),如与视频点播存储同一区域会自动启用内网上传
//uploadOptions.ecsRegionId = "cn-shanghai";
//设置自定义回调函数,否则设置为默认,设置为NULL不回调
//uploadOptions.uploadProgressCallback = testCallback;
//uploadOptions.multipartUploadLimit = 20*1024*1024;//设置分片上传阈值
//uploadOptions.multipartUploadOnceSize = 10*1024*1024;//设置分片上传分片大小
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;
//设置上传脚本部署的ECS区域(如果有),如与视频点播存储同一区域会自动启用内网上传
//uploadOptions.ecsRegionId = "cn-shanghai";
//设置自定义回调函数,否则设置为默认,设置为NULL不回调
//uploadOptions.uploadProgressCallback = testCallback;
//uploadOptions.multipartUploadLimit = 20*1024*1024;//设置分片上传阈值
//uploadOptions.multipartUploadOnceSize = 10*1024*1024;//设置分片上传分片大小
//设置下载临时目录,默认为/tmp/
//uploadOptions.tmpDir = "/tmp/";
VodApiResponse result = uploadWebVideo(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("<Your AccessKeyId>", "<Your AccessKeySecret>");
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());
}
示例代码
void testCallback(int64_t consumed_bytes, int64_t total_bytes)
{
printf("total :%ld, %ld\n", consumed_bytes, total_bytes);
}
//测试上传本地m3u8视频
VodApiResponse testUploadLocalM3u8(VodCredential authInfo) {
CreateUploadVideoRequest request;
//视频源文件名
request.fileName = "testLocal****.m3u8";
//视频标题
request.title = "testUploadLocalM3u8****";
list<string> tsList;
//注意:如果不添加则会自动解析
//tsList.push_back("/tmp/1.ts");
UploadOptions uploadOptions;
VodApiResponse result = uploadLocalM3u8(authInfo, request, "./test****.m3u8", tsList, uploadOptions);
return result;
}
//测试上传网络m3u8视频
VodApiResponse testUploadWebM3u8(VodCredential authInfo) {
CreateUploadVideoRequest request;
//视频源文件名
request.fileName = "testWeb****.m3u8";
//视频标题
request.title = "testUploadWebM3u8****";
list<string> tsList;
//注意:如果不添加则会自动解析
//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;
}
#### 调用测试代码 ####
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("<Your AccessKeyId>", "<Your AccessKeySecret>");
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());
}
图片上传
部分代码示例如下所示:
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;
//设置上传脚本部署的ECS区域(如有),如与点播存储同一区域会自动启用内网上传
//uploadOptions.ecsRegionId = "cn-shanghai";
//设置自定义回调函数,否则设置为默认,设置为NULL不回调
//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;
//设置上传脚本部署的ECS区域(如有),如与点播存储同一区域会自动启用内网上传
//uploadOptions.ecsRegionId = "cn-shanghai";
//设置自定义回调函数,否则设置为默认,设置为NULL不回调
//uploadOptions.uploadProgressCallback = testCallback;
//设置下载临时目录,默认为/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[]) {
VodCredential authInfo = initVodClient("<Your AccessKeyId>", "<Your AccessKeySecret>");
VodApiResponse response;
response = testUploadLocalImage(authInfo);
//response = testUploadWebImage(authInfo);
printf("httpCode: %d, result: %s\n", response.httpCode, response.result.c_str());
}
辅助媒资上传
部分代码示例如下所示:
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;
//设置上传脚本部署的ECS区域(如有),如与点播存储同一区域会自动启用内网上传
//uploadOptions.ecsRegionId = "cn-shanghai";
//设置自定义回调函数,否则设置为默认,设置为NULL不回调
//uploadOptions.uploadProgressCallback = testCallback;
return uploadLocalAttachedMedia(authInfo, request, "./test.png", uploadOptions);
}
VodApiResponse testUploadWebAttachedMedia(VodCredential authInfo)
{
CreateUploadAttachedMediaRequest request;
//业务类型
request.businessType = "watermark";
//文件扩展名
request.mediaExt = "png";
//标题
request.title = "testUploadWebAttachedMedia";
UploadOptions uploadOptions;
//设置上传脚本部署的ECS区域(如有),如与点播存储同一区域会自动启用内网上传
//uploadOptions.ecsRegionId = "cn-shanghai";
//设置自定义回调函数,否则设置为默认,设置为NULL不回调
//uploadOptions.uploadProgressCallback = testCallback;
//设置下载临时目录,默认为/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[]) {
VodCredential authInfo = initVodClient("<Your AccessKeyId>", "<Your AccessKeySecret>");
VodApiResponse response;
response = testUploadLocalAttachedMedia(authInfo);
//response = testUploadWebAttachedMedia(authInfo);
printf("httpCode: %d, result: %s\n", response.httpCode, response.result.c_str());
}
C/C++上传SDK目录说明
/VodSDK-C_1.0.0.gz解压目录/VodSDK-C_1.0.0/aliyun-c-sdk-vod/src/upload.h目录 | 说明 |
---|---|
CreateUploadVideoRequest | 上传视频的请求类,字段请参见获取音视频上传地址和凭证。 |
CreateUploadImageRequest | 上传图片的请求类,字段请参见获取图片上传地址和凭证。 |
CreateUploadAttachedMediaRequest | 上传辅助媒资的请求类,字段请参见获取辅助媒资上传地址和凭证。 |
UploadOptions | 上传参数结构体,包含如下参数:
|
uploadLocalVideo | 上传本地视频。 |
uploadWebVideo | 上传网络视频。 |
uploadLocalImage | 上传本地图片。 |
uploadWebImage | 上传网络图片。 |
uploadLocalAttachedMedia | 上传本地辅助媒资文件。 |
uploadWebAttachedMedia | 上传网络辅助媒资文件。 |
uploadLocalM3u8 | 上传本地m3u8视频。 |
uploadWebM3u8 | 上传网络m3u8视频。 |
目录 | 说明 |
---|---|
uploadVideo.cpp | 上传视频的示例代码。 |
uploadImage.cpp | 上传图片的示例代码。 |
uploadAttachedMedia.cpp | 上传辅助媒资的示例代码。 |