|
本帖最后由 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 )新地址 = 域名头 + 域名中 + 文本_取右边 (地址源, 域名中 ) 新地址 = m3u8 二次源 = 到文本 (HTTP读文件 (新地址 )) 如果 (寻找文本 (二次源, 域名头 + 域名中, , 假) ≠ -1 )域名 = 域名头 + 域名中 域名 = 取文本左边 (新地址, 倒找文本 (新地址, “/”, , 假)) 处理事件 () 如果真 (寻找文本 (二次源, “key.key”, , 假) > 0 )key正则. 创建 (“” + #引号 + “(.*?)” + #引号 + “”, 二次源 )计次循环首 (key正则. 取匹配数量 (), 计数 )key文件 = key正则. 取子匹配文本 (计数, 1 )key替换 = 路径 + “/” + 到文本 (计数 ) + “.key”二次源 = 文本_替换 (二次源, , , , key文件, key替换, , , )如果 (寻找文本 (key文件, 域名头, , 假) ≠ -1 )本地key = key文件 本地key = 域名头 + key文件 写到文件 (临时目录 + “\” + 到文本 (计数) + “.key”, HTTP读文件 (本地key)) 计次循环尾 () ts列表 = 分割文本 (二次源, 字符 (10 ), )处理事件 ()超级列表框1. 全部删除 ()如果 (取数组成员数 (ts列表 ) ≠ 0 )计次循环首 (取数组成员数 (ts列表 ), 计次 )如果真 (取文本右边 (ts列表 [计次 ], 3 ) = “.ts”)解析流名 = ts列表 [计次 ]加入成员 (待换数组, 解析流名 )加入成员 (用作替换数组, 路径 + “/” + 取文本右边 (解析流名, 取文本长度 (解析流名 ) - 倒找文本 (解析流名, “/”, , 假)) )如果 (寻找文本 (解析流名, “http”, , 假) ≠ -1 )解析流名 = ts列表 [计次 ]如果 (寻找文本 (解析流名, “/”, , 假) ≠ -1 )解析流名 = 文本_取右边 (解析流名, “/”)解析流名 = 域名 + 解析流名 解析流名 = 域名 + 解析流名 表项 = 超级列表框1. 插入表项 (, , , , , )超级列表框1. 置标题 (表项, 0, 到文本 (表项 + 1 )) 超级列表框1. 置标题 (表项, 1, 解析流名 )超级列表框1. 保证显示 (表项 ) 计次循环尾 ()标签1.标题 = “解析完成”标签1.标题 = “源可能失效”二次源 = 文本_快速替换_EX (二次源, 待换数组, 用作替换数组, 1, 1, )写到文件 (临时目录 + “\index.m3u8”, 到字节集 (二次源 )) 处理事件 ()关闭所有文件 ()临时目录 = 取运行目录 () + “\” + 编辑框2.内容 如果 (编辑框1.内容 ≠ “” 且 编辑框2.内容 ≠ “”)如果 (文件是否存在 (取运行目录 () + “\” + 编辑框2.内容 + “.mp4”) = 假)创建目录 (临时目录 )信息框 (“文件已存在或文件名重复,请重命名”, 0, , )返回 ()信息框 (“下载链接或保存名没有填,请检查”, 0, , )返回 () 启动线程 (&解析链接, , 线程数 )解析 (编辑框1.内容 )如果真 (标签1.标题 = “解析完成”)线程_关闭句柄 (线程数 )启动线程 (&开始下载, , )线程池. 创建 (超级列表框1. 取表项数 (), 时钟1 )计次循环首 (超级列表框1. 取表项数 (), 表项 )线程池. 投递任务 (&下载, 表项 )程序_延时 (1 )计次循环尾 ()ts名称 = 超级列表框1. 取标题 (表项 - 1, 1 )写到文件 (临时目录 + “\” + 网页_取网址文件名 (ts名称 ), HTTP读文件 (ts名称 )) 超级列表框1. 置标题 (表项 - 1, 2, “已下载”)已下载数 = 已下载数 + 1 进度条1.位置 = 到整数 (已下载数 ÷ 超级列表框1. 取表项数 () × 100 )标签2.标题 = 到文本 (进度条1.位置 ) + “%”如果真 (标签2.标题 = “100%”)线程池. 结束标志 ()下载子程序 ()标签1.标题 = “下载完成,正在转换”如果 (文件是否存在 (取运行目录 () + “\ffmpeg11.exe”) = 假)信息框 (“请将ffmpeg11.exe放在本程序目录中”, 0, , )返回 ()系统_取DOS执行结果 (取运行目录 () + “\ffmpeg11 -allowed_extensions ALL -i ” + 临时目录 + “\index.m3u8 -c copy ” + 取运行目录 () + “\” + 编辑框2.内容 + “.mp4”)如果真 (文件是否存在 (取运行目录 () + “\” + 编辑框2.内容 + “.mp4”) = 真)删除目录 (临时目录 )超级列表框1. 全部删除 ()标签1.标题 = “下载完成,源已删除”标签2.标题 = “0%”进度条1.位置 = 0 编辑框1.内容 = “”编辑框2.内容 = “”线程池. 销毁 ()线程池. 处理线程 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | 行内容 | 文本型 | | | 网源码 | 文本型 | | |
网源码 = 到文本 (HTTP读文件 (网页地址框.内容 )) 如果 (文本_寻找文本 (网源码, “.m3u8”, , 假) = -1 )信息框 (“没找到指定文件,请换网址再次搜寻”, 0, , )返回 ()行内容 = 文本_取指定变量文本行 (网源码, 文本_取文本所在行_优化版 (网源码, “.m3u8”, , 假)) 编辑框1.内容 = “http” + 文本_倒取出中间文本 (行内容, “.m3u8”, “http”, , 假) + “.m3u8”编辑框1.内容 = 子文本替换 (编辑框1.内容, “\/”, “/”, , , 真)编辑框1.内容 = 子文本替换 (编辑框1.内容, “\”, “/”, , , 真)编辑框1.内容 = 子文本替换 (编辑框1.内容, “https”, “http”, , , 真)变量名 | 类 型 | 静态 | 数组 | 备 注 | 清晰度 | 文本型 | | 0 | 取清晰度 | 整数型 | | |
取清晰度 = 文本_取中间_批量 (到文本 (HTTP读文件 (编辑框1.内容 )), “NAME=” + #引号, #引号, 清晰度, )如果 (文本_寻找文本 (到文本 (HTTP读文件 (编辑框1.内容 )), “NAME=”, , ) > 1 )组合框2. 加入项目 (“有数据”, )计次循环首 (取数组成员数 (清晰度 ), 取清晰度 )组合框2. 加入项目 (清晰度 [取清晰度 ], )计次循环尾 ()组合框2.现行选中项 = 0 组合框2. 加入项目 (“无选择”, )组合框2.现行选中项 = 0
M3U8多线程下载器(兴全工作室2024) - 副本.e
(1.01 MB, 下载次数: 153)
|
|