阅读374 返回首页    go 魔兽


调用示例__调用方式_API使用手册_视频点播-阿里云

对视频点播服务接口的调用是通过向视频点播服务端发送HTTP请求(可以通过HTTP或HTTPS通道发送),并获取视频点播服务对该请求响应结果的过程。视频点播服务端在接收到用户请求后,对请求做必要的身份验证和参数验证,在所有验证成功后根据请求的指定参数提交或完成相应操作,并把处理的结果以HTTP响应的形式返回给调用者。以下Java示例代码演示了如何添加公共请求参数、如何构造用请求参数构造规范化请求字符串,以及如何构造stringToSign字符串。示例假定所有请求参数放在一个Map对象里,使用的 Access Key ID是”testId”。,>

  1. final String HTTP_METHOD = "GET";
  2. Map<String, String> parameterMap = new HashMap<String, String>();
  3. // 加入请求公共参数
  4. parameterMap.put("Action", "QueryMediaList");
  5. parameterMap.put("Version", "2014-06-18");
  6. parameterMap.put("AccessKeyId", "testId"); //此处请替换成您自己的AccessKeyId
  7. parameterMap.put("Timestamp", formatIso8601Date(new Date()));
  8. parameterMap.put("SignatureMethod", "HMAC-SHA1");
  9. parameterMap.put("SignatureVersion", "1.0");
  10. parameterMap.put("SignatureNonce", UUID.randomUUID().toString());
  11. parameterMap.put("Format", "XML");
  12. // 加入方法特有参数
  13. parameterMap.put("MediaIds", "68a4d2629a339db3207963ac073a88cd");
  14. // 对参数进行排序
  15. List<String> sortedKeys = new ArrayList<String>(parameterMap.keySet());
  16. Collections.sort(sortedKeys);
  17. // 生成stringToSign字符
  18. final String SEPARATOR = "&";
  19. final String EQUAL = "=";
  20. StringBuilder stringToSign = new StringBuilder();
  21. stringToSign.append(HTTP_METHOD).append(SEPARATOR);
  22. stringToSign.append(percentEncode("/")).append(SEPARATOR);
  23. StringBuilder canonicalizedQueryString = new StringBuilder();
  24. for (String key : sortedKeys) {
  25. // 此处需要对key和value进行编码
  26. String value = parameterMap.get(key);
  27. canonicalizedQueryString.append(SEPARATOR).append(percentEncode(key)).append(EQUAL).append(percentEncode(value));
  28. }
  29. // 此处需要对canonicalizedQueryString进行编码
  30. stringToSign.append(percentEncode(canonicalizedQueryString.toString().substring(1)));

其中需要注意的是,Timestamp 参数要求符合 ISO8601 规范,并注意使用 UTC 时间,否则会遇到错误。下面的示例代码演示了如何生成符合规范的 Timestamp 字符串:

  1. private static final String ISO8601_DATE_FORMAT = "yyyy-MM-dd'T'HH:mm:ss'Z'";
  2. private static String formatIso8601Date(Date date) {
  3. SimpleDateFormat df = new SimpleDateFormat(ISO8601_DATE_FORMAT);
  4. df.setTimeZone(new SimpleTimeZone(0, "GMT"));
  5. return df.format(date);
  6. }

生成规范化请求字符串(示例中的 canonicalizedQueryString 变量),以及stringToSign 时,都需要进行必要的编码。编码的规则在签名机制一节中有详细描述。下面的示例代码演示了如何用 java.net.URLEncoder 类完成编码:

  1. private static final String ENCODE_TYPE = "UTF-8";
  2. private static String percentEncode(String value) throws UnsupportedEncodingException {
  3. if (value == null) return null;
  4. return URLEncoder.encode(value, ENCODE_TYPE).replace("+", "%20").replace("*", "%2A").replace("%7E", "~");
  5. }

假定使用的Access Key Id是”testid”, Access Key Secret是”testKeySecret”,用于计算 HMAC的 Key 就是”testKeySecret&”,最终计算得到的签名值为:

  1. 4wWO2zHYghfp14rz%2BNnZD3zNNoY%3D

