全部产品
视频点播

调用示例

更新时间:2017-08-08 18:05:19   分享:   

调用示例

对视频点播服务接口的调用是通过向视频点播服务端发送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", "GetVideoPlayAuth");
  5. parameterMap.put("Version", "2017-03-21");
  6. parameterMap.put("AccessKeyId", "testId"); //此处请替换成您自己的AccessKeyId
  7. parameterMap.put("Timestamp", "2017-03-29T12:09:11Z");//此处将时间戳固定只是测试需要,这样此示例中生成的签名值就不会变,方便您对比验证,可变时间戳的生成需要用下边这句替换
  8. //parameterMap.put("Timestamp", formatIso8601Date(new Date()));
  9. parameterMap.put("SignatureMethod", "HMAC-SHA1");
  10. parameterMap.put("SignatureVersion", "1.0");
  11. parameterMap.put("SignatureNonce", "578a50c1-280d-4a34-bffc-e06aa6b2df76");//此处将唯一随机数固定只是测试需要,这样此示例中生成的签名值就不会变,方便您对比验证,可变唯一随机数的生成需要用下边这句替换
  12. //parameterMap.put("SignatureNonce", UUID.randomUUID().toString());
  13. parameterMap.put("Format", "JSON");
  14. // 加入方法特有参数
  15. parameterMap.put("VideoId", "68a4d2629a339db3207963ac073a88cd");
  16. // 对参数进行排序
  17. List<String> sortedKeys = new ArrayList<String>(parameterMap.keySet());
  18. Collections.sort(sortedKeys);
  19. // 生成stringToSign字符
  20. final String SEPARATOR = "&";
  21. final String EQUAL = "=";
  22. StringBuilder stringToSign = new StringBuilder();
  23. stringToSign.append(HTTP_METHOD).append(SEPARATOR);
  24. stringToSign.append(percentEncode("/")).append(SEPARATOR);
  25. StringBuilder canonicalizedQueryString = new StringBuilder();
  26. for (String key : sortedKeys) {
  27. // 此处需要对key和value进行编码
  28. String value = parameterMap.get(key);
  29. canonicalizedQueryString.append(SEPARATOR).append(percentEncode(key)).append(EQUAL).append(percentEncode(value));
  30. }
  31. // 此处需要对canonicalizedQueryString进行编码
  32. 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. UI%2FwKfuvTtphzCKHwPhP0ErtLnc%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 secret = "testKeySecret";//此处请替换成您的AccessKeySecret
  3. SecretKey key = new SecretKeySpec((secret + SEPARATOR).getBytes(ENCODE_TYPE), SignatureMethod.HMAC_SHA1);
  4. Mac mac = Mac.getInstance(ALGORITHM);
  5. mac.init(key);
  6. String signature = URLEncoder.encode(new String(new Base64().encode(mac.doFinal(stringToSign.toString().getBytes(ENCODE_TYPE))),
  7. ENCODE_TYPE), ENCODE_TYPE);
  8. // 生成请求URL
  9. StringBuilder requestURL;
  10. requestURL = new StringBuilder("http://vod.cn-shanghai.aliyuncs.com?");
  11. requestURL.append(URLEncoder.encode("Signature", ENCODE_TYPE)).append("=").append(signature);
  12. for (Map.Entry<String, String> e : parameterMap.entrySet()) {
  13. requestURL.append("&").append(percentEncode(e.getKey())).append("=").append(percentEncode(e.getValue()));
  14. }

最后得到的requestURL为:

  1. http://vod.cn-shanghai.aliyuncs.com?Signature=UI%2FwKfuvTtphzCKHwPhP0ErtLnc%3D&SignatureVersion=1.0&Action=GetVideoPlayAuth&Format=JSON&VideoId=68a4d2629a339db3207963ac073a88cd&SignatureNonce=578a50c1-280d-4a34-bffc-e06aa6b2df76&Version=2017-03-21&AccessKeyId=testId&SignatureMethod=HMAC-SHA1&Timestamp=2017-03-29T12%3A09%3A11Z

接下来,通过HTTP请求的方式向上面的URL地址发送HTTP请求,并得到视频云点播服务端的响应结果(示例),此处响应结果格式指定为JSON:

  1. {
  2. "RequestId": "25818875-5F78-4A13-BEF6-D7393642CA58",
  3. "VideoMeta": {
  4. "VideoId": "93ab850b4f6f44eab54b6e91d24d81d4",
  5. "Title": "阿里云VOD",
  6. "Duration": 135.6,
  7. "CoverURL": "https://image.example.com/sample.jpg",
  8. "Status": "Normal"
  9. },
  10. "PlayAuth": "sstyYuew678999ew90000000xtt7TYUh"
  11. }
本文导读目录
本文导读目录
以上内容是否对您有帮助?