cat-catch icon indicating copy to clipboard operation
cat-catch copied to clipboard

请问基于m3u8的视频到底该怎么下载?

Open butaixianran opened this issue 2 years ago • 8 comments

猫抓能解析到m3u8,但是那只是个.ts文件清单。这意思是,自己下载m3u8,再用别的工具,去下载这个m3u8对应的.ts文件,然后合并吗?

猫抓不能像stream recorder扩展那样,在扩展内,下载m3u8对应的所有.ts文件,然后扩展自动进行合并,用户最终直接得到一个mp4文件吗?

butaixianran avatar Jun 07 '22 16:06 butaixianran

在计划里,目前2.0重点还是在捕获功能上,以后会去加强m3u8功能

xifangczy avatar Jun 08 '22 02:06 xifangczy

配合N_m3u8DL-CLI使用,完美!

z79914 avatar Jun 10 '22 11:06 z79914

看了下,N_m3u8DL-CLI 支持一个叫:m3u8dl://的协议,可以通过这个地址直接调用。既然如此,那么不开发扩展内下载合并m3u8也是可以的,一键填入 m3u8dl:// 协议地址,并打开本地N_m3u8DL-CLI 下载就行了。

因为chrome如今不允许扩展下载基于ssl的m3u8内容,所以还是用第三方下载工具算了。但是要注意,必须填入referer到header中。现在的视频网站,提供的m3u8,都会通过header中的referer,来限定来源。第三方工具如果不发送正确的referer,即使拿到了m3u8,一般也是下载不了的。

butaixianran avatar Jun 12 '22 16:06 butaixianran

看了下,N_m3u8DL-CLI 支持一个叫:m3u8dl://的协议,可以通过这个地址直接调用。既然如此,那么不开发扩展内下载合并m3u8也是可以的,一键填入 m3u8dl:// 协议地址,并打开本地N_m3u8DL-CLI 下载就行了。

因为chrome如今不允许扩展下载基于ssl的m3u8内容,所以还是用第三方下载工具算了。但是要注意,必须填入referer到header中。现在的视频网站,提供的m3u8,都会通过header中的referer,来限定来源。第三方工具如果不发送正确的referer,即使拿到了m3u8,一般也是下载不了的。

感谢你的研究。现在已经支持了m3u8dl://。另外在m3u8解析里也添加了一个简单的ts合并下载功能。

xifangczy avatar Jun 12 '22 18:06 xifangczy

感谢支持m3u8dl://,但是有几个问题:

  • 填入的referer有时候是错的。现在填入的referer,是当前网页地址。然而,视频站有些是,通过一个iframe,调用另一个域名下的视频播放器。猫抓解析到的,是那个iframe中的视频播放器里的m3u8。所以,这时候,referer需要是那个iframe中的网页地址,才能访问m3u8。

这个问题也存在于解析器中。因为解析m3u8需要iframe的页面地址作为referer,所以目前解析器对这种情况解析不了。

我还碰到过视频网站,故意用另一个域名,作为视频cdn的referer,就为了防止把当前网页作为referer,往下载工具里填的做法。

最根本的解决办法是,既然读取了网页请求m3u8的http request,那么里面的referer也应该可以获取到,那个referer,就是正确的referer,而不是当前网址。

  • 现在没有填入标题,所以标题是个不可读的编号。最好能用网页标题作为视频标题。

在解析页面,最下方"尝试下载ts并合并"这个按钮,下载的文件也有这个问题。没有使用页面标题作为文件名,导致文件名是一串不可读的编号。

butaixianran avatar Jun 12 '22 19:06 butaixianran

默认文件名使用的是m3u8的文件名,现在也能被 保存文件名使用网页标题 设置选项影响。 现在referer改成了浏览器给的initiator参数 不再是页面url 目前看来效果还不错。

解析器暂时没办法突破浏览器的安全策略去修改referer, 防范严格的网址还只能使用第三方工具。

xifangczy avatar Jun 13 '22 07:06 xifangczy

m3u8dl://下载的文件,文件名还是编号。直接加个$title$参数吧,一句replace的事情,简单方便。

butaixianran avatar Jun 13 '22 08:06 butaixianran

m3u8dl://下载的文件,文件名还是编号。直接加个$title$参数吧,一句replace的事情,简单方便。

👌

xifangczy avatar Jun 14 '22 16:06 xifangczy