全部产品
存储与CDN 数据库 安全 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网
媒体转码

调用示例

更新时间:2017-09-22 15:27:57

调用示例

对媒体转码服务服务接口的调用是通过向媒体转码服务服务端发送请求(可以通过HTTP或HTTPS通道发送),并获取服务对该请求响应结果的过程。服务端在接收到用户请求后,对请求做必要的身份验证和参数验证,在所有验证成功后根据请求的指定参数提交或完成相应操作,并把处理的结果以HTTP响应的形式返回给调用者。

流程

  • 准备请求参数
  • 使用请求参数构造规范化的请求字符串(Canonicalized Query String)
  • 构造签名的字符串
  • 计算签名(包括HMAC签名以及Base64编码)
  • 构造请求的URL

以下使用Java代码演示了构造请求的流程。

全局定义

  1. private static final String ENCODE_TYPE = "UTF-8";
  2. private static final String ALGORITHM = "HmacSHA1";
  3. private static final String HTTP_METHOD = "GET";
  4. private static final String SEPARATOR = "&";
  5. private static final String EQUAL = "=";

准备请求参数

  1. Map<String, String> parameterMap = new HashMap<String, String>();
  2. // 请求公共参数
  3. parameterMap.put("Action", "SearchTemplate");
  4. parameterMap.put("Version", "2014-06-18");
  5. parameterMap.put("AccessKeyId", "testId"); //此处请替换成您自己的AccessKeyId
  6. parameterMap.put("Timestamp", "2015-05-14T09:03:45Z");//此处将时间戳固定只是测试需要,这样此示例中生成的签名值就不会变,方便您对比验证,可变时间戳的生成需要用下边这句替换
  7. //parameterMap.put("Timestamp", formatIso8601Date(new Date()));
  8. parameterMap.put("SignatureMethod", "HMAC-SHA1");
  9. parameterMap.put("SignatureVersion", "1.0");
  10. parameterMap.put("SignatureNonce", "4902260a-516a-4b6a-a455-45b653cf6150"); //此处将唯一随机数固定只是测试需要,这样此示例中生成的签名值就不会变,方便您对比验证,可变唯一随机数的生成需要用下边这句替换
  11. //parameterMap.put("SignatureNonce", UUID.randomUUID().toString());
  12. parameterMap.put("Format", "XML"); //另外支持JSON格式

使用请求参数构造规范化的请求字符串(Canonicalized Query String)

  1. private static String percentEncode(String value) throws UnsupportedEncodingException {
  2. return URLEncoder.encode(value, ENCODE_TYPE).replace("+", "%20").replace("*", "%2A").replace("%7E", "~");
  3. }
  4. private static String buildCanonicalizedQueryString(Map<String, String> parameterMap) throws UnsupportedEncodingException {
  5. // 对参数进行排序
  6. List<String> sortedKeys = new ArrayList<String>(parameterMap.keySet());
  7. Collections.sort(sortedKeys);
  8. StringBuilder temp = new StringBuilder();
  9. for (String key : sortedKeys) {
  10. // 此处需要对key和value进行编码
  11. String value = parameterMap.get(key);
  12. temp.append(SEPARATOR).append(percentEncode(key)).append(EQUAL).append(percentEncode(value));
  13. }
  14. return temp.toString().substring(1);
  15. }

计算签名(包括HMAC签名以及Base64编码)

  1. private static String buildStringToSign(String canonicalizedQueryString) throws UnsupportedEncodingException {
  2. // 生成stringToSign字符
  3. StringBuilder temp = new StringBuilder();
  4. temp.append(HTTP_METHOD).append(SEPARATOR);
  5. temp.append(percentEncode("/")).append(SEPARATOR);
  6. // 此处需要对canonicalizedQueryString进行编码
  7. temp.append(percentEncode(canonicalizedQueryString));
  8. return temp.toString();
  9. }
  10. private static String buildSignature(String keySecret, String stringToSign) throws UnsupportedEncodingException, InvalidKeyException, NoSuchAlgorithmException {
  11. SecretKey key = new SecretKeySpec((keySecret + SEPARATOR).getBytes(ENCODE_TYPE), SignatureMethod.HMAC_SHA1);
  12. Mac mac = Mac.getInstance(ALGORITHM);
  13. mac.init(key);
  14. byte[] hashBytes = mac.doFinal(stringToSign.toString().getBytes(ENCODE_TYPE));
  15. byte[] base64Bytes = new Base64().encode(hashBytes);
  16. String base64UTF8String = new String(base64Bytes, "utf-8");
  17. return URLEncoder.encode(base64UTF8String, ENCODE_TYPE);
  18. }

