调用示例__调用方式_API使用手册_视频点播-阿里云
对视频点播服务接口的调用是通过向视频点播服务端发送HTTP请求(可以通过HTTP或HTTPS通道发送),并获取视频点播服务对该请求响应结果的过程。视频点播服务端在接收到用户请求后,对请求做必要的身份验证和参数验证,在所有验证成功后根据请求的指定参数提交或完成相应操作,并把处理的结果以HTTP响应的形式返回给调用者。以下Java示例代码演示了如何添加公共请求参数、如何构造用请求参数构造规范化请求字符串,以及如何构造stringToSign字符串。示例假定所有请求参数放在一个Map
final String HTTP_METHOD = "GET";Map<String, String> parameterMap = new HashMap<String, String>();// 加入请求公共参数parameterMap.put("Action", "QueryMediaList");parameterMap.put("Version", "2014-06-18");parameterMap.put("AccessKeyId", "testId"); //此处请替换成您自己的AccessKeyIdparameterMap.put("Timestamp", formatIso8601Date(new Date()));parameterMap.put("SignatureMethod", "HMAC-SHA1");parameterMap.put("SignatureVersion", "1.0");parameterMap.put("SignatureNonce", UUID.randomUUID().toString());parameterMap.put("Format", "XML");// 加入方法特有参数parameterMap.put("MediaIds", "68a4d2629a339db3207963ac073a88cd");// 对参数进行排序List<String> sortedKeys = new ArrayList<String>(parameterMap.keySet());Collections.sort(sortedKeys);// 生成stringToSign字符final String SEPARATOR = "&";final String EQUAL = "=";StringBuilder stringToSign = new StringBuilder();stringToSign.append(HTTP_METHOD).append(SEPARATOR);stringToSign.append(percentEncode("/")).append(SEPARATOR);StringBuilder canonicalizedQueryString = new StringBuilder();for (String key : sortedKeys) {// 此处需要对key和value进行编码String value = parameterMap.get(key);canonicalizedQueryString.append(SEPARATOR).append(percentEncode(key)).append(EQUAL).append(percentEncode(value));}// 此处需要对canonicalizedQueryString进行编码stringToSign.append(percentEncode(canonicalizedQueryString.toString().substring(1)));
其中需要注意的是,Timestamp 参数要求符合 ISO8601 规范,并注意使用 UTC 时间,否则会遇到错误。下面的示例代码演示了如何生成符合规范的 Timestamp 字符串:
private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";private static String formatIso8601Date(Date date) {SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT);df.setTimeZone(new SimpleTimeZone(0, "GMT"));return df.format(date);}
生成规范化请求字符串(示例中的 canonicalizedQueryString 变量),以及stringToSign 时,都需要进行必要的编码。编码的规则在签名机制一节中有详细描述。下面的示例代码演示了如何用 java.net.URLEncoder 类完成编码:
private static final String ENCODE_TYPE = "UTF-8";private static String percentEncode(String value) throws UnsupportedEncodingException {if (value == null) return null;return URLEncoder.encode(value, ENCODE_TYPE).replace("+", "%20").replace("*", "%2A").replace("%7E", "~");}
假定使用的Access Key Id是”testid”, Access Key Secret是”testKeySecret”,用于计算 HMAC的 Key 就是”testKeySecret&”,最终计算得到的签名值为:
4wWO2zHYghfp14rz%2BNnZD3zNNoY%3D
下面的示例代码演示了如何计算签名(Java),注意事项(此段代码中有用到org.apache.commons.codec.binary.Base64类,要求包含此类的commons-codec.jar包在1.5及以上,目前发现commons-codec-1.4.jar存在问题):
final String ALGORITHM = "HmacSHA1";final String ENCODING = "UTF-8";final String secret = "testKeySecret";//此处请替换成您的AccessKeySecretSecretKey key = new SecretKeySpec((secret + SEPARATOR).getBytes(ENCODE_TYPE), SignatureMethod.HMAC_SHA1);Mac mac = Mac.getInstance(ALGORITHM);mac.init(key);String signature = URLEncoder.encode(new String(new Base64().encode(mac.doFinal(stringToSign.toString().getBytes(ENCODE_TYPE))),ENCODE_TYPE), ENCODE_TYPE);// 生成请求URLStringBuilder requestURL;requestURL = new StringBuilder("https://mts.aliyuncs.com?");requestURL.append(URLEncoder.encode("Signature", ENCODE_TYPE)).append("=").append(signature);for (Map.Entry<String, String> e : parameterMap.entrySet()) {requestURL.append("&").append(percentEncode(e.getKey())).append("=").append(percentEncode(e.getValue()));}
最后得到的requestURL为:
https://mts.aliyuncs.com?Signature=4wWO2zHYghfp14rz%2BNnZD3zNNoY%3D&Format=XML&AccessKeyId=BlctR6mMqO6mhSxD&Action=QueryMediaList&SignatureMethod=HMAC-SHA1&SignatureNonce=de83cb18-fba7-44d3-b648-4c3ac16ccd2a&SignatureVersion=1.0&Version=2014-06-18&MediaIds=68a4d2629a339db3207963ac073a88cd&Timestamp=2016-04-01T09%3A43%3A18Z
接下来,通过HTTP请求的方式向上面的URL地址发送HTTP请求,并得到视频云点播服务端的响应结果(示例),此处响应结果格式指定为XML:
<?xml version="1.0" encoding="utf-8"?><QueryMediaListResponse><MediaList><Media><CreationTime>2016-03-28T13:51:10Z</CreationTime><MediaInfo><Format><FormatName>mov,mp4,m4a,3gp,3g2,mj2</FormatName><Duration>5.014000</Duration><FormatLongName>QuickTime / MOV</FormatLongName><NumStreams>2</NumStreams><StartTime>0.000000</StartTime><Bitrate>1124.512</Bitrate><NumPrograms>0</NumPrograms><Size>704788</Size></Format><Streams><SubtitleStreamList/><AudioStreamList><AudioStream><Lang>und</Lang><SampleFmt>fltp</SampleFmt><CodecName>aac</CodecName><CodecTimeBase>1/48000</CodecTimeBase><Timebase>1/48000</Timebase><CodecTag>0x6134706d</CodecTag><Channels>2</Channels><ChannelLayout>stereo</ChannelLayout><Index>1</Index><CodecTagString>mp4a</CodecTagString><Samplerate>48000</Samplerate><Duration>5.013333</Duration><CodecLongName>AAC (Advanced Audio Coding)</CodecLongName><StartTime>0.000000</StartTime><Bitrate>165.448</Bitrate></AudioStream></AudioStreamList><VideoStreamList><VideoStream><Lang>und</Lang><PixFmt>yuv420p</PixFmt><NetworkCost/><Dar>0:1</Dar><Profile>Main</Profile><Height>720</Height><Sar>0:1</Sar><CodecName>h264</CodecName><Timebase>1/11988</Timebase><CodecTimeBase>50/2997</CodecTimeBase><CodecTag>0x31637661</CodecTag><HasBFrames>0</HasBFrames><Index>0</Index><CodecTagString>avc1</CodecTagString><Duration>5.005005</Duration><AvgFPS>29.97</AvgFPS><CodecLongName>H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10</CodecLongName><Level>40</Level><StartTime>0.000000</StartTime><Width>1280</Width><Fps>29.97</Fps><Bitrate>951.893</Bitrate></VideoStream></VideoStreamList></Streams></MediaInfo><State>Normal</State><MediaId>68a4d2629a339db3207963ac073a88cd</MediaId><FileURL>https://inputfirst.oss-test.aliyun-inc.com/mediaWorkflow/noExistQueue/5b7f03fa-f399-4b42-aa27-273bc0fea28d-中文.mp4</FileURL></Media></MediaList><RequestId>373A85E9-AD47-4FAD-B403-9C5E4A371AB2</RequestId></QueryMediaListResponse>
最后更新:2016-11-23 16:04:19
上一篇:
类目管理__媒体库管理_开发人员指南_视频点播-阿里云
下一篇:
新增媒体工作流__媒体工作流接口_API使用手册_视频点播-阿里云
表数据量统计__扩展工具_用户指南(RDBMS)_数据管理-阿里云
BandwidthPackagePublicIpMonitorDataSetType__数据类型_API参考_专有网络 VPC-阿里云
数据量大,统计结果不准确___技术运维问题_开放搜索-阿里云
OSS 参考使用说明__开发准备_开发人员指南_E-MapReduce-阿里云
服务入口__API-Reference_日志服务-阿里云
阿里云栖大会上,何止千亿投资达摩院
OssDemo简介__安卓应用示例_最佳实践_对象存储 OSS-阿里云
企业邮箱在iPhone5上使用的设置说明__客户端使用_邮箱常见问题_企业邮箱-阿里云
Android SDK 使用手册__使用SDK调用已开放API_SDK_API 网关-阿里云
修改实例描述__实例管理_开放API_分布式关系型数据库 DRDS-阿里云
相关内容
常见错误说明__附录_大数据计算服务-阿里云
发送短信接口__API使用手册_短信服务-阿里云
接口文档__Android_安全组件教程_移动安全-阿里云
运营商错误码(联通)__常见问题_短信服务-阿里云
设置短信模板__使用手册_短信服务-阿里云
OSS 权限问题及排查__常见错误及排除_最佳实践_对象存储 OSS-阿里云
消息通知__操作指南_批量计算-阿里云
设备端快速接入(MQTT)__快速开始_阿里云物联网套件-阿里云
查询API调用流量数据__API管理相关接口_API_API 网关-阿里云
使用STS访问__JavaScript-SDK_SDK 参考_对象存储 OSS-阿里云