ios解析優(yōu)酷視頻地址

客戶端解析優(yōu)酷等三方網(wǎng)站的真實的播放地址。

解析優(yōu)酷真實的地址剃诅,只需要獲取到優(yōu)酷的網(wǎng)頁的播放地址即可巷送。

流程:1)獲取到視頻在網(wǎng)頁上的地址

? ? ? ? ? ? 2)獲取需要的參數(shù)拼接完整的API

????????????3)獲取真實的視頻地址(需要手動拼接cookie,需要驗證cokkie)


第一步:拼接需要的API:(后面用于獲取真實的播放地址)

NSString * playApi = @"https://ups.youku.com/ups/get.json?vid=%@&ccode=0508&client_ip=192.168.1.1&utid=%@&client_ts=%d";

需要注意的是:ccode優(yōu)酷會間隔一段時間去更新這個參數(shù)矛辕。如果不能解析笑跛,那么去網(wǎng)上找一下最新的ccode。

1)將網(wǎng)頁鏈接地址傳入下面的方法,獲取到參數(shù)vid

-(NSString*)comIdFlagStr:(NSString*)url{

? ? NSString* str =nil;

? ? if([RemoveEmpt removeEmptWithString:url].length>0) ? ?{

? ? ? ? NSArray* strArr = [url componentsSeparatedByString:@"id_"];

? ? ? ? if(strArr.count>1) ? ? ? ?{

? ? ? ? ? ? NSArray* neArry = [[strArr lastObject] componentsSeparatedByString:@".html"];

? ? ? ? ? ? if(neArry.count>1) ? ? ? ? ? ?{

? ? ? ? ? ? ? ? str = [neArry firstObject];

? ? ? ? ? ? }

? ? ? ? }

? ? }

? ? returnstr;

}

2)獲取utid參數(shù)聊品。

#define utidURL @"https://log.mmstat.com/eg.js";

-(NSString*)comETag{

? ? NSString* etgm =nil;

? ? NSString* utidURLStr =utidURL;

? ? NSURL* url = [NSURL URLWithString:utidURLStr];

? ? NSError*error;

? ? NSStringEncoding encoding;

? ? NSString * dataString = [[NSString alloc] initWithContentsOfURL:urlusedEncoding:&encoding error:&error];

? ? NSArray * ?arr = [dataString componentsSeparatedByString:@";"];

? ? for(NSString* str in arr) ? ?{

? ? ? ? if([str hasPrefix:@"goldlog.Etag"]) ? ? ? ?{

? ? ? ? ? ? NSString * etag = [[str componentsSeparatedByString:@"="] lastObject];

? ? ? ? ? ? NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"@/:飞蹂;()¥「」"、[]{}#%-*+=_\\|~<>$€^?'@#$%^&*()_+'\""];

? ? ? ? ? ? etag = [etag stringByTrimmingCharactersInSet:set];

? ? ? ? ? ? etgm = etag;

? ? ? ? ? ? break;

? ? ? ? }

? ? }

? ? returnetgm;

}

3)拼接clients_ts參數(shù)

NSDate* date = [NSDatedate];

?NSInteger index = (NSInteger)date.timeIntervalSince1970;

4)拼接完整的api

二:獲取真實的地址

1)需要先拼接cookie翻屈,用于驗證信息

-(NSMutableDictionary *)cookDic{

? ? if(!_cookDic) ? ?{

? ? ? ? _cookDic = [[NSMutableDictionary alloc] init];

? ? ? ? [_cookDicsetObject:[self getYsuid:3] forKey:NSHTTPCookieValue];

? ? ? ? [_cookDic setValue:[NSDate dateWithTimeIntervalSinceNow:60*60*24] forKey:NSHTTPCookieExpires];

? ? ? ? [_cookDic setValue:@"http://www.youku.com" forKey:NSHTTPCookieName];

? ? ? ? [_cookDic setValue:@"www.youku.com" forKey:NSHTTPCookieDomain];

? ? ? ? [_cookDic setValue:@"0" forKey:NSHTTPCookieVersion];

? ? ? ? [_cookDic setValue:@"www.youku.com" forKey:NSHTTPCookiePath];

? ? }

? ? return _cookDic;

}

2)獲取ysuid參數(shù)

