获取央视频直播流地址

央视频”是中央广播电视总台基于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 djs里 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'=&gt 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;', '&amp / % 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
获取央视频直播流地址