CETV官网直播源无法播放的解决方案

中国教育网络电视台CETV的几个频道虽然没什么好看,但就是想收藏下,满足感?!..
官方地址:http://www.centv.cn/
抓取真实的直播源地址方法并无特别,直接工具嗅探,或者浏览器的“开发者工具”就足够解决

《CETV官网直播源无法播放的解决方案》

CETV1,http://livehd.centv.cn/live/cetv1.m3u8
CETV2,http://livehd.centv.cn/live/cetv2.m3u8
CETV3,http://livehd.centv.cn/live/cetv3.m3u8
CETV4,http://livehd.centv.cn/live/cetv4.m3u8

问题根源

以上地址使用 Potplayer 和 VLC 等播放器无法播放,无法播放!!
地址失效?不对的,龙共大佬的超级看可正常播放!!

问题的根源在于该源带有文件头保护,需要加入文件头header!这个源只要加入Referer参数即可..

简单说下此处Referer的作用:
HTTP来源地址(referer,或 HTTP referer)是HTTP表头的一个字段,用来表示从哪儿链接到目前的网页,采用的格式是URL。换句话说,借着HTTP来源地址,目前的网页可以检查访客从哪里而来,这也常被用来对付伪造的跨网站请求。

1.防盗链。
比如黑鸟博客的文章里有一个https://www.sina.com.cn/链接,那么点击这个超链接,它的header信息里就包含有有类似:
Referer = https://guihet点com/

那么可以利用这个来防止盗链了,比如此处CETV只允许自己的网站访问它自己的直播服务器,那它的域名是www.centv.cn,那么直播服务器每次取到Referer来判断一下是不是它自己的域名www.centv.cn,如果是就继续访问,不是就拦截。
这就达到防盗链的效果了..

将这个http请求发给服务器后,如果服务器要求必须是某个地址或者某几个地址才能访问,而你发送的referer不符合他的要求,就会拦截或者跳转到他要求的地址,或者返回一个异常信息等,比如此处直接返回403,异常播放器无法取到有效数据就无法播放了..

《CETV官网直播源无法播放的解决方案》
2.防止恶意请求
举例静态的请求是*.html后缀的,动态的请求则是*.shtml,那么就可以这样使用,所有的*.shtml请求里必须有Referer,且为黑鸟博客自己的网站。

解决方案

讲了这么多,解决方案是在向它的服务器请求数据的时候带上
Referer: http://www.centv.cn/ 或者 Referer:http://livehd.centv.cn/ 或者 http://livehd.centv.cn/live/cetv1.m3u8 等
以下是加了Header后浏览器也可以正确获取m3u8文件

《CETV官网直播源无法播放的解决方案》
以下是直接使用播放器自定义了Header后也可以正常播放了

《CETV官网直播源无法播放的解决方案》

其他

以上问题来源于某站,由 disth 大佬提供方法,由黑鸟博客进行了完善和整理..

发表回复

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

  1. 侯老师 侯老师 说道:

    加上了,还是不好用。

  2. 侯老师 侯老师 说道:

    现在黑龙江电视台,康巴电视台,中国教育,江苏,西藏官网都采用这种方式了,希望黑鸟老大能把代码放出来,光等别人做好,太难了。

  3. ggs ggs 说道:

    请问下能否自定义http referer的播放器是叫什么,我找了半天没找到,忘告知,谢谢了!

    1. 黑鸟君 说道:

      PeteDB播放器,这个自定义 Referer 的功能后续也会加到本站的“黑鸟播放器”内..

      1. ggs ggs 说道:

        这个播放器官网不提供下载了。您能否发一份给我呀,交流学习,谢谢了!
        385518113@qq.com

  4. 白鸟 白鸟 说道:

    看了半天,只知道要加header,不知道怎么加header,我用的是友窝和pp

    1. 黑鸟君 说道:

      不会加就不要加,你就坐着等会的人搞好分享给你..

      1. 白鸟 白鸟 说道:

        请教用php怎么加Referer
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_REFERER,'http://xxxx.com/');
        curl_setopt($ch, CURLOPT_VERBOSE,true);
        curl_setopt($ch, CURLOPT_HEADER,true);
        curl_setopt($ch, CURLOPT_NOBODY,true);
        curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'GET');
        curl_setopt($ch, CURLOPT_RETURNTRANSFER,true);
        curl_setopt($ch, CURLOPT_TIMEOUT,20);
        curl_setopt($ch, CURLOPT_AUTOREFERER,true);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION,true);
        $ret=curl_exec($ch);
        最后要怎么把这个ch输出

  5. 草花 说道:

    要是有php代码实例,就更好了

  6. 艾立 艾立 说道:

    直接使用播放器自定义了Header,上述用的是什么播放器?

  7. 卢松松博客 说道:

    第一眼差点看错 CCTV 这种确实是有点偏

  8. 顾敏锋博客 顾敏锋博客 说道:

    有没有看youtub的教程

    1. 黑鸟君 说道:

      会搞,但这种东西不适合描述太多,和河蟹谐..