-(NSString*)getYsuid:(NSInteger)length{

? ? NSString* ysuid? =@"";

? ? NSString * source = @"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";

? ? NSMutableString * str = [[NSMutableString alloc] init];

? ?for(int i=0; i<length;i++) ? ?{

? ? ? ? NSInteger number =arc4random()%52;

? ? ? ? NSString* sourceStr = [source substringWithRange:NSMakeRange(number,1)];

? ? ? ? [str appendString:sourceStr];

? ? }

? ? NSInteger timeVal = [NSDate date].timeIntervalSince1970;

? ? NSString* yu = [NSString stringWithFormat:@"%ld%@",(long)timeVal,str];

? ? ysuid = yu;

? ? return ysuid;

}

3)baseUrl就是網(wǎng)頁地址

-(void)getVideoMessage:(NSString*)api{

? ? [self.videoTSArr removeAllObjects];

? ? //獲取cookie

? ? NSHTTPCookie *cookie = [[NSHTTPCookie alloc] initWithProperties:self.cookDic];

? ? NSArray * cookies=[NSArray arrayWithObjects:cookie,nil];

? ? NSDictionary * headers=[NSHTTPCookie requestHeaderFieldsWithCookies:cookies];


? ? AFHTTPSessionManager * afMn = [AFHTTPSessionManager manager];

? ? afMn.responseSerializer = [AFHTTPResponseSerializer serializer];

? ? [afMn.requestSerializer setValue:self.baseUrl forHTTPHeaderField:@"Referer"];

? ? [afMn.requestSerializer setValue:[headersobjectForKey:@"Cookie"] forHTTPHeaderField:@"Cookie"];

? ? [afMnGET:api parameters:nil progress:^(NSProgress*_Nonnull downloadProgress) {

? ? }success:^(NSURLSessionDataTask *_Nonnull task,id? _Nullable responseObject) {

? ? ? ? NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];

? ? ? ? NSDictionary* videoDic = [dic objectForKey:@"data"];

? ? ? ? if([videoDic objectForKey:@"error"]!=NULL) ? {

? ? ? ? ? ? NSLog(@"%@",[[videoDic objectForKey:@"error"]objectForKey:@"note"]);

? ? ? ? ? ? self.anLyBlock([NSMutableArray array]);

? ? ? ? }

? ? ? ? else {

? ? ? ? ? ? NSArray* streamArr = [videoDic objectForKey:@"stream"];

? ? ? ? ? ? for(NSDictionary* item in streamArr)//視頻.ts地址 {

? ? ? ? ? ? ? ? if(![[item objectForKey:@"audio_lang"]isEqualToString:@"guoyu"])continue;

? ? ? ? ? ? ? ? VideoModel* video = [VideoModelnew];

? ? ? ? ? ? ? ? video.srcUrl=? api;

? ? ? ? ? ? ? ? video.videoUrl= [item objectForKey:@"m3u8_url"];

? ? ? ? ? ? ? ? video.size= [[item objectForKey:@"size"]integerValue];

? ? ? ? ? ? ? ? video.streamType= [item objectForKey:@"stream_type"];

? ? ? ? ? ? ? ? video.videoMilliseconds= [[item objectForKey:@"milliseconds_video"]integerValue];

? ? ? ? ? ? ? ? video.hdtv= [self hdtv:[item objectForKey:@"stream_type"]];

? ? ? ? ? ? ? ? [self.videoTSArr addObject:video];

? ? ? ? ? ? }

? ? ? ? ? ? if(self.videoTSArr.count<=0){

? ? ? ? ? ? ? ? for(NSDictionary* item in streamArr) {

? ? ? ? ? ? ? ? ? ? VideoModel* video = [VideoModel ?new];

? ? ? ? ? ? ? ? ? ? video.srcUrl=? api;

? ? ? ? ? ? ? ? ? ? video.videoUrl= [item ?objectForKey:@"m3u8_url"];

? ? ? ? ? ? ? ? ? ? video.size= [[item ?objectForKey:@"size"]integerValue];

? ? ? ? ? ? ? ? ? ? video.streamType= [item ?objectForKey:@"stream_type"];

? ? ? ? ? ? ? ? ? ? video.videoMilliseconds= [[item ?objectForKey:@"milliseconds_video"]integerValue];

? ? ? ? ? ? ? ? ? ? video.hdtv= [self ?hdtv:[item ?objectForKey:@"stream_type"]];

? ? ? ? ? ? ? ? ? ? [self.videoTSArr ?addObject:video];

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

?? ? ? ? ? ?self.anLyBlock(self.videoTSArr);

? ? ? ? }

? ? }failure:^(NSURLSessionDataTask * _Nullable task,NSError * _Nonnull error) {

? ? ? ? //失敗

? ? ? ? if(self.anLyBlock)

? ? ? ? ? ? self.anLyBlock([NSMutableArray array]);

? ? }];

}

