开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 1173|回复: 34
打印 上一主题 下一主题
收起左侧

[易语言软件开源] MPV自改线程池M3U8下载器(2025)

[复制链接]
跳转到指定楼层
发表于 2025-3-9 04:15:39 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   陕西省安康市
分享源码
界面截图:
是否带模块: 调用了模块
备注说明: -
这版下载器是将MPV播放器和线程池下载M3U8结合在一起,方便先查看M3U8源是否可观看然后下载,还是需要用到ffmpeg.exe。如果线程池解析不出,可直接用ffmpeg下载,那需要用到33M以上的ffmpeg,你可以从网上下载,我资源里只传了11M的ffmpeg,因为目前我用线程池和11M的已经够用了。我封装依赖的模块,为了美化另用了皮肤模块,相关源码和成品在云盘里了。 33个皮肤模块.rar (796.42 KB, 下载次数: 14)
MPV播放线程池下载模块2025.rar (16.94 KB, 下载次数: 39)
  
窗口程序集名保 留  保 留备 注
窗口程序集_启动窗口   
变量名类 型数组备 注
线程池线程池自改版  
临时目录文本型  
已下载数整数型必须在窗口或全局变量里,保证进度条工作
mpvmpv播放器  

子程序名返回值类型公开备 注
__启动窗口_创建完毕  
mpv.创建 (图片框1.取窗口句柄 ())
拖放对象1.注册拖放控件 (图片框1.取窗口句柄 ())
加载皮肤 (20)
时钟1.时钟周期 = 1
子程序名返回值类型公开备 注
_时钟1_周期事件  
' 标签6.标题 = 到文本 (四舍五入 (mpv.取位置 () ÷ mpv.取长度 (), 2) × 100) + “%”
标签6.标题 = 时间格式化 (到文本 (四舍五入 (mpv.取位置 (), 2)))“/”时间格式化 (到文本 (四舍五入 (mpv.取长度 (), 2)))
' 标签2.标题 = 格式化文本 (“%d%% / 100%%”, mpv.取百分比位置 ())
进度条.位置 = mpv.取百分比位置 ()
子程序名返回值类型公开备 注
_按钮_暂停_被单击  
mpv.暂停 ()
子程序名返回值类型公开备 注
_按钮_播放_被单击  
mpv.播放 ()
mpv.是否循环播放 ()
子程序名返回值类型公开备 注
_hk条_音量_位置被改变  
mpv.置音量 (hk条_音量.位置)
子程序名返回值类型公开备 注
_按钮_打开_被单击  
如果真 (通用对话框1.打开 ())
mpv.打开 (通用对话框1.文件名)
mpv.是否循环播放 ()

子程序名返回值类型公开备 注
_按钮_打开2_被单击  
如果 (编辑框2.内容 = “”)
信息框 (“请将URL填入m3u8源框内”, 0, , )
返回 ()
mpv.打开 (编辑框2.内容)
mpv.是否循环播放 ()

子程序名返回值类型公开备 注
__启动窗口_尺寸被改变  
如果 (_启动窗口.位置 = 3)
图片框1.移动 (0, 2, 取用户区宽度 (), 取用户区高度 () × 0.95)
进度条.移动 (280, 取用户区高度 () × 0.97, 取用户区宽度 () × 0.4, 15)
hk条_音量.移动 (取用户区宽度 () × 0.9, 取用户区高度 () × 0.97, 90, 20)
按钮_打开.移动 (取用户区宽度 () × 0.6, 取用户区高度 () × 0.97, 64, 25)
按钮_播放.移动 (取用户区宽度 () × 0.75, 取用户区高度 () × 0.97, 64, 25)
按钮_暂停.移动 (取用户区宽度 () × 0.7, 取用户区高度 () × 0.97, 64, 25)
按钮_打开2.移动 (取用户区宽度 () × 0.65, 取用户区高度 () × 0.97, 64, 25)
按钮_停止.移动 (取用户区宽度 () × 0.8, 取用户区高度 () × 0.97, 64, 25)
标签6.移动 (19, 取用户区高度 () × 0.965, 153, 25)
图片框1.移动 (0, 1, 344, 260)
进度条.移动 (160, 270, 124, 15)
hk条_音量.移动 (285, 267, 65, 20)
按钮_打开.移动 (9, 296, 64, 25)
按钮_播放.移动 (201, 296, 64, 25)
按钮_暂停.移动 (137, 296, 64, 25)
按钮_打开2.移动 (73, 296, 64, 25)
标签6.移动 (6, 266, 153, 20)
按钮_停止.移动 (265, 296, 64, 25)

