首页 > 其他分享 >m3u8 视频在线提取工具

m3u8 视频在线提取工具

时间:2023-05-29 22:11:13浏览次数:50  
标签:视频 片段 在线 文件 m3u8 ts 下载

m3u8 视频在线提取工具(English version)

界面

工具在线地址,推荐使用 chrome 浏览器。

研发背景

  • m3u8视频格式简介

    • m3u8视频格式原理:将完整的视频拆分成多个 .ts 视频碎片,.m3u8 文件详细记录每个视频片段的地址。
    • 视频播放时,会先读取 .m3u8 文件,再逐个下载播放 .ts 视频片段。
    • 常用于直播业务,也常用该方法规避视频窃取的风险。加大视频窃取难度。
  • 鉴于 m3u8 以上特点,无法简单通过视频链接下载,需使用特定下载软件。

    • 但软件下载过程繁琐,试错成本高。
    • 使用软件的下载情况不稳定,常出现浏览器正常播放,但软件下载速度慢,甚至无法正常下载的情况。
    • 软件被编译打包,无法了解内部运行机制,不清楚里面到底发生了什么。
  • 基于以上原因,开发了本工具。

工具特点

  • 无需安装,打开网页即可用。
  • 强制下载现有片段,无需等待完整视频下载完成。
  • 操作直观,精确到视频碎片的操作。

功能说明


【解析下载】输入 m3u8 链接,点击下载视频。
【跨域复制代码】当资源出现跨域限制时,点击复制页面代码,在视频页面的控制台输入。将工具注入到视频页面中,解决跨域问题。
【重新下载错误片段】当部分视频片段下载失败时,点击该按钮,重新下载错误片段。
【强制下载现有片段】将已经下载好的视频片段强制整合下载。可以提前观看已经下载的片段。该操作不影响当前下载进程。
【片段Icon】对应每一个 .ts 视频片段的下载情况。「灰色」:待下载,「绿色」:下载成功,「红色」:下载失败。点击红色 Icon 可重新下载对应错误片段。

使用说明

  • 打开视频目标网页,鼠标右键「检查」,或者「开发者工具」,或者按下键盘的「F12」键
  • 找到 network,输入 m3u8,过滤 m3u8 文件。
  • 刷新页面,监听 m3u8 文件。

  • 找到目标m3u8文件,查看文件内容,是否符合格式。

    • 如下为索引文件,不是真正的视频 m3u8 文件

    • 一般内容有许多 ts 字眼的文件才是我们需要的视频 m3u8 文件。

  • 拷贝这个 m3u8 文件的链接。

  • 打开工具页面,输入链接,点击「解析下载」。
  • 出现片段 Icon,则证明操作成功,耐心等待视频下载。
  • 片段全部下载成功,将触发浏览器自动下载,下载整合后的完整视频。
  • 如果有片段下载失败,则点击对应片段,或点击「重新下载错误片段」按钮。重新下载错误片段。

异常情况

【无法下载,没有显示片段Icon】

  • 一般由于跨域造成。
  • 点击「跨域复制代码」按钮。
  • 打开视频目标网页的「开发者工具界面」,找到 console 栏。

  • 粘贴刚刚复制的内容,回车。
  • 滚动页面到底部,发现工具显示在底部。然后在注入的工具中正常使用。

【下载后的视频资源不可看】

  • 网站对视频源进行了加密操作。不同的视频网站有不同的算法操作。无法通用处理。
  • 一般网站不会有这种情况。爱奇艺,腾讯等大视频网站才会有该安全措施。

实现思路

