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