子程序名返回值类型公开备 注
_按钮_停止_被单击  
mpv.打开 (“”)
时钟1.时钟周期 = 1
子程序名返回值类型公开备 注
_拖放对象1_得到文件  
参数名类 型参考可空数组备 注
接收到的文件路径文本型
mpv.打开 (接收到的文件路径)
mpv.是否循环播放 ()
子程序名返回值类型公开备 注
执行下载  
变量名类 型静态数组备 注
线程ID整数型 
线程池.启动 (到整数 (编辑框_线程数.内容), &下载, )
计次循环首 (超级列表框1.取表项数 (), 线程ID)
线程池.加入工作 (线程ID)
计次循环尾 ()
子程序名返回值类型公开备 注
下载  
参数名类 型参考可空数组备 注
总行数整数型
变量名类 型静态数组备 注
切片源文本型 
切片源 = 超级列表框1.取标题 (总行数 - 1, 1)
写到文件 (临时目录 + “\”网页_取网址文件名 (切片源), HTTP读文件 (切片源))
超级列表框1.置标题 (总行数 - 1, 2, “已下载”)
已下载数 = 已下载数 + 1
进度条1.位置 = 到整数 (已下载数 ÷ 超级列表框1.取表项数 () × 100)
标签2.标题 = 到文本 (进度条1.位置)“%”
如果真 (标签2.标题 = “100%”)
线程池.关闭 (到整数 (编辑框_线程数.内容))
下载子程序 ()

子程序名返回值类型公开备 注
下载子程序  
标签2.标题 = “下载完成,正在转换”
如果 (文件是否存在 (取运行目录 ()“\ffmpeg.exe”))
信息框 (“请将ffmpeg.exe放在本程序目录中”, 0, , )
返回 ()
系统_取DOS执行结果 (取运行目录 ()“\ffmpeg -allowed_extensions ALL -i  ” + 临时目录 + “\index.m3u8 -c copy  ”取运行目录 ()“\” + 编辑框_文件名.内容 + “.mp4”)
如果真 (文件是否存在 (取运行目录 ()“\” + 编辑框_文件名.内容 + “.mp4”))
删除目录 (临时目录)
标签2.标题 = “下载完成,源已删除”
进度条1.位置 = 0
超级列表框1.全部删除 ()


子程序名返回值类型公开备 注
_按钮_解析_被单击  
临时目录 = 取运行目录 ()“\” + 编辑框_文件名.内容
如果 (编辑框2.内容 ≠ “” 编辑框_文件名.内容 ≠ “”)
如果 (文件是否存在 (取运行目录 ()“\” + 编辑框_文件名.内容 + “.mp4”))
创建目录 (临时目录)
信息框 (“文件已存在或文件名重复,请重命名”, 0, , )
返回 ()

信息框 (“下载链接或保存名没有填,请检查”, 0, , )
返回 ()

启动线程 (&解析, , )
子程序名返回值类型公开备 注
解析 分析出ts数组下载流
变量名类 型静态数组备 注
m3u8文本型m3u8源
路径文本型保存文件本地路径
地址源文本型分析开始地址**
新地址文本型得到二次地址**
域名头文本型链接头部**
域名中文本型链接中部**
域名尾文本型链接尾部**
key正则正则表达式类匹配取引号中间key
本地key文本型下载到本地的key
key替换文本型替换key文件中的网址为本地
计数整数型记录次数的变量
key文件文本型解密文件
域名文本型流名前附加域名**
二次源文本型分析二次地址返回文本**
ts列表文本型0分析得到下载列表**
解析流名文本型分解出单条ts**
计次整数型循环变量**
待换数组文本型0m3u8本地组
用作替换数组文本型0m3u8本地组
表项行整数型列表第几行
路径 = 子文本替换 (临时目录, “\”, “/”, , , )
m3u8 = 子文本替换 (编辑框2.内容, “\”, “/”, , , )
域名头 = 文本_取左边 (m3u8, 网页_取域名 (m3u8), , )网页_取域名 (m3u8)
域名尾 = 网页_取网址文件名 (m3u8)  ' index.m3u8
域名中 = 文本_取出中间文本 (m3u8, 域名头, 域名尾, , )
' =============================================================拆分初始地链接
地址源 = 到文本 (HTTP读文件 (删首尾空 (m3u8)))
如果 (地址源 = “”)
信息框 (“m3u8地址失效,可将https换成http再试”, 0, , )
返回 ()

