|
本帖最后由 hxq2015 于 2023-4-25 13:09 编辑
在下载m3u8格式视频中,遇到了一种新情况:非IE浏览器中可以播放,用易语言http读文件或网页访问不了的链接,无法调用下载软件下载。又写了一款针对这种特殊m3u8视频的下载软件,没有整合常见和加密m3u8链的解析。只要电脑性能不差,用默认非ie浏览器下载,速度还是可以的。我用的是MiniBrowser浏览器,浏览器下载的临时文件夹是“C:\Users\Administrator\Downloads\i”,可能会和他人所用电脑不同,可以自行修改源码,保存下载后的文件在本程序运行目录。用了四个时钟实现自动化,模块用到精易[v7.5],合并临时流文件用到11m的ffmpeg。等后面有时间了再整合前一版调用IDM极速下载,或者加入常规和加密链接下载。 窗口程序集名 | 保 留 | 保 留 | 备 注 | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | 域名头 | 文本型 | | 下载流句柄 | 整数型 | | 如果 (编辑框1.内容 ≠ “” 且 编辑框2.内容 ≠ “”)执行 (4, 编辑框1.内容, , , )标签1.标题 = “读取中,请稍候”_时钟2_周期事件 ()信息框 (“请检查,有信息没填”, 0, , )返回 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | 取新后辍 | 文本型 | | | 一次文本 | 文本型 | | | 新后辍 | 文本型 | | |
一次文本 = 到文本 (读入文件 (“C:\Users\Administrator\Downloads\index.txt”)) 删除文件 (“C:\Users\Administrator\Downloads\index.txt”)如果真 (文本_寻找文本 (一次文本, “BANDWIDTH=”, , 假) > 0 )取新后辍 = 到文本 (到整数 (文本_取出中间文本 (一次文本, “BANDWIDTH=”, “,”)) \ 1000 ) + “kb”新后辍 = 取新后辍 + 文本_取右边 (一次文本, 取新后辍 )编辑框1.内容 = 子文本替换 (编辑框1.内容, “index.m3u8”, 新后辍, , , 真)域名头 = 文本_取左边 (编辑框1.内容, “index.m3u8”)标签1.标题 = “正在取地址”执行 (4, 编辑框1.内容, , , )_时钟3_周期事件 ()变量名 | 类 型 | 静态 | 数组 | 备 注 | 列表组 | 文本型 | | 0 | n | 整数型 | | | 二次文本 | 文本型 | | | 地址 | 文本型 | | | 下载句柄 | 整数型 | | | m3u8句柄 | 整数型 | | | 地址名 | 文本型 | | | 表项 | 整数型 | | | D | 整数型 | | |
标签1.标题 = “下载中”m3u8句柄 = 打开内存文件 ()二次文本 = 到文本 (读入文件 (“C:\Users\Administrator\Downloads\index.txt”)) 列表组 = 分割文本 (二次文本, 字符 (10 ), )如果真 (取数组成员数 (列表组 ) ≠ 0 )计次循环首 (取数组成员数 (列表组 ), n )如果 (文本_寻找文本 (列表组 [n ], “#”, , 真) = -1 )如果 (文本_寻找文本 (列表组 [n ], “http”, , 真) = -1 )地址 = 域名头 + 列表组 [n ] 地址 = 列表组 [n ]地址名 = 取文本右边 (地址, 取文本长度 (地址) - 倒找文本 (地址, “/”, , 假))写出文本 (m3u8句柄, 子文本替换 (“C:\Users\Administrator\Downloads\”, “\”, “/”, , , 真) + 地址名, #换行符 )表项 = 超级列表框1. 插入表项 (, , , , , )超级列表框1. 置标题 (表项, 0, 到文本 (超级列表框1. 取表项数 ()) )超级列表框1. 置标题 (表项, 1, 地址 )超级列表框1. 置标题 (表项, 2, 地址名 )超级列表框1. 置标题 (表项, 3, “等待中”)写出文本 (m3u8句柄, 列表组 [n ], #换行符 )处理事件 ()计次循环尾 () 移到文件首 (m3u8句柄 ) 写到文件 (“C:\Users\Administrator\Downloads\” + 编辑框2.内容 + “.m3u8”, 到字节集 (读入文本 (m3u8句柄, )) )删除文件 (“C:\Users\Administrator\Downloads\index.txt”)如果真 (超级列表框1. 取表项数 () > 0 )计次循环首 (超级列表框1. 取表项数 (), D )执行 (4, 超级列表框1. 取标题 (D - 1, 1 ), , , )计次循环尾 ()_时钟1_周期事件 ()标签1.标题 = “合并中”系统_取DOS执行结果 (“ffmpeg11.exe -allowed_extensions ALL -i C:\Users\Administrator\Downloads\” + 编辑框2.内容 + “.m3u8 -c copy ” + 取运行目录 () + “\” + 编辑框2.内容 + “.mp4”)如果 (文件是否存在 (取运行目录 () + “\” + 编辑框2.内容 + “.mp4”) = 假)标签1.标题 = “合并文件失败”标签1.标题 = “正在删除临时文件”目录_清空 (“C:\Users\Administrator\Downloads\”)标签1.标题 = “下载完成”如果真 (超级列表框1. 取表项数 () > 0 )计次循环首 (超级列表框1. 取表项数 (), U )如果真 (寻找文件 (“C:\Users\Administrator\Downloads\” + 超级列表框1. 取标题 (U - 1, 2 ), ) ≠ “”)超级列表框1. 置标题 (U - 1, 3, “完成”)完成数 = 完成数 + 1 计次循环尾 ()进度条1.位置 = 到整数 (完成数 ÷ (U - 1 ) × 100 )标签1.标题 = “已下载:” + 到文本 (进度条1.位置 ) + “%”如果真 (寻找文件 (“C:\Users\Administrator\Downloads\index.m3u8”, ) ≠ “”)标签1.标题 = “文件已读取,可以取地址了”如果真 (寻找文件 (“C:\Users\Administrator\Downloads\index.m3u8”, ) ≠ “”)标签1.标题 = “地址已取到,可以下载”弹出菜单 (下载菜单, , )执行 (4, 超级列表框1. 取标题 (超级列表框1.现行选中项, 1 ), , , )如果真 (标签1.标题 = “文件已读取,可以取地址了”)时钟2.时钟周期 = 0 文件更名 (“C:\Users\Administrator\Downloads\index.m3u8”, “C:\Users\Administrator\Downloads\index.txt”)如果真 (寻找文件 (“C:\Users\Administrator\Downloads\index.txt”, ) ≠ “”)取地址 ()如果真 (标签1.标题 = “地址已取到,可以下载”)时钟3.时钟周期 = 0 如果真 (文件更名 (“C:\Users\Administrator\Downloads\index.m3u8”, “C:\Users\Administrator\Downloads\index.txt”)) 启动线程 (&下载流, , 下载流句柄 )如果真 (标签1.标题 = “已下载:100%”)时钟1.时钟周期 = 0 合并文件 ()_时钟4_周期事件 ()如果真 (标签1.标题 = “下载完成”)时钟4.时钟周期 = 0 |
|