4.1 示例 1:媒资上传(20M 以下)
场景描述
若您需要将存储在本地的音视频文件上传到点播服务,并在上传后,自动处理音视 频,如发布、转码等,您可以调用VOD API进行媒资创建,并通过OBS API将音视频文 件上传到VOD的存储桶中。
本章节指导用户如何使用API调用的方式上传一个大小20M以下的视频文件。
前提条件
● 已明确需要上传媒资的点播服务所在的区域信息,并获取该区域的Endpoint,您 可以从地区和终端节点获取。
● 已获取需要上传到对应点播服务所在区域的项目ID,具体获取方法请参见15.3 获 取项目ID。
总体流程
图4-1 媒资上传流程
1. 调用创建媒资:上传方式接口创建媒资。
2. 使用PUT方法将本地媒资文件上传。
3. 调用确认媒资上传接口完成媒资创建确认。
操作步骤
步骤1 获取用户Token,用于调用点播接口时进行认证鉴权。
详细信息请参见3.1 构造请求。以“华北-北京四”为示例,若您需要调用其它区域的 点播接口,请替换成对应区域的IAM终端节点。
POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json
{ "auth": { "identity": { "methods": [ "password"
],
"password": { "user": {
"name": "username", "password": "password", "domain": {
"name": "domainname"
} } } }, "scope": { "project": {
"name": "projectname"
} } }}
如图4-2所示,红框中的信息为获取用户Token。
图4-2 获取用户 Token
步骤2 调用创建媒资:上传方式接口,创建媒资,在请求头中增加“X-Auth-Token”字段,
其中“Value”为步骤1获取的。
POST https://vod.cn-north-4.myhuaweicloud.com/v1.0/{project_id}/asset { "title": "test",
"description": "test", "category_id": 87748, "video_name": "test.mp4", "video_type": "MP4", "cover_type": "PNG", "tags":"mytags,test", "auto_publish": 0,
"template_group_name":"test", "subtitles":[
说明
调用IAM接口的区域需与调用点播接口的区域一致,如调用“cn-north-4”区域的IAM接口获取 用户Token,则该Token仅能用于调用“cn-north-4”区域点播接口的鉴权。
步骤3 在返回参数中获取“video_upload_url”,“cover_upload_url”和
“subtitle_upload_urls”。
{ "asset_id": "3f40a2c7c60454f5f84381e0313ca230",
"video_upload_url": "https://vod-bucket-81.obs.cn-north-4.myhuaweicloud.com:
443/474bcff2992f4be5b883a2fb9cec7343/3f40a2c7c60454f5f84381e0313ca230/
cdeda86cd1b7b3dd760a3ff28a5ee497.mp4?
AWSAccessKeyId=BG923RWHL4HFXOGKCVAL&Expires=1560420274&Signature=9f
%2BZcdD6SwjIU5ARHYiP6YY1Lyw%3D",
"cover_upload_url": "https://vod-bucket-81.obs.cn-north-4.myhuaweicloud.com:
443/474bcff2992f4be5b883a2fb9cec7343/3f40a2c7c60454f5f84381e0313ca230/cover/Cover0.png?
AWSAccessKeyId=BG923RWHL4HFXOGKCVAL&Expires=1560420274&Signature=4Aa88NK%2By
%2By1Xo0RvLpOvuaFCoE%3D", "subtitle_upload_urls": [
"https://vod-bucket-81.obs.cn-north-4.myhuaweicloud.com:
443/474bcff2992f4be5b883a2fb9cec7343/3f40a2c7c60454f5f84381e0313ca230/subtitle/1.srt?
AWSAccessKeyId=BG923RWHL4HFXOGKCVAL&Expires=1560420274&Signature=l0UclE9yfaVrxkl0kaNnr
%2BemG98%3D"
], "target": {
"bucket": "vod-bucket-81", "location": "cn-north-4",
"object": "474bcff2992f4be5b883a2fb9cec7343/3f40a2c7c60454f5f84381e0313ca230/
cdeda86cd1b7b3dd760a3ff28a5ee497.mp4"
}}
步骤4 使用PUT请求分别向“video_upload_url”,“cover_upload_url”和
“subtitle_upload_urls”中上传视频文件、封面图片和字幕文件。
其中,请求头“Content-Type”需要根据上传的文件类型分别设置,如下所示:
● 视频文件:video/视频格式,如:“video/mp4”。更多视频文件格式对应的请求 头填写规则,请参见表4-1。
● 图片文件:image/图片格式,如:“image/png”。
● 字幕文件:application/octet-stream。
表4-1 请求头填写说明
文件后缀 Content-Type
MP4 video/mp4
MOV video/quicktime
MXF application/mxf
TS video/mp2t
MPG video/mpeg
FLV video/flv
WMV video/x-ms-wmv
AVI video/x-msvideo
文件后缀 Content-Type
M4V video/m4v
F4V application/f4v
MPEG video/mpeg
M3U8 application/octet-stream
_3GP/3GP video/3gpp
ASF video/x-ms-asf
MKV video/x-matroska
WEBM video/webm
MPD video/dash
步骤5 调用接口确认媒资上传接口,完成媒资上传。
POST https://vod.cn-north-4.myhuaweicloud.com/v1.0/{project_id}/asset/status/uploaded { "asset_id": "0f4d3f1f32ec353d8866f2d84a036124",
"status":"CREATED"
}
----结束
媒资上传成功后,您可以在视频点播控制台查看媒资相关详细信息。
4.2 示例 2:媒资分段上传(20M 以上)
场景描述
4.1 示例1:媒资上传(20M以下)已介绍了如何将小于20M大小的音视频文件上传到 点播服务。若您需要上传的音视频文件的大小大于20M,您可以调用VOD API进行分 段上传。
本章节指导用户如何使用API调用的方式上传一个文件大小大于20M的视频文件。
前提条件
● 已明确需要上传媒资的点播服务所在的区域信息,并获取该区域的Endpoint,您 可以从地区和终端节点获取。
● 已获取需要上传到对应点播服务所在区域的项目ID,具体获取方法请参见15.3 获 取项目ID。
● 待上传的视频文件已完成二进制流分割,每个分段的大小不能超过20M。
总体流程
图4-3 媒资上传流程
1. 获取用户Token
2. 创建点播媒资
3. 获取初始化上传任务的授权
4. 初始化上传任务
5. 获取上传分段的授权
步骤1 获取用户Token,用于调用点播接口时进行认证鉴权。
详细信息请参见3.1 构造请求。以“华北-北京四”为示例,若您需要调用其它区域的 点播接口,请替换成对应区域的IAM终端节点。
POST https://iam.cn-north-4.myhuaweicloud.com/v3/auth/tokens Content-Type: application/json
{ "auth": {
图4-4 获取用户 Token
步骤2 调用创建媒资:上传方式接口,创建媒资。
1. 选择POST请求方法并输入URI。
https://vod.cn-north-4.myhuaweicloud.com/v1.0/{project_id}/asset
2. 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
3. Request Body中传入参数如下:
{ "title": "testVideo", "description": "test", "category_id": 87748, "video_name": "test.mp4", "video_type": "MP4", "auto_publish": 0 }
说明
示例仅设置了部分媒资参数,您可以根据实际需求参考创建媒资:上传方式接口的请求参 数设置。
4. 请求响应成功后,返回处理媒资ID、视频上传地址及存储视频文件的OBS桶信 息。{
"asset_id": "fea62a2845e43c37b4cbfb017c0d0821",
"video_upload_url": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:
443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4?
AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596700132&Signature=GiHTcO2avO9B84sH8A 5wL2GieCI%3D",
"cover_upload_url": null, "subtitle_upload_urls": [], "target": {
"bucket": "vod-bucket-65-cn-north-4", "location": "cn-north-4",
"object": "05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4"
} }
步骤3 调用获取分段上传授权接口,向OBS获取初始化上传任务的授权。
1. 选择GET请求方法并输入URI。
https://vod.cn-north-4.myhuaweicloud.com/v1.1/{project_id}/asset/authority?
http_verb=POST&content_type=video/mp4&bucket=vod-bucket-65-cn-north-4&object_key=05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4
– http_verb:分段上传时调用OBS接口的HTTP方法,具体操作需要的HTTP方 法请参见OBS API参考。
– content_type:文件类型对应的HTTP Content-type,您需要根据上传的视频 格式进行设置,如MP4格式对应的是“video/mp4”。
– bucket:存储视频文件的OBS桶,步骤2.d中返回的对应“bucket”字段。
– object_key:OBS桶中的对象名,步骤2.d中返回的对应“object”字段。
2. 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
3. 请求响应成功后,返回授权信息。
{ "sign_str": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:
443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
1. 选择POST请求方法并输入步骤3.c返回的已授权URI。
https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:
443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4?
uploads&AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596706429&Signature=5D15iJUcTko WLpE2vn54FQZskXA%3D
2. 请求消息头中增加“Content-Type”,值设置为文件类型,请根据实际上传,如 MP4格式设置为“video/mp4”。
3. 请求成功,返回初始化信息。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<InitiateMultipartUploadResult xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
<Bucket>vod-bucket-65-cn-north-4</Bucket>
<Key>05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4</Key>
<UploadId>00000173C2ED862344C835374DFE33C8</UploadId>
</InitiateMultipartUploadResult>
步骤5 调用获取分段上传授权接口,获取分段上传的授权。
1. 选择GET请求方法并输入URI。
https://vod.cn-north-4.myhuaweicloud.com/v1.1/{project_id}/asset/authority?
http_verb=PUT&content_type=video/mp4&bucket=vod-bucket-65-cn-north-4&object_key=05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4&content_md5=hHZXtgjYL2fmLpu%2byQ%2bXgg%3d
%3d&upload_id=00000173C2ED862344C835374DFE33C8&part_number=1
– http_verb:分段上传的HTTP方法为PUT。
– content_type:文件类型对应的HTTP Content-type,您需要根据上传的视频 格式进行设置,如MP4格式对应的是“video/mp4”。
– bucket:存储视频文件的OBS桶,步骤2.d中返回的对应“bucket”字段。
– object_key:OBS桶中的对象名,步骤2.d中返回的对应“object”字段。
– content_md5:每个视频分段的MD5值,该值为可选设置,具体生成方法可 以参考15.5 生成MD5值。
– upload_id:上传任务的id,步骤4.c返回的“UploadId”字段。
– part_number:每一个上传段的段号。
2. 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
3. 请求响应成功后,返回分段上传的授权信息。
{ "sign_str": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:
443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
1. 选择PUT请求方法并输入步骤5.c返回的已授权URI。
https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:
443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4?
AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596708691&partNumber=1&uploadId=000001 73C2ED862344C835374DFE33C8&Signature=cjw3CmUFeNBFAuLWBTsPRp9NfsQ%3D
2. 请求消息头中增加“Content-Type”,值设置为“application/octet-stream”。
1. 选择GET请求方法并输入URI。
https://vod.cn-north-4.myhuaweicloud.com/v1.1/{project_id}/asset/authority?
http_verb=GET&bucket=vod-bucket-65-cn-north-4&object_key=05041fffa4002****f6dc009cc6f8f33/
fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4&upload_id=000001717E28524B44CEFF2C2CE1B06A
– http_verb:合并段的HTTP方法为GET。
– bucket:存储视频文件的OBS桶,步骤2.d中返回的对应“bucket”字段。
– object_key:OBS桶中的对象名,步骤2.d中返回的对应“object”字段。
– upload_id:上传任务的id,步骤4.c返回的“UploadId”字段。
2. 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
3. 请求响应成功后,返回列举已上传段的授权信息。
{ "sign_str": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:
443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
1. 择GET请求方法并输入步骤8.c返回的已授权URI。
https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ListPartsResult xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/">
<Bucket>vod-bucket-65-cn-north-4</Bucket>
<Key>05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4</Key>
<UploadId>00000173C2ED862344C835374DFE33C8</UploadId>
<Initiator>
<ID>d9235b9f3cf549499924f6de095241af:a96ecebcb3994e34b074e48f3dfc8237</ID>
<DisplayName>xxx</DisplayName>
</Initiator>
<Owner>
<ID>d9235b9f3cf549499924f6de095241af</ID>
<DisplayName>xxx</DisplayName>
</Owner>
<StorageClass>STANDARD</StorageClass>
<PartNumberMarker>0</PartNumberMarker>
<NextPartNumberMarker>4</NextPartNumberMarker>
<MaxParts>1000</MaxParts>
<IsTruncated>false</IsTruncated>
<Part>
<PartNumber>1</PartNumber>
<LastModified>2020-08-06T09:05:10.192Z</LastModified>
<ETag>"847657b608d82f67e62e9bbec90f9782"</ETag>
<Size>10000000</Size>
</Part>
<Part>
<PartNumber>2</PartNumber>
<LastModified>2020-08-06T08:02:02.821Z</LastModified>
<ETag>"9a6a36ed9086a3a2fea130220e1e809c"</ETag>
<Size>10000000</Size>
</Part>
<Part>
<PartNumber>3</PartNumber>
<LastModified>2020-08-06T08:04:19.711Z</LastModified>
<ETag>"3a3afe552832bee0faf081c1e720067e"</ETag>
<Size>10000000</Size>
</Part>
<Part>
<PartNumber>4</PartNumber>
<LastModified>2020-08-06T07:23:17.160Z</LastModified>
<ETag>"6335af859c20ccef26b27ea691e7ecf7"</ETag>
<Size>7472445</Size>
</Part>
</ListPartsResult>
步骤10 调用获取分段上传授权接口,获取合并段授权。
1. 选择GET请求方法并输入URI。
https://vod.cn-north-4.myhuaweicloud.com/v1.1/{project_id}/asset/authority?
http_verb=POST&bucket=vod-bucket-65-cn-north-4&object_key=05041fffa4002****f6dc009cc6f8f33/
fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4&upload_id=00000173C2ED862344C835374DFE33C8
– http_verb:合并段的HTTP方法为POST。
– bucket:存储视频文件的OBS桶,步骤2.d中返回的对应“bucket”字段。
– object_key:OBS桶中的对象名,步骤2.d中返回的对应“object”字段。
– upload_id:上传任务的id,步骤4.c返回的“UploadId”字段。
2. 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
3. 请求响应成功后,返回合上传段的授权信息。
{ "sign_str": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:
443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
1. 选择POST请求方法并输入步骤10.c返回的已授权URI。
https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:
443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/
d1f221f09f6bffefb882c8f9e167483a.mp4?
AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596708691&partNumber=1&uploadId=000001 73C2ED862344C835374DFE33C8&Signature=cjw3CmUFeNBFAuLWBTsPRp9NfsQ%3D
2. 请求消息头中增加“Content-Type”,值设置为“application/xml”。
3. Request Body中传入参数如下:
<CompleteMultipartUpload>
<Part>
<PartNumber>1</PartNumber>
<ETag>"847657b608d82f67e62e9bbec90f9782"</ETag>
</Part>
<Part>
<PartNumber>2</PartNumber>
<ETag>"9a6a36ed9086a3a2fea130220e1e809c"</ETag>
</Part>
<Part>
<PartNumber>3</PartNumber>
<ETag>"3a3afe552832bee0faf081c1e720067e"</ETag>
<ETag>"3a3afe552832bee0faf081c1e720067e"</ETag>