构造请求的URL

  1. private static String buildRequestURL(String signature, Map<String, String> parameterMap) throws UnsupportedEncodingException {
  2. // 生成请求URL
  3. StringBuilder temp = new StringBuilder("http://mts.aliyuncs.com/?");
  4. temp.append(URLEncoder.encode("Signature", ENCODE_TYPE)).append("=").append(signature);
  5. for (Map.Entry<String, String> e : parameterMap.entrySet()) {
  6. temp.append("&").append(percentEncode(e.getKey())).append("=").append(percentEncode(e.getValue()));
  7. }
  8. return temp.toString();
  9. }

示例

  • 准备请求参数

    • Access Key Id是”testId”
    • Acces Key Secret是”testKeySecret”
    • Timestamp是”2015-05-14T09:03:45Z”
    • SignatureNonce是”4902260a-516a-4b6a-a455-45b653cf6150”
    • Action是”SearchTemplate”,参数PageSize是”2”
    • Format是”XML”
  • 使用请求参数构造规范化的请求字符串(Canonicalized Query String)

  1. AccessKeyId=testId&Action=SearchTemplate&Format=XML&PageSize=2&SignatureMethod=HMAC-SHA1&SignatureNonce=4902260a-516a-4b6a-a455-45b653cf6150&SignatureVersion=1.0&Timestamp=2015-05-14T09%3A03%3A45Z&Version=2014-06-18
  • 构造签名的字符串
  1. GET&%2F&AccessKeyId%3DtestId&Action%3DSearchTemplate&Format%3DXML&PageSize%3D2&SignatureMethod%3DHMAC-SHA1&SignatureNonce%3D4902260a-516a-4b6a-a455-45b653cf6150&SignatureVersion%3D1.0&Timestamp%3D2015-05-14T09%253A03%253A45Z&Version%3D2014-06-18
  • 计算签名(包括HMAC签名以及Base64编码)
  1. kmDv4mWo806GWPjQMy2z4VhBBDQ%3D
  • 构造请求的URL
  1. http://mts.cn-hangzhou.aliyuncs.com/?Signature=kmDv4mWo806GWPjQMy2z4VhBBDQ%3D&SignatureVersion=1.0&Action=SearchTemplate&Format=XML&SignatureNonce=4902260a-516a-4b6a-a455-45b653cf6150&PageSize=2&Version=2014-06-18&AccessKeyId=testId&SignatureMethod=HMAC-SHA1&Timestamp=2015-05-14T09%3A03%3A45Z
  • 接下来对URL地址发送HTTP请求(例如curl),并得到服务端的响应结果(示例指定响应结果格式为XML)
  1. <SearchTemplateResponse>
  2. <RequestId>017F1B2D-2B5B-4441-ABBA-E0DC08F5AFEC</RequestId>
  3. <Template>
  4. <Id>88c6ca184c0e47098a5b665e2a126799</Id>
  5. <Name>MTS-example</Name>
  6. <Container>
  7. <Format>mp4</Format>
  8. </Container>
  9. <Video>
  10. <Codec>H.264</Codec>
  11. <Profile>high</Profile>
  12. <Bitrate>Auto</Bitrate>
  13. <Crf>15</Crf>
  14. <Width>256</Width>
  15. <Height>800</Height>
  16. <Fps>25</Fps>
  17. <Gop>10</Gop>
  18. <Preset>lower</Preset>
  19. <ScanMode></ScanMode>
  20. <Bufsize>6000</Bufsize>
  21. <Maxrate></Maxrate>
  22. <BitrateBnd>
  23. <Max></Max>
  24. <Min></Min>
  25. </BitrateBnd>
  26. </Video>
  27. <Audio>
  28. <Codec>aac</Codec>
  29. <Samplerate>44100</Samplerate>
  30. <Bitrate>500</Bitrate>
  31. <Channels>2</Channels>
  32. </Audio>
  33. <State>Normal</State>
  34. </Template>
  35. </SearchTemplateResponse>

完整的示例代码

示例代码使用Java语言编写,包管理器使用maven。

代码下载

Jar二进制下载

执行方法:java -jar mts-signature-sample-all-0.1.jar testId testKeySecret 4902260a-516a-4b6a-a455-45b653cf6150 2015-05-14T09:03:45Z SearchTemplate XML PageSize@=2

本文导读目录