在小网站看视频,翻了翻源代码,发现视频源的url毫不设防地放在前端代码里
于是顺手放url到网页上搜索了一下,发现是下载后缀为.m3u8的视频文件
很快下载完了,但是视频播放工具无法打开。搜了下有没有在线播放的网页,果真有。
并提供了插件代码
<iframe src="https://m3u8player.org/player.html?url=https://****index.m3u8"></iframe>
大好人。
实践:
这里这个块就由以上代码直接写入得来,由于网址错误,因此不会展示任何视频内容
将得到的视频url粘贴到iframe的src属性中,播放成功。
以下内容就摘自该网页,不仅提供了播放方法,还详细对m3u8文件格式进行了介绍,还对
如何打开m3u8文件进行了说明。
M3U8Player 是一款实现 HTTP 实时流客户端的 Chrome 浏览器扩展工具。你可以播放 .m3u8 HTTP Live Streaming (HLS)。它依靠 HTML5 视频和媒体源扩展进行播放。它的工作原理是将 MPEG-2 传输流和 AAC/MP3 流转换成 ISO BMFF (MP4) 片段。如果浏览器中有 Web Worker,可使用它异步执行转码。它还支持 HLS + fmp4。
什么是m3u8文件?
文件扩展名为 M3U8 的文件是一种 UTF-8 编码的音频播放列表文件。它们是纯文本文件,音频和视频播放器都可以用它们来描述媒体文件的位置。
例如,一个 M3U8 文件可能会提供互联网电台的在线文件参考。另一个文件可能是在你的电脑上创建的,用于为你的个人音乐或一系列视频建立播放列表。
无论哪种方式,效果都是一样的:你可以打开文件,快速轻松地开始播放播放列表指向的内容。如果你发现自己想反复听同一首歌,你可以制作一个 M3U8 文件,作为在媒体播放器中播放这些特定曲目的快捷方式。
文件可以使用绝对路径、相对路径和 URL 来指向特定的媒体文件和/或媒体文件的整个文件夹。文件中的其他信息可能是描述文件内容的注释。
M3U8是一种播放多媒体列表的文件格式,它的设计初衷是为了播放音频文件,比如MP3,但是越来越多的软件现在用来播放视频文件列表,M3U8也可以指定在线流媒体音频源。很多播放器和软件都支持M3U8文件格式。
如何打开m3u8文件?
大多数文本编辑器都可以编辑和读取 M3U8 文件,包括 Windows 中的记事本。不过,用记事本打开一个文件只能让你读取文件引用。实际上,你不能像这样播放这些音乐文件,因为文本编辑器与媒体播放器或媒体管理程序不同。
如果你正在寻找一个好的程序来打开和使用 M3U8 文件,不妨试试 VLC、iTunes 或 Songbird。另一种在 Linux 上打开 M3U8 文件的方法是使用 XMMS,而 CocoModX 则适用于 Mac 用户(此外还有一些与 Windows 兼容的程序)。
你可以通过 m3u8在线播放器 在线快速打开文件。不过,如果你的电脑或其他设备上存储有 M3U8 文件,该网站就无法使用。您只有在拥有该文件的 URL 且其引用的内容也在线的情况下才能使用它。
上面介绍了,m3u8文件是纯文本,它可以指向媒体文件的位置,这就是为什么下载下的这么快。
盗版网站可能就通过爬取网页中的视频源地址,然后插入此播放器工具进行在线播放
那不如再深究一番,看看m3u8里到底有什么——
记事本打开后,如下:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:20
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="enc.key",IV=0x00000000000000000000000000000000
#EXTINF:10.416667,
https://****/路径/plist0.ts
#EXTINF:12.250000,
#再往下就都是`https://` 加`#EXTINF:`这种格式,直到结尾
……
#EXT-X-ENDLIST
拿其中一个网址一搜索,依旧是下载资源,但是是.ts文件格式的资源
搜索得:
ts为一种数据封装格式,用于流媒体传输,由两部分组成:头部和数据。头部包含了一些元数据,比如时长、分辨率、编码格式等。数据则是实际的媒体数据。
所以在线播放直观来讲就是在线播放器异步解析存储在.m3u8中的ts文件地址,然后转换成可以播放的画面。
那,问题来了,m3u8文件会暴漏视频源的地址,那正规视频网站如何保护文件不被盗链?
查了爱奇艺和bilibili,发现他们播放方式如下
<video style="略" src="blob:https://***/*"></video>
blob URL是由浏览器生成的url,指向储存在浏览器内存中的文件,不会暴漏视频源地址。
网站宁可加密也要把视频源放前端?
当然是为了减少与服务端交互,让播放更流畅。
那在这种情况下,有没有办法获取真实路径和下载视频到本地?
AI上代码
//代码由ai生成,不归属与任何人,且未经检验,仅为思路
// ==UserScript==
// @name 视频下载助手
// @namespace http://tampermonkey.net/
// @version 0.1
// @description 尝试获取视频的真实下载链接
// @author nobody
// @match https://*/* //此处应是对应网站的url
// @grant none
// ==/UserScript==
(function() {
'use strict';
// 查找视频元素,这通常需要根据目标网站的HTML结构调整
var videoElement = document.querySelector('video');
if (videoElement) {
var videoSource = videoElement.currentSrc;
if (videoSource.startsWith('blob:')) {
// 获取blob URL的实际内容
fetch(videoSource)
.then(response => response.blob())
.then(blob => {
// 创建一个临时的URL指向这个blob对象
var objectURL = URL.createObjectURL(blob);
console.log('视频实际下载链接:', objectURL);
// 创建下载链接
var a = document.createElement('a');
a.href = objectURL;
a.download = 'video.mp4'; // 设置下载的文件名
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
// 释放URL
URL.revokeObjectURL(objectURL);
})
.catch(error => console.error('无法获取视频内容:', error));
} else {
console.log('视频源不是blob URL:', videoSource);
}
} else {
console.log('页面中没有找到视频元素');
}
})();
因为网站的url也是播放过程中随机生成的,因此直接运行不一定能得到正确网址,可以把脚本放油猴里,配合网站一起使用。
当然,在代码无误的情况下,一般来说应该也不会成功。
正儿八经的m3u8文件下载网页:https://www.yeyulingfeng.com/tools/m3u8-downloader/
此方悬停