【下载并解析 m3u8 文件】

  • 直接通过 ajax 的 get 请求 m3u8 文件。得到 m3u8 文件的内容字符串。读取字符串进行解析。
  • 需要注意的是,m3u8 文件不是 json 格式,不能将 dataType 设置为 json。
    【队列下载 ts 视频片段】
  • 同样使用 ajax 的 get 请求视频碎片,一个 ajax 请求一个 ts 视频碎片,但关键点在于,下载的是视频文件,属于二进制数据,需要将 responseType 请求头设置为 arraybuffer。xhr.responseType = 'arraybuffer'
  • 使用队列下载,是因为视频碎片太多,不可能一次性请求全部。需要分批下载。
  • 同时由于浏览器同源并发限制,视频同时请求数不能过多。本工具设置为并发下载数为 10。
    【组合 ts 视频片段】
  • 看似很难,但其实使用 Blob 对象即可将多个 ts 文件整合成一个文件。new Blob(),传入 ts 文件数组。
  • 这里有个小细节需要注意,需要在 new Blob 的第二个参数中设置文件的 MIME 类型,否则将默认为 txt 文件。 const fileBlob = new Blob(fileDataList, { type: 'video/MP2T' })
    【自动下载】
  • 下载,当然先要获得文件链接,即刚生成的 Blob 文件链接。
  • 使用 URL.createObjectURL,即可得到浏览器内存中,Blob 的文件链接。URL.createObjectURL(fileBlob)
  • 最后,使用 a 标签的 a.download 属性,将 a 标签设置为下载功能。主动调用 click 事件a.click()。完成文件自动下载。

核心代码

【整合及自动下载】

 
    // 下载整合后的TS文件
    downloadFile(fileDataList, fileName, fileType) {
      this.tips = 'ts 碎片整合中,请留意浏览器下载'
      const fileBlob = new Blob(fileDataList, { type: 'video/MP2T' }) // 创建一个Blob对象,并设置文件的 MIME 类型
      const a = document.createElement('a')
      a.download = fileName + '.' + fileType
      a.href = URL.createObjectURL(fileBlob)
      a.style.display = 'none'
      document.body.appendChild(a)
      a.click()
      a.remove()
    },

是的,涉及新知识点的部分只有上面一小段,其他的都是 JS 的基础应用。

除了 vue.js 文件,本工具代码均包含在 index.html 文件里面。包括换行,一共 540 行代码,其中 css 样式 190 行,html 标签 30 行。JS 逻辑代码 300 行。

罗列这些代码量只是想表明,本工具运用到的都只是 JS 的常见知识,并不复杂。鼓励大家多尝试阅读源码,其实看源码并没有想象中的那么困难。

源码链接

AES 常规解密功能

  • 借助「aes-decryptor.js」,该文件来至 hls.js

MP4 转码功能

  • 借助「mux-mp4.js」,源码来至 mux.js
  • 但 mux.js 存在一个无法计算视频长度的 bug
  • 本人已 fork 该项目,并修复该 bug,修复后的项目链接在这里

第三方接入

  • 在 url 中通过 source 参数拼接下载地址即可,如:http://blog.luckly-mjw.cn/tool-show/m3u8-downloader/index.html?source=http://1257120875.vod2.myqcloud.com/0ef121cdvodtransgzp1257120875/3055695e5285890780828799271/v.f230.m3u8
  • 系统将自动解析该参数

油猴插件,点击自动安装

  • 「跳转下载」即新开页面,打开本工具页面,自动携带并解析目标地址
  • 「注入下载」为解决跨域而生,直接将代码注入到当前视频网站,进行视频下载
  • 插件源码: https://github.com/Momo707577...
  • 手动添加油猴插件步骤

    • 点击 tamper-monkey「油猴」icon,点击「添加新脚本」

    • 在当前位置,粘贴上述链接中的源码

    • 点击「文本」,「保存」

    • 得到如下结果,即为添加成功

完结撒花,感谢阅读。

 

出处:https://segmentfault.com/a/1190000021847172

标签:视频,片段,在线,文件,m3u8,ts,下载
From: https://www.cnblogs.com/mq0036/p/17441816.html

