|
![](https://bbs.125.la/data/attachment/common/cf/153842apppxgy1k84sr88x.png)
本帖最后由 hxq2015 于 2024-7-26 20:19 编辑
今日发一个新改进的m3u8视频下载利器,用到多线程和线程池,测试下载一个5千多条数据的链接,不崩溃、不溢出,速度还超快。借用了论坛里的优易线程池开源模块和数组批量快速代换开源码,虽然费了精币,但确实解决了问题。感谢易友无私奉献。我用精易的线程池和鱼刺多线程池,都不同程度的闪退或者假死,可能是用的不到位,就优易运行无碍,也懒得再花时间去研究了,当回搬运拼凑工,结合自己对m3u8的解析,达到了自己想要的结果,目的是好理解、简便、实用。源代码可能还有很多需完善和精改的地方,希望朋友修正、指出。
窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 临时目录 | 文本型 | | 已下载数 | 整数型 | | 表项 | 整数型 | | 线程池 | 易版线程池 | | 线程数 | 整数型 | |
如果真 (提示框 (“是否有内容未下载完,确定退出吗?”, 1, , , ) = #确认钮 ) 结束 ()返回 (假)变量名 | 类 型 | 静态 | 数组 | 备 注 | 路径 | 文本型 | | | 地址源 | 文本型 | | | 新地址 | 文本型 | | | 域名头 | 文本型 | | | 域名中 | 文本型 | | | 域名尾 | 文本型 | | | key正则 | 正则表达式类 | | | 本地key | 文本型 | | | key替换 | 文本型 | | | 计数 | 整数型 | | | key文件 | 文本型 | | | 域名 | 文本型 | | | 二次源 | 文本型 | | | ts列表 | 文本型 | | 0 | 解析流名 | 文本型 | | | 计次 | 整数型 | | | 待换数组 | 文本型 | | 0 | 原文本 | 文本型 | | | 用作替换数组 | 文本型 | | 0 | 写出文本 | 文本型 | | |
路径 = 子文本替换 (临时目录, “\”, “/”, , , 真)m3u8 = 子文本替换 (m3u8, “\”, “/”, , , 真)域名头 = 文本_取左边 (m3u8, 网页_取域名 (m3u8 ), , ) + 网页_取域名 (m3u8 ) 域名尾 = 网页_取网址文件名 (m3u8 ) 域名中 = 文本_取出中间文本 (m3u8, 域名头, 域名尾, , ) 地址源 = 到文本 (HTTP读文件 (删首尾空 (m3u8 )) ) 如果真 (地址源 = “”) 信息框 (“m3u8地址失效,可将https换成http再试”, 0, , ) 返回 () 如果 (寻找文本 (地址源, 域名中, , 假) ≠ -1 )![](source/plugin/code_color/image/code4/08.png) 新地址 = 域名头 + 域名中 + 文本_取右边 (地址源, 域名中 ) ![](source/plugin/code_color/image/code4/09.png) 新地址 = m3u8 ![](source/plugin/code_color/image/code4/02.png) 二次源 = 到文本 (HTTP读文件 (新地址 )) 如果 (寻找文本 (二次源, 域名头 + 域名中, , 假) ≠ -1 )![](source/plugin/code_color/image/code4/08.png) 域名 = 域名头 + 域名中 ![](source/plugin/code_color/image/code4/09.png) 域名 = 取文本左边 (新地址, 倒找文本 (新地址, “/”, , 假)) 处理事件 () 如果真 (寻找文本 (二次源, “key.key”, , 假) > 0 )![](source/plugin/code_color/image/code4/03.png) key正则. 创建 (“” + #引号 + “(.*?)” + #引号 + “”, 二次源 )![](source/plugin/code_color/image/code4/03.png) 计次循环首 (key正则. 取匹配数量 (), 计数 )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) key文件 = key正则. 取子匹配文本 (计数, 1 )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) key替换 = 路径 + “/” + 到文本 (计数 ) + “.key”![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 二次源 = 文本_替换 (二次源, , , , key文件, key替换, , , )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 如果 (寻找文本 (key文件, 域名头, , 假) ≠ -1 )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/08.png) 本地key = key文件 ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/09.png) 本地key = 域名头 + key文件 ![](source/plugin/code_color/image/code4/03.png) 写到文件 (临时目录 + “\” + 到文本 (计数) + “.key”, HTTP读文件 (本地key))
![](source/plugin/code_color/image/code4/03.png) 计次循环尾 ()![](source/plugin/code_color/image/code4/01.png) ts列表 = 分割文本 (二次源, 字符 (10 ), )处理事件 ()超级列表框1. 全部删除 () 如果 (取数组成员数 (ts列表 ) ≠ 0 )![](source/plugin/code_color/image/code4/03.png) 计次循环首 (取数组成员数 (ts列表 ), 计次 )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 如果真 (取文本右边 (ts列表 [计次 ], 3 ) = “.ts”)![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 解析流名 = ts列表 [计次 ]![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 加入成员 (待换数组, 解析流名 )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 加入成员 (用作替换数组, 路径 + “/” + 取文本右边 (解析流名, 取文本长度 (解析流名 ) - 倒找文本 (解析流名, “/”, , 假)) )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 如果 (寻找文本 (解析流名, “http”, , 假) ≠ -1 )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/08.png) 解析流名 = ts列表 [计次 ]![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/10.png) 如果 (寻找文本 (解析流名, “/”, , 假) ≠ -1 )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/03.png) 解析流名 = 文本_取右边 (解析流名, “/”)![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/08.png) 解析流名 = 域名 + 解析流名 ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/09.png) 解析流名 = 域名 + 解析流名 ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/02.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 表项 = 超级列表框1. 插入表项 (, , , , , )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 超级列表框1. 置标题 (表项, 0, 到文本 (表项 + 1 )) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 超级列表框1. 置标题 (表项, 1, 解析流名 )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 超级列表框1. 保证显示 (表项 )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/01.png) ![](source/plugin/code_color/image/code4/03.png) 计次循环尾 ()![](source/plugin/code_color/image/code4/08.png) 标签1.标题 = “解析完成”![](source/plugin/code_color/image/code4/09.png) 标签1.标题 = “源可能失效”二次源 = 文本_快速替换_EX (二次源, 待换数组, 用作替换数组, 1, 1, )写到文件 (临时目录 + “\index.m3u8”, 到字节集 (二次源 )) 处理事件 ()关闭所有文件 ()临时目录 = 取运行目录 () + “\” + 编辑框2.内容 如果 (编辑框1.内容 ≠ “” 且 编辑框2.内容 ≠ “”)![](source/plugin/code_color/image/code4/03.png) 如果 (文件是否存在 (取运行目录 () + “\” + 编辑框2.内容 + “.mp4”) = 假)![](source/plugin/code_color/image/code4/03.png) 创建目录 (临时目录 )![](source/plugin/code_color/image/code4/03.png) 信息框 (“文件已存在或文件名重复,请重命名”, 0, , )![](source/plugin/code_color/image/code4/03.png) 返回 ()![](source/plugin/code_color/image/code4/08.png) ![](source/plugin/code_color/image/code4/02.png) 信息框 (“下载链接或保存名没有填,请检查”, 0, , ) 返回 () 启动线程 (&解析链接, , 线程数 )解析 (编辑框1.内容 ) 如果真 (标签1.标题 = “解析完成”) 线程_关闭句柄 (线程数 ) 启动线程 (&开始下载, , )![](source/plugin/code_color/image/code4/01.png) 线程池. 创建 (超级列表框1. 取表项数 (), 时钟1 ) 计次循环首 (超级列表框1. 取表项数 (), 表项 )![](source/plugin/code_color/image/code4/03.png) 线程池. 投递任务 (&下载, 表项 ) 程序_延时 (1 ) 计次循环尾 ()ts名称 = 超级列表框1. 取标题 (表项 - 1, 1 )写到文件 (临时目录 + “\” + 网页_取网址文件名 (ts名称 ), HTTP读文件 (ts名称 )) 超级列表框1. 置标题 (表项 - 1, 2, “已下载”)已下载数 = 已下载数 + 1 进度条1.位置 = 到整数 (已下载数 ÷ 超级列表框1. 取表项数 () × 100 )标签2.标题 = 到文本 (进度条1.位置 ) + “%” 如果真 (标签2.标题 = “100%”)![](source/plugin/code_color/image/code4/03.png) 线程池. 结束标志 () 下载子程序 ()![](source/plugin/code_color/image/code4/01.png) 标签1.标题 = “下载完成,正在转换” 如果 (文件是否存在 (取运行目录 () + “\ffmpeg11.exe”) = 假) 信息框 (“请将ffmpeg11.exe放在本程序目录中”, 0, , ) 返回 () 系统_取DOS执行结果 (取运行目录 () + “\ffmpeg11 -allowed_extensions ALL -i ” + 临时目录 + “\index.m3u8 -c copy ” + 取运行目录 () + “\” + 编辑框2.内容 + “.mp4”)![](source/plugin/code_color/image/code4/04.png) 如果真 (文件是否存在 (取运行目录 () + “\” + 编辑框2.内容 + “.mp4”) = 真)![](source/plugin/code_color/image/code4/04.png) 删除目录 (临时目录 )![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/03.png) 超级列表框1. 全部删除 ()![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/03.png) 标签1.标题 = “下载完成,源已删除”![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/03.png) 标签2.标题 = “0%”![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/03.png) 进度条1.位置 = 0 ![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/03.png) 编辑框1.内容 = “”![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/03.png) 编辑框2.内容 = “”![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/03.png) 线程池. 销毁 ()![](source/plugin/code_color/image/code4/04.png) ![](source/plugin/code_color/image/code4/01.png) ![](source/plugin/code_color/image/code4/02.png) 线程池. 处理线程 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | 行内容 | 文本型 | | | 网源码 | 文本型 | | |
网源码 = 到文本 (HTTP读文件 (网页地址框.内容 )) 如果 (文本_寻找文本 (网源码, “.m3u8”, , 假) = -1 ) 信息框 (“没找到指定文件,请换网址再次搜寻”, 0, , ) 返回 ()![](source/plugin/code_color/image/code4/09.png) 行内容 = 文本_取指定变量文本行 (网源码, 文本_取文本所在行_优化版 (网源码, “.m3u8”, , 假)) ![](source/plugin/code_color/image/code4/04.png) 编辑框1.内容 = “http” + 文本_倒取出中间文本 (行内容, “.m3u8”, “http”, , 假) + “.m3u8”![](source/plugin/code_color/image/code4/02.png) 编辑框1.内容 = 子文本替换 (编辑框1.内容, “\/”, “/”, , , 真)编辑框1.内容 = 子文本替换 (编辑框1.内容, “\”, “/”, , , 真)编辑框1.内容 = 子文本替换 (编辑框1.内容, “https”, “http”, , , 真)变量名 | 类 型 | 静态 | 数组 | 备 注 | 清晰度 | 文本型 | | 0 | 取清晰度 | 整数型 | | |
取清晰度 = 文本_取中间_批量 (到文本 (HTTP读文件 (编辑框1.内容 )), “NAME=” + #引号, #引号, 清晰度, ) 如果 (文本_寻找文本 (到文本 (HTTP读文件 (编辑框1.内容 )), “NAME=”, , ) > 1 )![](source/plugin/code_color/image/code4/03.png) 组合框2. 加入项目 (“有数据”, )![](source/plugin/code_color/image/code4/03.png) 计次循环首 (取数组成员数 (清晰度 ), 取清晰度 )![](source/plugin/code_color/image/code4/03.png) ![](source/plugin/code_color/image/code4/03.png) 组合框2. 加入项目 (清晰度 [取清晰度 ], )![](source/plugin/code_color/image/code4/03.png) 计次循环尾 ()![](source/plugin/code_color/image/code4/08.png) 组合框2.现行选中项 = 0 ![](source/plugin/code_color/image/code4/09.png) 组合框2. 加入项目 (“无选择”, )![](source/plugin/code_color/image/code4/04.png) 组合框2.现行选中项 = 0 ![](source/plugin/code_color/image/code4/02.png)
M3U8多线程下载器(兴全工作室2024) - 副本.e
(1.01 MB, 下载次数: 58)
|
|