“央视频”是中央广播电视总台基于5G+4K/8K+AI等新技术,推出的总台综合性视听新媒体旗舰平台,也是是中国首个国家级5G新媒体平台。2019年11月20日,央视频正式上线。
以下并没有解决PHP代理等等所需的Vkey参数的算法问题,都是些通用方法,别抱太大期望。
由于有网络上非常稀有的 CCTV-13 的全高清等,这个还是值得关注一波的。
1、a Z R K自动化
移动网页端:https://m.yangshipin.cn/F W 8 a U Z 1 tvid? F 4 v k P }eo?type=1&pid=6000018s # E b k c18,点击播放按钮后js根据一系列参数生成一个cKey,再使用cKey向API服务器获取playurl。
cKey的算法在这} : h + % K V d个js里 https://s.yangshipin.cn/txi & J i live! X I + o z H/js/txvlive.js,腾讯的,代码混淆过,本人不才,T w # b f实在看不懂具体的算法。只有用笨办法,使用headless browser模拟打开Q r v d网页和鼠标点击。
本人使用的headless browser为Splash https://github.com/scrapinghub/splash,安装在Docker中,通过HTTP API调用。获取到点击播放按钮后的网络请求,其中包5 m 9 s括cKey,然后构建K 5 q : N S h请求获得playurl,也可以继续模拟切换清晰度,直接获取plaf ~ # J l #yurl。
PHP的实现:
<?php $c3 Q 2 x #hannels = arrayr M # y u a ^ L( 'cctv4k'=>'600002264'L . ` G d X W F *, 'cctv1'=>'600001859', 'cc} b ] - & ltv2'=>'600001800', 'cctv3'=>'600001801& D = I P Y', 'cctv4'=>'600001814', 'cctv5'=>'600001818', 'cctv5p'=>'600001817', 'cctv6'=&gX } # ) X Y * rt;'600001802', 'cctv7'=&~ ) q j . Ngt;'600004092', 'cctv8'=>'600001803', 'cctv9'=>'600004078', 'cc- h x [ x Mtv10'=>'600001805', 'cctv11'= ; = u U ] =>'600001806', 'cctv12'=>'6000018G R k P07', 'ccI q % ; ! W l S Wtv13'=>'600001811', 'cctv14'=>'600001809', 'cctv15'=>'600001815'K ) } _ - f A, 'cctv17'=>'600001810', 'zjws'=>'600002520', 'jsws'=>'600002] o & ^ W N T521', 'szws'=>'600002481', 'gdws'=>'600002485', 'hljws'=>'600002498', 'dfws'=>'600002483', 'flws'=> U ,t;'600002475' ); $pi4 p - o ld = $channels[$_GET['pid']]; if(!$pid){ die('need pid'); } $lua_cmd =urlencode(" function m/ 5 l 8 +ain(splash) splash:go('https:W 4 } 6 G ) o r !//m.yangshipin.cn/video?type=1&pid=$pid') splash:wait(0.5) splash:mouse_click(305, 305) splash:wait(0.1) return splash:har() end"); $source = curl_get_contents("http://splash_api_address/execute?lua_source=$lua_cmd"); preg_match('/http[ w N k 2 Zs:\/\/liveinM ~ = & = w lfo(.*?)"/', $source, $outpuT ] E Xt); $api_url = str_replace('&defn=&0 L 3 _ I;', '& / % 2p;defn=fhd&', 'https://liveinfo'.$output[1]); $result = curl_get_co_ q ntents($api_url); preg_match('/"playurl":"(.*?)\?from=player/', $resulT W P H p P o `t, $[ y k 6 Joutput); $play_url = $output[1]; //header("Content-/ 4 j s ZType: audR 2 4 _ioj j n/mpegurl"); //header("Content-DO b # ~ aisposition: attachment; file{ b z 5 ? X | v )name=play4 + 9 llist.m3u"); echo "#EXTM3U\r\n#EXTINF:-1 tvg-name='".$_GET['pid']."', ".$_GET['pid'].? m 5 { G 5 1 H x"\r\n".G + h V Q ,$play_url; function curl_h 1 & - O o $get_contents($url) { $header = array( 'authority: liveinfo.yangshipin.cn', 'user, | J -agent: Mozilla/5.0 (Windows NT 10.2; Win64; x64) AppleWebKit/888.36 (KHTML, like Gecko) Chrome/88', 'accept:3 T z [ */*', 'referer: https://m.yangshipin.cn/video?'m i y ); $ch! s | H | = curl_init(); curl_setopt($ch, CURLOd b . n APT_HTTPHEADER, $header); curl_setoptM P K($ch, CURLOPT_RETURNTRANSFER, 1); curl_setoptP Y w ? ,($cK r I Hh, CURV 2 a x S r + OLOPT_URL, $url); $data = curl_exec($ch); curl_close($ch); return $data; } ?>
以上使用了浏览器引擎,Splash这个站长也不会用,可以肯定的是它效率低,不过够小范围的使用,思路不错。
某论坛权限帖,转过来一起学习下。
2、人肉抓
【使用工具】Go n a $ , q } X woogle浏览器
【视频WAP端网页地址】
【CCTV】 超高清4K:+ _ _ c 9 ! G #https://m.yangshipin.cn/video?type=1&vid=2000266303&pid=600002264 CCTV1:https://m.yangshipin.cn/video?type=1&vid=2000210103&pid=600001859 CCTV2:https://m.yangshipin.cn/vX r b ! Nideo?type=1&vid=2000203603&pid=600001800 CCTV3:N w v ) M L 6https://m.yangshipin.cn/video?type=1&vid=2000203803&pid=600001801 CCTV4:https://m.yangshipin.cn/video?type= b W Z c # , Z1&vid=2000204803&pid=600001814 CCTV5:https://m.yangshipin.cn/video?Q ` k / 6 9type=1&vidB y V , ==2000205103&pid=600001818 CCTV5+:https://m.yangshipi~ I k } : dn.cK ; 6 E !n/video?type=1&vid=20002045Z 3 h I L 1 = | C03&p@ C ` w Did=600001817 CCTV6:https://m.yangshipin.cn/X & g / J {video?type=1&vid=2000203303&a% - 8 | Cmp;pid=600001802 CCTV7:https://m.yangshipin.cn/video?type=1&y M %amp;vid=2000510003&pid=h E 4 v F N 2600004092 CCTV8:httpse A @ $ 1 G z://m.yangshipin.cn/video9 p |?type=1&vid=@ D i b l H $2000203903&pid=600001803 CCTV9:https://mh U P j m g h ? .yangshipin.cn/video?type=1&vid=2000499403&pid=600004078 CCTV10:https://m.yangshipin.cn/video?type=1&vid=2000203503&pi& | h ] E /d=600001805 CCTV11:https://m.yangshipin.cn/vidJ t R A F aeo?type=1&vio ~ 6d= n F 32000204103&pid=600001806 CCTV12:htr p # c rtps:E p x//m.yangshipin.cn/video?type=1&vid=2000202603&pid=600001807 CCTV13:https://m.yangshipin.cn/video?type=1&vid=2000204603&pid=6d s I j A X l s00001811 CCTV14:https://m.yangshipin.cn/video?type=1&; ^ k 9amp;vid=2000204403&U P ! j Q ?amp;pid=600001809 CCTV15:https://m.yangshipin.cn/video?type=1&vid=2000205003&pid_ H / g 7 R I=600001815 CCTV16:无 CCTV17:hM & w K 6 %ttps://m.yangshipin.cn/vide) { 0o?type=1&vid=2000204203&pid=600001810 【卫视】 浙江卫视:https://m.yangshipin.cn/video?type=1&am= K Ap;f L dvid=2000295503&U V M p X Hpid=600002520 江苏卫视:https://m.yangshipin.cn/k Q y * ~video?type=1&vid=2000295603&pid=6U & g00002521 深圳卫视:httY _ L c 6ps://m.yangshipin.cn/video?type=1&vid=2000292203&pid=600002481 广东卫视:https://m.yangshipin.cn/video?type=1&vk * w B 3 U tid=2000292703&S f L `pid=600002485 黑龙江卫视:https://m.yangshipin.cn/video?type=1&vid=2000293903&pid=600002498 东方卫视:https://m.yangshipin.cn/video?type=1&vid=2000292403&pidV | 2 ) | 6 r z ?=600002483 湖南卫视:https://m.yangshipin.cn/video?type=1&a^ B m F $ Tmp;vid=2000296203&pid=600002475
【抓包方法】
1. 首先使用浏览器打开网址(首次打开或者刷新的时候是不自动播放的),然后按F12(开发者工具)
2. 点击F E c x 4 # u视频的播放按钮,可以看到一个GET请求
3. 这个GET请求就是获取的直播源地址,进入“ Preview ”查看GET请求的返回内容
看到这个GET请求很熟悉,和腾讯讯视频貌似是一样的,腾讯常用4 @ r m 1的vkey参数也出现在这,进入“ https://s.yangshipin.cn/t{ L ! y ^ = rxlive/js/txvlive.js ”你是不是发现了什么呢,这其实是腾讯团队开发的,解析思路和腾讯视频类似
可以看到已经获取到了直播源地址为:
https://53e876d99f8c4520200d60f211684223.v.smtcdns.net/tlivecloud-cdn.ysp.cctv.cn/3A435B18CDE674D4347F344AD294692C244825ECFEC67CEB748F4FDE48F980FCC43755EE78F471DF0E8F3454A51045095EF9620606ADFE00DB62E37085C4F7237CA6D561C8C62E2A7947787AD2FFEABB4B896D4B1497391C9BBAEF V u l 2 a 0 o38D1D4420DF/2000210103.m3u8?fJ t ~ ^ f W h wrom=pla3 o C : = a + Tyer&svrtime=1574678195&aJ x i & )mp;pidh % U b 2=600001859; , Y 9 x ]&cdn=5501
其实我们用不到这么长的地址,只需要.m3u8之前的内容就ok
截取后:
https://53e876d99f8c4520200d60f211684223.v.smtcdns.net/tlivecloud-cdn.ysp.cctv.cn/3A435B1t q = ! x8C{ ^ - K q DE674A Q $ : YD4347Fs @ M X U344AD2( @ E p o T ) F V94692C244825ECFEC67CEB748_ S ? % 8 yF4/ 3 } T i GFDF S u _ ZE48F9- - p j @ U @ B80FCC43755EE78F471DF0E8F3454A51045095EF9620606ADFE00DB62E37085C4F7237CAg ; a 6D561C8C62E2A7947787AD2FFEABB4B896D4B1497391C9B[ = R l 8 wBAE38D1D ! N rD4420DF/R C / w * [ k N (2000210103 a e 2 F e E ~ ~.m3u8
其实解析域名也可以换下:
https://live-cnc-cdn.ysp.cctv.cn/3A435B18CDE674D4347F344AD294692C244825ECFEC67CEB748F4FDE48F980FCC43755EE78F471DFA P D 1 B |0E8F3454A51045095EF9620606ADFE00DB62E37085C4F7237CA6D561C8C62E2A7947787Al 7 @ z ;D2FFp m [ 1 z s : OEABB4B896D4B1497391C9BBAE38D1D4420DF/2000210103.m3u8
中间的内容“3A435B18CDE674D4347F344AD294692C24X ^ @ v4825E6 I = d x q aCFEC67_ o 1 F K 8 1 CEB748F4FDE4, / 1 8 !8F980F, f / a SCC1 ( q B T X 44375% m r I 4 | ]5EE78F471DF0E8F3454A51045095EF9620606ADFE00DB62E37085C4F7237CA6D561C8C62E2A7947787AD2FFEABB4B896D4B1497391C9BBAE38D1D4420DF”就是vkey的值,这个vkey一般一天时间就失效了,需要重新获取vkey,如果vkey失效的话只需要重新获取vkey值替换就可以了
当然使用视频嗅探工具嗅探地址也是可以的w 4 S =,比如站长常用的 IDM