下面的示例代码演示了如何计算签名(Java),注意事项(此段代码中有用到org.apache.commons.codec.binary.Base64类,要求包含此类的commons-codec.jar包在1.5及以上,目前发现commons-codec-1.4.jar存在问题):

  1. final String ALGORITHM = "HmacSHA1";
  2. final String ENCODING = "UTF-8";
  3. final String secret = "testKeySecret";//此处请替换成您的AccessKeySecret
  4. SecretKey key = new SecretKeySpec((secret + SEPARATOR).getBytes(ENCODE_TYPE), SignatureMethod.HMAC_SHA1);
  5. Mac mac = Mac.getInstance(ALGORITHM);
  6. mac.init(key);
  7. String signature = URLEncoder.encode(new String(
  8. new Base64().encode(mac.doFinal(stringToSign.toString().getBytes(ENCODE_TYPE))),
  9. ENCODE_TYPE), ENCODE_TYPE);
  10. // 生成请求URL
  11. StringBuilder requestURL;
  12. requestURL = new StringBuilder("https://mts.aliyuncs.com?");
  13. requestURL.append(URLEncoder.encode("Signature", ENCODE_TYPE)).append("=").append(signature);
  14. for (Map.Entry<String, String> e : parameterMap.entrySet()) {
  15. requestURL.append("&").append(percentEncode(e.getKey())).append("=").append(percentEncode(e.getValue()));
  16. }

最后得到的requestURL为:

  1. 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:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <QueryMediaListResponse>
  3. <MediaList>
  4. <Media>
  5. <CreationTime>2016-03-28T13:51:10Z</CreationTime>
  6. <MediaInfo>
  7. <Format>
  8. <FormatName>mov,mp4,m4a,3gp,3g2,mj2</FormatName>
  9. <Duration>5.014000</Duration>
  10. <FormatLongName>QuickTime / MOV</FormatLongName>
  11. <NumStreams>2</NumStreams>
  12. <StartTime>0.000000</StartTime>
  13. <Bitrate>1124.512</Bitrate>
  14. <NumPrograms>0</NumPrograms>
  15. <Size>704788</Size>
  16. </Format>
  17. <Streams>
  18. <SubtitleStreamList/>
  19. <AudioStreamList>
  20. <AudioStream>
  21. <Lang>und</Lang>
  22. <SampleFmt>fltp</SampleFmt>
  23. <CodecName>aac</CodecName>
  24. <CodecTimeBase>1/48000</CodecTimeBase>
  25. <Timebase>1/48000</Timebase>
  26. <CodecTag>0x6134706d</CodecTag>
  27. <Channels>2</Channels>
  28. <ChannelLayout>stereo</ChannelLayout>
  29. <Index>1</Index>
  30. <CodecTagString>mp4a</CodecTagString>
  31. <Samplerate>48000</Samplerate>
  32. <Duration>5.013333</Duration>
  33. <CodecLongName>AAC (Advanced Audio Coding)</CodecLongName>
  34. <StartTime>0.000000</StartTime>
  35. <Bitrate>165.448</Bitrate>
  36. </AudioStream>
  37. </AudioStreamList>
  38. <VideoStreamList>
  39. <VideoStream>
  40. <Lang>und</Lang>
  41. <PixFmt>yuv420p</PixFmt>
  42. <NetworkCost/>
  43. <Dar>0:1</Dar>
  44. <Profile>Main</Profile>
  45. <Height>720</Height>
  46. <Sar>0:1</Sar>
  47. <CodecName>h264</CodecName>
  48. <Timebase>1/11988</Timebase>
  49. <CodecTimeBase>50/2997</CodecTimeBase>
  50. <CodecTag>0x31637661</CodecTag>
  51. <HasBFrames>0</HasBFrames>
  52. <Index>0</Index>
  53. <CodecTagString>avc1</CodecTagString>
  54. <Duration>5.005005</Duration>
  55. <AvgFPS>29.97</AvgFPS>
  56. <CodecLongName>H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10</CodecLongName>
  57. <Level>40</Level>
  58. <StartTime>0.000000</StartTime>
  59. <Width>1280</Width>
  60. <Fps>29.97</Fps>
  61. <Bitrate>951.893</Bitrate>
  62. </VideoStream>
  63. </VideoStreamList>
  64. </Streams>
  65. </MediaInfo>
  66. <State>Normal</State>
  67. <MediaId>68a4d2629a339db3207963ac073a88cd</MediaId>
  68. <FileURL>https://inputfirst.oss-test.aliyun-inc.com/mediaWorkflow/noExistQueue/5b7f03fa-f399-4b42-aa27-273bc0fea28d-中文.mp4</FileURL>
  69. </Media>
  70. </MediaList>
  71. <RequestId>373A85E9-AD47-4FAD-B403-9C5E4A371AB2</RequestId>
  72. </QueryMediaListResponse>

最后更新:2016-11-23 16:04:19

  上一篇:go 类目管理__媒体库管理_开发人员指南_视频点播-阿里云
  下一篇:go 新增媒体工作流__媒体工作流接口_API使用手册_视频点播-阿里云