374
魔獸
調用示例__調用方式_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"); //此處請替換成您自己的AccessKeyId
parameterMap.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";//此處請替換成您的AccessKeySecret
SecretKey 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);
// 生成請求URL
StringBuilder 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-阿裏雲