作为程序员你看视频还在充会员吗?

2020-06-16 09:59发布

闲着无聊的时候我会看一些电影和电视剧比如【龙岭迷窟】,但是很多都是收费的,需要冲会员才可以看,虽然网上有很多插件可以使用,但是你不确定它什么时候就不维护了,很无奈,程序员嘛,所以研究一下怎么免费看

本次测试视频为:爱奇艺【龙虎山张天师】https://www.iqiyi.com/v_19ry2hvngk.html

视频文件在网络中是如何传输的?

一部完整的电影大小大概在2G左右,那么这个文件肯定是存放在服务器上的,但是问题是如果将整个文件以字节的方式响应到客户端(一般是浏览器页面),那么服务器端的读写时间会特别长,肯定是不靠谱的,百度了一下最终确定视频的播放套路大致是将一个完整的视频文件切分为N分很小的文件,然后使用另一个文件记录这些切分之后的顺序,当用户需要做客户端进行播放的时候可以通过下载或者接收切分之后的文件数据,在了解完大概的套路之后就开始动手了

事实证明我的思路是正确的,有图为证

当我随便点开一部VIP的电影,打开Chrome浏览器,在网络请求部分选择全部,然后输入.ts过滤一下就得到了很多链接,这些链接指向一个文件,将文件下载下来之后就是一个个的视频片段

当然这里面其实还牵扯到视频在网络播放的格式的概念,比如流媒体和伪流媒体等等,当然了还有些乱七八糟的协议,因为我不是专业做这个的也不是特别了解

2. 获取记录视频文件列表的的文件

这一点其实是最难的,因为既然是VIP也就意味着肯定不会直接给我们,还好现在的网络很强大,这一部分功能已经有人帮我们完成的了,收集了一些免费无广告的VIP视频接口解析的站点

http://jx.618g.com/?url=

http://api.rdhk.net/Tongdao/?url=

https://ys.ykmbbs.top/?v=

https://www.myxin.top/jx/api/?url=

http://www.syhbyl.tw/jx/api/?url=

http://jx.kkqtv.com/jx/api/?url=

https://206dy.com/vip.php?url=

https://vip.hackmg.com/jx/index.php?url=

http://jx.wslmf.com/?url=

http://api.52xmw.com/?url=

这里我使用的是http://jx.618g.com其他的站点我没有一个个测试,随机测试了几个都是可用的,这些站点无一例外也不会直接给我们,没关系,提交我们想看的视频页面,然后打开调试页面就可以看到我们想要的东西

这个后缀是m3u8的文件就是用来记录切分之后视频文件顺序的文件

3. m3u8文件解析

打开这个文件我们大概能够得到3种不同类型的内容

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-ALLOW-CACHE:YES
#EXT-X-TARGETDURATION:19
#EXTINF:12.640000,
out000.ts
#EXTINF:7.960000,
out001.ts
#EXTINF:12.280000,
out002.ts
#EXTINF:7.520000,
out003.ts
#EXTINF:10.240000,
out004.ts
#EXTM3U
#EXT-X-MEDIA-SEQUENCE:140651513
#EXT-X-TARGETDURATION:10
#EXTINF:8,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651513.ts
#EXTINF:9,
http://vapp1.fw.live.cntv.cn/cache/289_/seg0/index140651514.ts

对于这一类的m3u8文件,其实是需要重定向的,重定向后可以获得真实的m3u8地址,从而获取到对应的ts地址

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
1000k/hls/index.m3u8

对于只有文件名的ts文件,只要把它对应的m3u8地址最后的文件名替换成ts文件名就行了

对于带有路径的,根据url规则,如果以/开头的,则代表是在域名根目录下的,不是/开头的,则代表是在当前目录下的,进行相应替换就可以得到ts文件的url地址了

4. 举个例子

以这个地址为例:https://youku.cdn7-okzy.com/20200605/19968_56117e41/index.m3u8,向这个地址发送请求,得到如下响应内容

#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=800000,RESOLUTION=1080x608
1000k/hls/index.m3u8

地址转换为:https://youku.cdn7-okzy.com/20200605/19968_56117e41/1000k/hls/index.m3u8,后再次发送请求,得到如下响应内容

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:8
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:4.000000,
dd86c7f07a7000000.ts
#EXTINF:7.320000,
dd86c7f07a7000001.ts
#EXTINF:4.000000,
dd86c7f07a7000002.ts
#EXTINF:1.640000,
dd86c7f07a7000003.ts
#EXTINF:3.680000,
dd86c7f07a7000004.ts

再次地址转换为:https://youku.cdn7-okzy.com/20200605/19968_56117e41/1000k/hls/dd86c7f07a7000000.ts,此时就可以把ts文件下载到本地了,ts文件就是视频的片段,也就是前面提到的切分之后的文件

5. 关于播放

第一种方式:最直接的办法,将这个视频所有的ts文件下载之后,在cmd中执行copy /b *.ts movie_new.mp4,基本上是靠谱的,我没有使用

第二种方式:利用代码以字节的形式将内容直接追加到一个文件中,格式自定,这也是我为啥没有使用第一种方式的理由

第三种方式:不下载ts文件,直接在线播放,我用HTML引用videojs-contrib-hls插件【https://github.com/videojs/videojs-contrib-hls】已经实现了,需要的朋友可以留言,至于Delphi可以使用vlc插件实现,具体的我还没来及研究

文章写到这里基本上就结束了!有的朋友可能会觉得没有完整的代码,我想说的是台我已经搭好了,就看你怎么把戏唱好了

纯属技术交流,商业行为和本文无关!