IOS对接CC视频接口

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


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章