如果 (寻找文本 (地址源, “http”, , ) ≠ -1)
新地址 = m3u8
如果 (寻找文本 (地址源, 域名中, , ) ≠ -1)
新地址 = 域名头 + 域名中 + 文本_取右边 (地址源, 域名中)
新地址 = m3u8



' ========================================================================得到二次链接
二次源 = 到文本 (HTTP读文件 (新地址))
如果 (寻找文本 (二次源, 域名头 + 域名中, , ) ≠ -1)
域名 = 域名头 + 域名中
域名 = 取文本左边 (新地址, 倒找文本 (新地址, “/”, , ))
处理事件 ()
' ==========================================================================得到下载流前缀域名
如果真 (寻找文本 (二次源, “.key”, , ) > 0)
key正则.创建 (“”#引号“(.*?)”#引号“”, 二次源)
计次循环首 (key正则.取匹配数量 (), 计数)
key文件 = key正则.取子匹配文本 (计数, 1)
key替换 = 路径 + “/”到文本 (计数)“.key”
二次源 = 文本_替换 (二次源, , , , key文件, key替换, , , )
如果 (寻找文本 (key文件, “https”, , ) ≠ -1)
本地key = key文件
本地key = 域名头 + key文件
写到文件 (临时目录 + “\”到文本 (计数)“.key”, HTTP读文件 (本地key))  ' 写出key解密文件
计次循环尾 ()

' ==============================================================================写出解密文件
超级列表框1.全部删除 ()
ts列表 = 分割文本 (二次源, 字符 (10), )
处理事件 ()
如果 (取数组成员数 (ts列表) ≠ 0)
计次循环首 (取数组成员数 (ts列表), 计次)
如果真 (取文本右边 (ts列表 [计次], 3)“.ts”)
解析流名 = ts列表 [计次]
加入成员 (待换数组, 解析流名)
加入成员 (用作替换数组, 路径 + “/”取文本右边 (解析流名, 取文本长度 (解析流名)倒找文本 (解析流名, “/”, , )))
如果 (寻找文本 (解析流名, “http”, , ) ≠ -1)
解析流名 = ts列表 [计次]
如果 (寻找文本 (解析流名, “/”, , ) ≠ -1)
解析流名 = 文本_取右边 (解析流名, “/”)
解析流名 = 域名 + 解析流名
解析流名 = 域名 + 解析流名


表项行 = 超级列表框1.插入表项 (, , , , , )
超级列表框1.置标题 (表项行, 0, 到文本 (表项行 + 1))
超级列表框1.置标题 (表项行, 1, 解析流名)
超级列表框1.保证显示 (表项行)

计次循环尾 ()
如果 (超级列表框1.取表项数 () > 0)
标签2.标题 = “解析完成”
标签2.标题 = “解析失败”





二次源 = 文本_快速替换_EX (二次源, 待换数组, 用作替换数组, 1, 1, )
写到文件 (临时目录 + “\index.m3u8”, 到字节集 (二次源))  ' 得到本地m3u8
处理事件 ()
关闭所有文件 ()
如果真 (标签2.标题 = “解析完成”)
执行下载 ()

子程序名返回值类型公开备 注
_按钮_搜索_被单击  
变量名类 型静态数组备 注
行内容文本型 
网源码文本型 
网源码 = 到文本 (HTTP读文件 (网页地址框.内容))
如果 (文本_寻找文本 (网源码, “.m3u8”, , ) = -1)
信息框 (“没找到指定文件,请换网址再次搜寻”, 0, , )
返回 ()
行内容 = 文本_取指定变量文本行 (网源码, 文本_取文本所在行_优化版 (网源码, “.m3u8”, , ))
编辑框2.内容 = “http”文本_倒取出中间文本 (行内容, “.m3u8”, “http”, , )“.m3u8”

子程序名返回值类型公开备 注
_按钮_符号_被单击  
编辑框2.内容 = 子文本替换 (编辑框2.内容, “\/”, “/”, , , )
编辑框2.内容 = 子文本替换 (编辑框2.内容, “\”, “/”, , , )
子程序名返回值类型公开备 注
_按钮_下载_被单击  
临时目录 = 取运行目录 ()“\” + 编辑框_文件名.内容
如果 (编辑框2.内容 ≠ “” 编辑框_文件名.内容 ≠ “”)
如果 (文件是否存在 (取运行目录 ()“\” + 编辑框_文件名.内容 + “.mp4”))
如果 (寻找文件 (“ffmpeg.exe”, )“”)
运行 (“cmd.exe /c   ”取运行目录 ()“\ffmpeg.exe  -i ” + 编辑框2.内容 + “ ”取运行目录 ()“\” + 编辑框_文件名.内容 + “.mp4”, 假, )
信息框 (“需有ffmpeg.exe”, 0, , )
返回 ()
创建目录 (临时目录)
信息框 (“文件已存在或文件名重复,请重命名”, 0, , )
返回 ()

信息框 (“下载链接或保存名没有填,请检查”, 0, , )
返回 ()

子程序名返回值类型公开备 注
_进度条_位置被改变  
mpv.置百分比位置 (进度条.位置)


i支持库列表   支持库注释   
edroptarget拖放支持库
iext扩展界面支持库一
internet互联网支持库
EThread多线程支持库

点评

播放器要是有播放状态回调就更好了   天津市天津市  发表于 2025-3-9 21:20
线程池操作组件会崩溃的   江西省赣州市  发表于 2025-3-9 18:07

评分

参与人数 2好评 +2 收起 理由
515889127 + 1 感谢分享,很给力!~
多多帅吧 + 1 感谢分享,很给力!~

查看全部评分


本帖被以下淘专辑推荐:

签到天数: 1 天

32
发表于 2025-3-29 12:00:04 | 只看该作者   广东省佛山市
666666666666666
回复 支持 反对

使用道具 举报

结帖率:40% (2/5)

签到天数: 9 天

31
发表于 2025-3-25 13:49:15 | 只看该作者   广东省汕尾市
MPV自改线程池M3U8下载器
回复 支持 反对

使用道具 举报

结帖率:88% (7/8)

签到天数: 2 天

30
发表于 2025-3-24 12:01:16 | 只看该作者   山东省*
hxq2015 发表于 2025-3-24 10:43
易语言调用ffmpeg下载m3u8格式转mp4,有进度条和回显
https://125.confly.eu.org/forum.php?mod=viewthread&tid= ...

谢谢,完美解决
回复 支持 反对

使用道具 举报

签到天数: 11 天

29
发表于 2025-3-24 11:00:41 | 只看该作者   山东省青岛市
哇,这结合挺有意思的啊。先看后下,省了不少麻烦呢。不过还得用ffmpeg的话,那33M的空间占用要考虑下咯。试试看了,希望别太占资源哈。
回复 支持 反对

使用道具 举报

签到天数: 1 天

28
 楼主| 发表于 2025-3-24 10:43:16 | 只看该作者   陕西省安康市
hacker446686365 发表于 2025-3-23 10:43
哥,谢谢你的付出,播放器不如用IDM版本的那个比这个MPV版本的视频拖动播放流畅,还有就是可以获取合并进度 ...

易语言调用ffmpeg下载m3u8格式转mp4,有进度条和回显
https://125.confly.eu.org/forum.php?mod=viewthread&tid=14585949
(出处: 精易论坛)
回复 支持 反对

使用道具 举报

签到天数: 1 天

27
 楼主| 发表于 2025-3-24 10:42:05 | 只看该作者   陕西省安康市
hacker446686365 发表于 2025-3-23 10:43
哥,谢谢你的付出,播放器不如用IDM版本的那个比这个MPV版本的视频拖动播放流畅,还有就是可以获取合并进度 ...

合并进度可以用DOS回显查看,如果你想用进度条和百分数显示的话,可以参照我以前的一版M3U8-MP4下载播放器。
回复 支持 反对

使用道具 举报

结帖率:88% (7/8)

签到天数: 2 天

26
发表于 2025-3-23 10:43:46 | 只看该作者   山东省*
哥,谢谢你的付出,播放器不如用IDM版本的那个比这个MPV版本的视频拖动播放流畅,还有就是可以获取合并进度吗,愿奉上红包,谢谢
回复 支持 反对

使用道具 举报

签到天数: 11 天

25
发表于 2025-3-22 15:56:45 | 只看该作者   山东省青岛市
哇,这思路挺巧的啊。先用MPV检测再决定下不下,省了不少麻烦呢。不过还得配合ffmpeg用有点小折腾哈。
回复 支持 反对

使用道具 举报

结帖率:88% (7/8)

签到天数: 2 天

24
发表于 2025-3-22 15:00:18 | 只看该作者   山东省*
这个版本比IDM版本好太多,但是播放无法正常使用,不知道是否是没用你的DLL的原因,谢谢您的付出
回复 支持 反对

使用道具 举报

签到天数: 9 天

23
发表于 2025-3-19 23:57:11 | 只看该作者   浙江省台州市
11111111111111111111111111
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报电话0663-3422125,QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表