相关文章

  • EasyCVR视频融合平台设备分组共享功能的使用介绍
    EasyCVR视频融合平台基于云边端一体化架构,具有强大的数据接入、处理及分发能力,平台支持海量视频汇聚管理,可支持多协议、多类型的设备接入,并能对设备进行分级、分组管理,并支持权限、角色分配,属于功能全面、性能稳定、高可靠、高可用的流媒体视频云服务平台。很多用户都使用过平台......
  • 两天,总计六个小时,中移在线核心业务系统顺利完成1050套欧拉操作系统迁移上线
    摘要:历时两天,总计六个小时,中国移动在线营销服务中心(简称中移在线)正式启动内部核心业务系统全网呼叫平台的迁移工作。首批1050套操作系统完成从CentOS(系统版本7.2、7.4和7.6)到 openEuler高效平滑迁移。中移在线拥有全球最大的呼叫平台,采用“中心+边缘”的部署架构,按照“控制集中,......
  • linphone-自动接听视频电话
    说明由于一定场合,需要需要自动接听视频。这时候linphone在Settings->VIDEO中勾选EnableVideo选项就可以实现自动接听视频选项了。在SettingsFragment.java中findPreference(getString(R.string.pref_video_enable_key)).setOnPreferenceChangeListener(newOnPreferenceChangeList......
  • 视频直播app源码,Android顶部导航栏制作
    视频直播app源码,Android顶部导航栏制作图片准备与样式变更因为目前版本UI默认以紫色色调为主,而在此我们希望使用更为和谐的淡蓝色调,此时需要对themes.xml文件执行修改; 首先我们要设置颜色,打开文件colors.xml文件中默认存在一些默认色彩,我们按照格式新增两个主色调blue_prima......
  • CST如何查看哪些 GPU 在线?
    CST能够使用GPU卡对仿真计算进行提速,本文档将说明如何查看工作站上安装了哪些GPU卡。 1.打开命令行窗口点击操作系统开始菜单中的运行,并输入cmd,打开命令行窗口(不同操作系统此步骤略有差异)。 2.进入NVSMI目录:使用命令行进入C:\ProgramFiles\NVIDIACorporation\NVSMI......
  • MxDraw(在线CAD,H5开发CAD) 2023.05.23更新
    1. 完善了CAD在线编辑功能2. 增加addControlsEvent函数3. 修改Linux下,转换大图纸时,有部分照出当前视范围 ,就不显示问题4. 在CAD打开图纸增加多线程支持5. 修改片元程序编译加载失败问题6. 修改iconv 在centos7上不对问题7. 增加对对象的引用计数判断,防止对象被释放......
  • 会声会影,premiere,Edius区别是什么?2023年视频编辑软件,哪个比较好呢?
    本文参考:http://t.csdn.cn/9hPYz自媒体如今已逐渐趋向于视频时代,新人UP主怀揣着“能恰到饭”的热情,“杀入”各大视频平台,只想求个“素质三连”,但这群无情的白嫖党们,总是“下次一定”以对之。是我不够帅吗?是我的内容不够优秀吗?还是我不够幽默呢?不。都不是。你与剪辑大神的距离,仅差一......
  • 转载-如何结合FT2232HL/CMSIS-DAP+Eclipse+OpenOCD软硬件工具使用SWD调试接口在Window
    原文链接:https://blog.csdn.net/zhuwade/article/details/121944736由于我们公司自己需要开发烧录工具,本人通过google搜相关文档和看ARM公司的技术文档,终于实现了这个功能。因为涉及的内容知识点比较多,对于玩嵌入式MCU的小白来说要普及的知识,逐个介绍篇幅会比较长,本文中只介绍......
  • Qt编写视频监控系统76-Onvif跨网段组播搜索和单播搜索的实现
    一、前言在视频监控行业一般会用国际onvif工具来测试设备是否支持onvif协议,工具的名字叫ONVIFDeviceManager(还有个工具叫ONVIFDeviceTestTool,专用于程序员测试各种数据交互),可以自行搜索下载,此工具位国际官方工具,如果此工具搜索不到摄像机,则说明该摄像机不是真正的onvif摄像......
  • MAC中文版 Final Cut Pro X(FCPX) V10.6.6 专属视频剪辑后期工具安装教程
    MAC中文版FinalCutProX(FCPX)V10.6.6专属视频剪辑后期工具安装教程FinalCutProX又名FCPX,是MAC上非常不错的视频非线性剪辑软件,它剪辑速度超凡,具有先进的调色功能、HDR视频支持,以及ProResRAW,让剪辑、音轨、图形特效、整片输出,支持主流的摄像机格式,是专业视频剪辑领......