判斷清晰度

-(NSString*)hdtv:(NSString*)type{

? ? NSString* ht =@"h1";

? ? if([type isEqualToString:@"hd3"])

? ? ? ? ht =@"1";

? ? else if([type ?isEqualToString:@"hd2"])

? ? ? ? ht =@"2";

? ? else if([type isEqualToString:@"mp4hd"]||

?? ? ? ? ? ? [type isEqualToString:@"mp4"])

? ? ? ? ht =@"3";

? ? else if([type ?isEqualToString:@"mp4hd3"]||

?? ? ? ? ? ? [type ?isEqualToString:@"mp4hd2"]||

?? ? ? ? ? ? [type ?isEqualToString:@"flvhd"]||

?? ? ? ? ? ? [type ?isEqualToString:@"flv"])

? ? ? ? ht =@"4";

? ? else if([type ?isEqualToString:@"3gphd"])

? ? ? ? ht =@"5";

? ? else if([type ?isEqualToString:@"3gp"])

? ? ? ? ht =@"6";

? ? return ht;

}

這就完整的解析出來真正的播放地址

后面會補(bǔ)充解析樂視的地址

如有不合理的地方陈哑,請斧正。

申明:這只是自己的一些研究而已妖胀,請不要用于商業(yè)用途芥颈。如果影響到你的利益惠勒,請聯(lián)系我赚抡。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市纠屋,隨后出現(xiàn)的幾起案子涂臣,更是在濱河造成了極大的恐慌,老刑警劉巖售担,帶你破解...
    沈念sama閱讀 211,348評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件赁遗,死亡現(xiàn)場離奇詭異,居然都是意外死亡族铆,警方通過查閱死者的電腦和手機(jī)岩四,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評論 2 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來哥攘,“玉大人剖煌,你說我怎么就攤上這事∈叛停” “怎么了耕姊?”我有些...
    開封第一講書人閱讀 156,936評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長栅葡。 經(jīng)常有香客問我茉兰,道長,這世上最難降的妖魔是什么欣簇? 我笑而不...
    開封第一講書人閱讀 56,427評論 1 283
  • 正文 為了忘掉前任规脸,我火速辦了婚禮坯约,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘莫鸭。我一直安慰自己鬼店,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,467評論 6 385
  • 文/花漫 我一把揭開白布黔龟。 她就那樣靜靜地躺著妇智,像睡著了一般。 火紅的嫁衣襯著肌膚如雪氏身。 梳的紋絲不亂的頭發(fā)上巍棱,一...
    開封第一講書人閱讀 49,785評論 1 290
  • 那天,我揣著相機(jī)與錄音蛋欣,去河邊找鬼航徙。 笑死,一個胖子當(dāng)著我的面吹牛陷虎,可吹牛的內(nèi)容都是我干的到踏。 我是一名探鬼主播,決...
    沈念sama閱讀 38,931評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼尚猿,長吁一口氣:“原來是場噩夢啊……” “哼窝稿!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起凿掂,我...
    開封第一講書人閱讀 37,696評論 0 266
  • 序言:老撾萬榮一對情侶失蹤伴榔,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后庄萎,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體踪少,經(jīng)...
    沈念sama閱讀 44,141評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,483評論 2 327
  • 正文 我和宋清朗相戀三年糠涛,在試婚紗的時候發(fā)現(xiàn)自己被綠了援奢。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,625評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡忍捡,死狀恐怖集漾,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锉罐,我是刑警寧澤帆竹,帶...
    沈念sama閱讀 34,291評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站脓规,受9級特大地震影響栽连,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,892評論 3 312
  • 文/蒙蒙 一秒紧、第九天 我趴在偏房一處隱蔽的房頂上張望绢陌。 院中可真熱鬧,春花似錦熔恢、人聲如沸脐湾。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽秤掌。三九已至,卻和暖如春鹰霍,著一層夾襖步出監(jiān)牢的瞬間闻鉴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工茂洒, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留孟岛,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓督勺,卻偏偏與公主長得像渠羞,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子智哀,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,492評論 2 348

推薦閱讀更多精彩內(nèi)容