IOS對接CC視頻接口
對接流程:
1.HTTP通信加密實現:
CC視頻接口的請求參數hash需要由其它請求參數和api key爲鹽值hash而成,首先要對普通的查詢參數(包括當前時間戳)進行字典序的排序,然後再以key爲鹽值進行MD5得到hash值
實現代碼如下:
//將字符串按照字典序排序
//返回可變長度的字符串
+(NSMutableString *) order: (NSString*)queryString{
NSArray *stringList = [queryString componentsSeparatedByString:@"&"];
NSArray *resultList = [stringList sortedArrayUsingSelector:@selector(compare:)];
NSMutableString *result = [NSMutableString stringWithString:resultList[0]];
if (resultList.count <= 1){
return result;
}
for (int i = 1; i <= [resultList count] - 1; i++) {
[result appendString:@"&"];
[result appendString:resultList[i]];
}
NSLog(@"%@",result);
return result;
}
//MD5加密
//#import <CommonCrypto/CommonDigest.h>
//要導入上面的包,否則會警告
+(NSString *)md5DigestWithString:(NSString*)input{
const char* str = [input UTF8String];
unsigned char result[16];
CC_MD5(str, (uint32_t)strlen(str), result);
NSMutableString *ret = [NSMutableString stringWithCapacity:16 * 2];
for(int i = 0; i<16; i++) {
[ret appendFormat:@"%02x",(unsigned int)(result[i])];
}
return ret;
}
/**
* @param queryString 要求轉化的參數
* @param isVideo 是否調用點播,true爲點播api,false爲直播api
* @return 有效的請求參數
*/
+(NSString *) decode:(NSString*)queryString and: (BOOL)isVideo{
NSDate *datenow =[NSDate date];//現在時間,你可以輸出來看下是什麼格式
//設置時區
NSTimeZone *zone = [NSTimeZone timeZoneWithAbbreviation:@"GMT+8"];
NSInteger interval = [zone secondsFromGMTForDate:datenow];
NSDate *localeDate = [datenow dateByAddingTimeInterval: interval];
//轉化時間戳
NSString *timeSp = [NSString stringWithFormat:@"%ld", (long)[localeDate timeIntervalSince1970]];
//將時間戳加入鏈接
NSMutableString *hashedQueryString = [THQSUtil order:queryString];
[hashedQueryString appendString:@"&time="];
[hashedQueryString appendString:timeSp];
//由於最終所需的鏈接不需要salt值,所以進行MD5加密的時候用一個副本,不可以使用copy,因爲copy得到的是一個靜態變量,無法進行操作
NSMutableString *temp = [NSMutableString stringWithFormat:@"%@", hashedQueryString];
[temp appendString:@"&salt="];
//直播和點播的key是不同的
if (isVideo){
[temp appendString:KEY];
}
else{
[temp appendString:ROOM_KEY];
}
//將得到的hash值拼接
[hashedQueryString appendString:@"&hash="];
[hashedQueryString appendString:[THQSUtil md5DigestWithString:temp]];
return hashedQueryString;
}
注意點:點播的key和直播的key是不一樣的
2.HTTP請求實現
CC視頻的接口均採用GET方式訪問,博主使用的是NSURLSession
這個類來進行請求,並利用NSURLSessionDataDelegate
委託來監聽數據的變化。
實現如下:
/**
* 使用HttpURLConnection
* 訪問CC視頻接口的函數
* @param requestUri 調用的api的地址
* @param isVideo 是否調用點播,true爲點播api,false爲直播api
*/
-(void)request:(NSString*)requestUri has:(NSString*)param and: (BOOL)isVideo{
//獲得CC視頻接口的鏈接
NSString *urlStr = [THQSUtil decode:param and:YES];
NSMutableString *str = [NSMutableString stringWithFormat:@"%@", requestUri];
[str appendFormat:@"%@", urlStr];
NSLog(@"rquest:%@",str);
//使用HTTP
NSURL *url = [[NSURL alloc] initWithString:[str copy]];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:0 timeoutInterval:2.0f];
//創建session,並設置委託
NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self.delegate delegateQueue:[[NSOperationQueue alloc] init]];
//初始化任務
NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request];
//發送請求(執行Task)
[dataTask resume];
}
注意點:如果請求的參數存在中文,比如調用搜索視頻的接口時,title的參數值需要進行轉碼["請求的參數" appendFormat:@"%@", [content stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]]];
,注意特殊字符也需要裝碼,例如請求排序時&sort=CREATION_DATE:DESC
要寫成&sort=CREATION_DATE%3ADESC