示例2:媒资分段上传(20M以上)
场景描述
示例1:媒资上传(20M以下)已介绍了如何将小于20M大小的音视频文件上传到点播服务。若您需要上传的音视频文件的大小大于20M,您可以调用VOD API进行分段上传。
本章节指导用户如何使用API调用的方式上传一个文件大小大于20M的视频文件。
前提条件
总体流程
操作步骤
- 获取用户Token,用于调用点播接口时进行认证鉴权。
详细信息请参见构造请求。以“华北-北京四”为示例,若您需要调用其它区域的点播接口,请替换成对应区域的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" } } } }
如图2所示,红框中的信息为获取用户Token。 - 调用创建媒资:上传方式接口,创建媒资。
- 选择POST请求方法并输入URI。
https://vod.cn-north-4.myhuaweicloud.com/v1.0/{project_id}/asset
- 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
- Request Body中传入参数如下:
{ "title": "testVideo", "description": "test", "category_id": 87748, "video_name": "test.mp4", "video_type": "MP4", "auto_publish": 0 }
示例仅设置了部分媒资参数,您可以根据实际需求参考创建媒资:上传方式接口的请求参数设置。
- 请求响应成功后,返回处理媒资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=GiHTcO2avO9B84sH8A5wL2GieCI%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" } }
- 选择POST请求方法并输入URI。
- 调用获取分段上传授权接口,向OBS获取初始化上传任务的授权。
- 选择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,您需要根据上传的文件类型进行设置。
- bucket:存储视频文件的OBS桶,步骤2.d中返回的对应“bucket”字段。
- object_key:OBS桶中的对象名,步骤2.d中返回的对应“object”字段。
表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
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
- 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
- 请求响应成功后,返回授权信息。
{ "sign_str": "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=5D15iJUcTkoWLpE2vn54FQZskXA%3D" }
- 选择GET请求方法并输入URI。
- 调用OBS的初始化上传段任务接口,初始化视频分段上传任务。
OBS不支持直接在API Explorer上验证,需要使用postman等第三方工具,构造请求做验证。
- 选择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=5D15iJUcTkoWLpE2vn54FQZskXA%3D
- 请求消息头中增加“Content-Type”,值设置为文件类型,请根据实际上传。文件类型填写规则请参见步骤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>
- 选择POST请求方法并输入步骤3.c返回的已授权URI。
- 调用获取分段上传授权接口,获取分段上传的授权。
- 选择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,您需要根据上传的文件类型进行设置,文件类型填写规则请参见步骤3。
- bucket:存储视频文件的OBS桶,步骤2.d中返回的对应“bucket”字段。
- object_key:OBS桶中的对象名,步骤2.d中返回的对应“object”字段。
- content_md5:每个视频分段的MD5值,该值为必填项,具体生成方法可以参考生成MD5值。注意:如有特殊字符请求,需进行转义。
- upload_id:上传任务的id,步骤4.c返回的“UploadId”字段。
- part_number:每一个上传段的段号。
- 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
- 请求响应成功后,返回分段上传的授权信息。
{ "sign_str": "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=00000173C2ED862344C835374DFE33C8&Signature=cjw3CmUFeNBFAuLWBTsPRp9NfsQ%3D" }
- 选择GET请求方法并输入URI。
- 调用OBS的上传段接口,上传视频文件的第一个分段。
OBS不支持直接在API Explorer上验证,需要使用postman等第三方工具,构造请求做验证。
- 选择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=00000173C2ED862344C835374DFE33C8&Signature=cjw3CmUFeNBFAuLWBTsPRp9NfsQ%3D
- 请求消息头中增加“Content-Type”,值设置为“application/octet-stream”。若步骤5.a设置了“content_md5”参数,则请求消息头中必须增加“Content-MD5”,值设置为对应分段的MD5值(不需要转义),否则将会导致上传失败。
- 请求Body中使用二进制方式上传视频文件的第一个分段。
- 请求成功,返回状态码“200 OK”。
- 选择PUT请求方法并输入步骤5.c返回的已授权URI。
- 参考操作步骤5-步骤6,上传视频文件的所有分段。
- 调用获取分段上传授权接口,获取列举已上传段的授权。
- 选择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
- 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
- 请求响应成功后,返回列举已上传段的授权信息。
{ "sign_str": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596710054&uploadId=000001717E28524B44CEFF2C2CE1B06A&Signature=G5EOUr488cyPIretp8lgQZmpPw0%3D" }
- 选择GET请求方法并输入URI。
- 调用OBS接口列举已上传的段,获取视频文件所有上传段的相关信息。
注意:请求消息头中的“Content-Type”属性设置成null或者不携带。
- 选择GET请求方法并输入步骤8.c返回的已授权URI。
https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596710054&uploadId=000001717E28524B44CEFF2C2CE1B06A&Signature=G5EOUr488cyPIretp8lgQZmpPw0%3D
- 请求成功,返回已上传段的相关信息。
<?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>
- 选择GET请求方法并输入步骤8.c返回的已授权URI。
- 调用获取分段上传授权接口,获取合并段授权。
- 选择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
- 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
- 请求响应成功后,返回合上传段的授权信息。
{ "sign_str": "https://vod-bucket-65-cn-north-4.obs.cn-north-4.myhuaweicloud.com:443/05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4?AWSAccessKeyId=MZH0LUL329N1SSXNB3S4&Expires=1596709340&uploadId=000001717E28524B44CEFF2C2CE1B06A&Signature=Pa6IaMbH1Ofa0Vi%2BCbkdgmWzm70%3D" }
- 选择GET请求方法并输入URI。
- 调用OBS的合并段接口,将上传的分段合并成一个视频文件。
OBS不支持直接在API Explorer上验证,需要使用postman等第三方工具,构造请求做验证。
- 选择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=00000173C2ED862344C835374DFE33C8&Signature=cjw3CmUFeNBFAuLWBTsPRp9NfsQ%3D
- 请求消息头中增加“Content-Type”,值设置为“application/xml”。
- 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> </Part> <Part> <PartNumber>4</PartNumber> <ETag>"6335af859c20ccef26b27ea691e7ecf7"</ETag> </Part> </CompleteMultipartUpload>
- PartNumber:上传的段号。
- ETag:上传段成功后返回的ETag值,步骤9.b中的返回信息有每个段对应的ETag值。
- 请求成功,返回合并段的相关信息。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <CompleteMultipartUploadResult xmlns="http://obs.cn-north-4.myhuaweicloud.com/doc/2015-06-30/"> <Location>05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4</Location> <Bucket>vod-bucket-65-cn-north-4</Bucket> <Key>05041fffa4002****f6dc009cc6f8f33/fea62a2845e43c37b4cbfb017c0d0821/d1f221f09f6bffefb882c8f9e167483a.mp4</Key> <ETag>"87f450dd18b666dfcdf902ac6b162b5a-4"</ETag> </CompleteMultipartUploadResult>
- 选择POST请求方法并输入步骤10.c返回的已授权URI。
- 调用确认媒资上传接口,完成媒资上传确认。
- 选择POST请求方法并输入URI。
https://vod.cn-north-4.myhuaweicloud.com/v1.0/{project_id}/asset/status/uploaded
- 请求消息头中增加“X-Auth-Token”,值设置为步骤1中获取的用户Token。
- Request Body中传入参数如下:
{ "asset_id": "fea62a2845e43c37b4cbfb017c0d0821", "status":"CREATED" }
- 请求响应成功后,返回媒资ID。
{ "asset_id": "fea62a2845e43c37b4cbfb017c0d0821" }
- 选择POST请求方法并输入URI。
分段上传JavaScript语言代码示例
获取分段上传JavaScript语言的示例代码,如JavaScript所示。
分段上传Python语言代码示例
获取分段上传Python语言的示例代码,如Python所示。
分段上传Go语言代码示例
获取分段上传Go语言的示例代码,如Go所示。
分段上传PHP语言代码示例
获取分段上传PHP语言的示例代码,如PHP所示。