获取央视频直播流地址

“央视频”是中央广播电视总台基于5G+4K/8K+AI等新技术,推出的总台综合性视听新媒体旗舰平台,也是是中国首个国家级5G新媒体平台。2019年11月20日,央视频正式上线。

《获取央视频直播流地址》

以下并没有解决PHP代理等等所需的Vkey参数的算法问题,都是些通用方法,别抱太大期望。
由于有网络上非常稀有的 CCTV-13 的全高清等,这个还是值得关注一波的。

1、自动化

移动网页端:https://m.yangshipin.cn/video?type=1&pid=600001818,点击播放按钮后js根据一系列参数生成一个cKey,再使用cKey向API服务器获取playurl。
cKey的算法在这个js里 https://s.yangshipin.cn/txlive/js/txvlive.js,腾讯的,代码混淆过,本人不才,实在看不懂具体的算法。只有用笨办法,使用headless browser模拟打开网页和鼠标点击。

本人使用的headless browser为Splash https://github.com/scrapinghub/splash,安装在Docker中,通过HTTP API调用。获取到点击播放按钮后的网络请求,其中包括cKey,然后构建请求获得playurl,也可以继续模拟切换清晰度,直接获取playurl。

PHP的实现:

<?php
    $channels = array(
            'cctv4k'=>'600002264',
            'cctv1'=>'600001859',
            'cctv2'=>'600001800',
            'cctv3'=>'600001801',
            'cctv4'=>'600001814',
            'cctv5'=>'600001818',
            'cctv5p'=>'600001817',
            'cctv6'=>'600001802',
            'cctv7'=>'600004092',
            'cctv8'=>'600001803',
            'cctv9'=>'600004078',
            'cctv10'=>'600001805',
            'cctv11'=>'600001806',
            'cctv12'=>'600001807',
            'cctv13'=>'600001811',
            'cctv14'=>'600001809',
            'cctv15'=>'600001815',
            'cctv17'=>'600001810',
            'zjws'=>'600002520',
            'jsws'=>'600002521',
            'szws'=>'600002481',
            'gdws'=>'600002485',
            'hljws'=>'600002498',
            'dfws'=>'600002483',
            'flws'=>'600002475'
    );
    $pid = $channels[$_GET['pid']];
    if(!$pid){
            die('need pid');
    }
    $lua_cmd =urlencode("
    function main(splash)
            splash:go('https://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('/https:\/\/liveinfo(.*?)"/', $source, $output);
    $api_url = str_replace('&defn=&', '&defn=fhd&', 'https://liveinfo'.$output[1]);
    $result = curl_get_contents($api_url);
    preg_match('/"playurl":"(.*?)\?from=player/', $result, $output);
    $play_url = $output[1];
    //header("Content-Type: audio/mpegurl");
    //header("Content-Disposition: attachment; filename=playlist.m3u");
    echo "#EXTM3U\r\n#EXTINF:-1 tvg-name='".$_GET['pid']."', ".$_GET['pid']."\r\n".$play_url;

    function curl_get_contents($url)
    {
            $header = array(
            'authority: liveinfo.yangshipin.cn',
            'user-agent: Mozilla/5.0 (Windows NT 10.2; Win64; x64) AppleWebKit/888.36 (KHTML, like Gecko) Chrome/88',
            'accept: */*',
            'referer: https://m.yangshipin.cn/video?'
            );
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
    }
?>

以上使用了浏览器引擎,Splash这个站长也不会用,可以肯定的是它效率低,不过够小范围的使用,思路不错。
某论坛权限帖,转过来一起学习下。

2、人肉抓

【使用工具】Google浏览器
【视频WAP端网页地址】

【CCTV】
超高清4K: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/video?type=1&vid=2000203603&pid=600001800
CCTV3:https://m.yangshipin.cn/video?type=1&vid=2000203803&pid=600001801
CCTV4:https://m.yangshipin.cn/video?type=1&vid=2000204803&pid=600001814
CCTV5:https://m.yangshipin.cn/video?type=1&vid=2000205103&pid=600001818
CCTV5+:https://m.yangshipin.cn/video?type=1&vid=2000204503&pid=600001817
CCTV6:https://m.yangshipin.cn/video?type=1&vid=2000203303&pid=600001802
CCTV7:https://m.yangshipin.cn/video?type=1&vid=2000510003&pid=600004092
CCTV8:https://m.yangshipin.cn/video?type=1&vid=2000203903&pid=600001803
CCTV9:https://m.yangshipin.cn/video?type=1&vid=2000499403&pid=600004078
CCTV10:https://m.yangshipin.cn/video?type=1&vid=2000203503&pid=600001805
CCTV11:https://m.yangshipin.cn/video?type=1&vid=2000204103&pid=600001806
CCTV12:https://m.yangshipin.cn/video?type=1&vid=2000202603&pid=600001807
CCTV13:https://m.yangshipin.cn/video?type=1&vid=2000204603&pid=600001811
CCTV14:https://m.yangshipin.cn/video?type=1&vid=2000204403&pid=600001809
CCTV15:https://m.yangshipin.cn/video?type=1&vid=2000205003&pid=600001815
CCTV16:无
CCTV17:https://m.yangshipin.cn/video?type=1&vid=2000204203&pid=600001810
【卫视】
浙江卫视:https://m.yangshipin.cn/video?type=1&vid=2000295503&pid=600002520
江苏卫视:https://m.yangshipin.cn/video?type=1&vid=2000295603&pid=600002521
深圳卫视:https://m.yangshipin.cn/video?type=1&vid=2000292203&pid=600002481
广东卫视:https://m.yangshipin.cn/video?type=1&vid=2000292703&pid=600002485
黑龙江卫视:https://m.yangshipin.cn/video?type=1&vid=2000293903&pid=600002498
东方卫视:https://m.yangshipin.cn/video?type=1&vid=2000292403&pid=600002483
湖南卫视:https://m.yangshipin.cn/video?type=1&vid=2000296203&pid=600002475

【抓包方法】
1. 首先使用浏览器打开网址(首次打开或者刷新的时候是不自动播放的),然后按F12(开发者工具)

《获取央视频直播流地址》
2. 点击视频的播放按钮,可以看到一个GET请求

《获取央视频直播流地址》
3. 这个GET请求就是获取的直播源地址,进入“ Preview ”查看GET请求的返回内容
看到这个GET请求很熟悉,和腾讯讯视频貌似是一样的,腾讯常用的vkey参数也出现在这,进入“ https://s.yangshipin.cn/txlive/js/txvlive.js ”你是不是发现了什么呢,这其实是腾讯团队开发的,解析思路和腾讯视频类似

《获取央视频直播流地址》

可以看到已经获取到了直播源地址为:

https://53e876d99f8c4520200d60f211684223.v.smtcdns.net/tlivecloud-cdn.ysp.cctv.cn/3A435B18CDE674D4347F344AD294692C244825ECFEC67CEB748F4FDE48F980FCC43755EE78F471DF0E8F3454A51045095EF9620606ADFE00DB62E37085C4F7237CA6D561C8C62E2A7947787AD2FFEABB4B896D4B1497391C9BBAE38D1D4420DF/2000210103.m3u8?from=player&svrtime=1574678195&pid=600001859&cdn=5501

其实我们用不到这么长的地址,只需要.m3u8之前的内容就ok
截取后:

https://53e876d99f8c4520200d60f211684223.v.smtcdns.net/tlivecloud-cdn.ysp.cctv.cn/3A435B18CDE674D4347F344AD294692C244825ECFEC67CEB748F4FDE48F980FCC43755EE78F471DF0E8F3454A51045095EF9620606ADFE00DB62E37085C4F7237CA6D561C8C62E2A7947787AD2FFEABB4B896D4B1497391C9BBAE38D1D4420DF/2000210103.m3u8

其实解析域名也可以换下:

https://live-cnc-cdn.ysp.cctv.cn/3A435B18CDE674D4347F344AD294692C244825ECFEC67CEB748F4FDE48F980FCC43755EE78F471DF0E8F3454A51045095EF9620606ADFE00DB62E37085C4F7237CA6D561C8C62E2A7947787AD2FFEABB4B896D4B1497391C9BBAE38D1D4420DF/2000210103.m3u8

中间的内容“3A435B18CDE674D4347F344AD294692C244825ECFEC67CEB748F4FDE48F980FCC43755EE78F471DF0E8F3454A51045095EF9620606ADFE00DB62E37085C4F7237CA6D561C8C62E2A7947787AD2FFEABB4B896D4B1497391C9BBAE38D1D4420DF”就是vkey的值,这个vkey一般一天时间就失效了,需要重新获取vkey,如果vkey失效的话只需要重新获取vkey值替换就可以了

当然使用视频嗅探工具嗅探地址也是可以的,比如站长常用的 IDM
《获取央视频直播流地址》

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注

  1. zwb83925462 zwb83925462 说道:

    卫视没法放了,只有CCTV的还能用移动版网页

  2. zwb83925462 zwb83925462 说道:

    Chrome用扩展"猫抓",能方便的获取m3u8地址

  3. zhengcy zhengcy 说道:

    大佬,能不能做一个自动获取央视频的php,央视屏每天更新一次vkey很烦

  4. mbox mbox 说道:

    CCTV13的高清源有没有?

  5. lisa1936 lisa1936 说道:

    老大,你可以研究下香港TVB翡翠台的官方直播吗?
    https://www.mytvsuper.com/tc/live/81

    我翻后可以登陆网站并观看。因为官方的,画质很不错。网上TVB的直播死的7788了,真心想请你研究下,我可以提供vps和香港机场,你可以email我

  6. 寻 说道:

    没有播放按钮了怎么办啊 :028:

    1. 黑鸟 说道:

      哦,开始强制推广他们家的 APP 了,目测不让网页看了,没办法

  7. 11sa 11sa 说道:

    有没有上海本地台啊,特别是五星体育。多处都失效了!

  8. colinjian22 说道:

    抓出来不是4K的,标清。什么原因?

  9. 子轩 子轩 说道:

    splash_api_address是不是只需要改这个参数?

  10. 子轩 子轩 说道:

    大神 按你这个教程搞了php代理 也装了 docker版splash php里的api地址改为了实际的 但是不能访问啊 求助

  11. 地方去 说道:

    发代理出来

  12. nicepic nicepic 说道:

    选不了清晰度阿 求教

  13. 王洪喜 说道:

    这个代理看不懂啊,怎么用,为什么我只是显示 need pid

  14. ni ni 说道:

    能加一个节目收藏就更好了。毕竟那没多节目也只可能看为数不多的几个自己喜欢的。

  15. 婚书网 婚书网 说道:

    已加入收藏夹,时不时的来看看有没有更新博文!

  16. 小猪 小猪 说道:

    看一下这里
    https://www.right.com.cn/forum/thread-1490507-1-1.html :010:

  17. konlwew konlwew 说道:

    打不开。提示:“服务器忙到昏倒了”

  18. dhtskgb dhtskgb 说道:

    大佬:黑鸟播放器右下角的广告非常影响观看,广告位置能不能稍微小一点。

    1. 黑鸟 说道:

      然而,这个广告不是我加的 :006:

  19. 用的人不少 用的人不少 说道:

    大神,黑鸟播放器,片库系统虎牙直播怎么没有播放列表了

    1. 黑鸟 说道:

      这个记得已经说明过,由于11月12号左右,虎牙官方更新了一波,导致之前的代码无法获取分类信息,下个版本会更新修复 ..

      1. 不多 说道:

        最近黑鸟播放器右下角添加了广告了 :021: :021: