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


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