浏览器javascript 下载m3u8视频合成mp4

浏览器javascript 下载m3u8视频合成mp4m3u8download.jsdownloadm3u8URLtomp4下载m3u8视频合成一个完整的mp4源码:https://github.com/ccjy88/m3u8download.js功能m3u8downloader是在chrome浏览器中运行的html和js,用于下载m3u8视频。当视频链接比如是https://test-streams.mux.dev/x36xh…

大家好,又见面了,我是你们的朋友全栈君。

m3u8download.js

download m3u8 URL to mp4 下载m3u8视频合成一个完整的mp4
源码:https://github.com/ccjy88/m3u8download.js

功能

m3u8downloader是在chrome浏览器中运行的html和js,用于下载m3u8视频。
当视频链接比如是https://test-streams.mux.dev/x36xhzz/x36xhzz.m3u8
m3u8download可以自动分析m3u8文件,下载多个ts文件,视频是AES-128加密的,
m3u8downloader进行解密后存为ts文件。并生成ffmepg用于concat的文件,可以
用ffmpeg命令合成一个完整的mp4文件。

特征

  • 输入m3u8 URL,下载分析m3u8。
  • 下载m3u8中的嵌套的playlist,下载相关的m3u8 URL.
  • 下载m3u8中的ts视频文件。
  • 支持ts视频AES-128解密
  • 生成ffmpeg命令需要的f.txt文件清单文件。
  • 方便用ffmpeg命令将所有ts文件按f.txt的次序合成一个mp4文件。
  • 提供python文件检查下载失败的ts,可在文件名callback中定义,只下载指定的缺失文件。

使用方法

将m3u8index.html和dist目录copy到nginx的html目录。
比如nginx安装在本地d:\nginx-1.80.0
运行deploy.cmd
copy m3u8*.html D:\nginx-1.18.0\html
xcopy /E /Y dist D:\nginx-1.18.0\html\dist

启动nginx,用chrome访问http://127.0.0.1/m3u8index.html, 在URL地址输入相关的m3u8地址。
比如搜到电影《极限逃生》,在Chrome浏览器中按F12,看Network中m3u8URL是
https://dbx5.tyswmp.com/20190910/oKHsD3EG/900kb/hls/index.m3u8,
把这个地址复制到m3u8index.html页面中,点击”下载”钮就可以。

chrome浏览器配置

下载目录设置:chrome://settings/downloads 比如为d:\downloads
自动下载设置: chrome://settings/content/automaticDownloads 必须允许http://127.0.0.1自动下载。

合成mp4的方法:

安装ffmepeg for windows
运行cmd。
cd d:\downloads
ffmpeg -f concat -i f.txt -c copy -y full.mp4
这样就把所有的ts文件生成一个完整的full.mp4。

错误处理

如果下载过程中f.txt文件中有而实际下载失败,可以运行python checktsfile.py
将缺失文件定义到m3u8index.html中的 check_list_cb函数中filelist,再下载一次缺失文件就可以。

编译方法:

cnpm install
cnpm run build

参数调整

m3u8index.html中options.maxthreadcount并行几个xhr同时下载ts文件。默认为5。
writetimeout为写入文件的定时器间隔,默认200毫秒。如果机器慢文件大这个值调大。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135463.html原文链接:https://javaforall.net

(0)
上一篇 2022年5月3日 下午5:20
下一篇 2022年5月3日 下午5:20


相关推荐

  • ios事件-触摸事件3(UIButton 和 pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()的关系)

    ios事件-触摸事件3(UIButton 和 pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()的关系)ios事件-触摸事件3(UIButton和pointInSide()、hitTest()、touchesBegan()、touchesMoved()、touchesEnded()、touchesCancelled()的关系)先看效果图本文中,凡是看到xxx(),即表示xxx是一个函数或者方法!!!事件分为事件传递和事件响应,其中,事件响应又称事件处理。具体代码ButtonVC的代码…

    2022年7月25日
    18
  • OpenLDAP安装与配置

    OpenLDAP安装与配置一 背景因为公司项目中已经使用到 ldap 但是不是我搭建的 并且 ldap 是部署在另一台机器上 现在需要切一个简化系统给客户去使用 并且只用一台服务器 需要使用单独的用户和数据管理 所以就开始了 ldap 的安装和搭建工作 二 OpenLDAP 简介在安装 OpenLDAP 之前 我们首先来介绍下 LDAP LDAP 是一款轻量级目录访问协议 LightweightD

    2026年3月17日
    1
  • 基于Containerd部署Kubernetes

    基于Containerd部署Kubernetes

    2021年6月4日
    117
  • 数据库原理之函数依赖、多值依赖

    数据库原理之函数依赖、多值依赖这种概念很容易推广到关系数据库模式上 R U U X Y Z K 对于任何一个元组 只要 X Y Z 确定了 就能确定整个元组 也就是存在 K f X Y Z 的关系 只不过这里的 f 不能用公式表达 而只能是语义上的含义 若 X Y 在 R U 上成立 且 Y 包含于 Y 不能断言 X Y 在 R U 上成立 注意和上一条性质不同 因为多值依赖中的定义中涉及了 U 中除了 X Y 之外的其余属性 Z 因此换成 Y 后就需要涉及 Z U X Y 比之前确定 X Y 的时候属性列多 就不一定了

    2026年3月26日
    2
  • 基于android的_android studio创建activity

    基于android的_android studio创建activityAndroid如何判断一个应用在运行 在一个应用中,或一个Service、Receiver中判断一个应用是否正在运行,以便进行一些相关的处理。这个时候我们需要得到一个ActivityManager,这个Manager顾名思意就是管理Activity的,它有一个方法叫getRunningTasks,可以得到当前系统正在运行的Task的列表,代码如下:  A

    2025年9月26日
    8
  • c字符串转数组 数组转字符串

    c字符串转数组 数组转字符串stringstr a b c d e string strArray str Split 字符串转数组 str string Empty str string Join strArray 数组转成字符串

    2026年3月18日
    1

发表回复

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

关注全栈程序员社区公众号