# M3u8Parse **Repository Path**: net_yc60/m3u8-parse ## Basic Information - **Project Name**: M3u8Parse - **Description**: 使用Java语言开发的,简便处理M3u8文件的方法,仅用最简单的字符串处理方法 - **Primary Language**: Java - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-11-26 - **Last Updated**: 2025-11-26 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # M3u8Parse #### 介绍 ``` 使用Java语言开发的,简便处理M3u8文件(hls)的方法 主要引用了 lombok 和 apache 的简单工具包 注意:本工具包使用的Java版本为21, 如果是万年Java8的需要自行做下适配(其实也不困难,我只是不想搞,因为新版本太香) ``` #### 安装教程 使用maven简单打包即可 ``` # 打包源码并跳过测试(注意:测试类中存在一个意料之内的栈溢出,按需执行) mvn clean source:jar install -DskipTests ``` #### 使用说明 ### 1.maven中引用该依赖 ``` com.lang m3u8-parse 1.0.0 ``` ### 2.Java中调用 ``` // 核心操作方法就一个 /** * 获取m3u8文件信息 * * @param saveDir m3u8文件保存目录 * @param m3u8Url m3u8链接 * @param inputStreamFunction 通过链接获取m3u8文件流 * @return m3u8数据信息 */ M3u8Info M3u8Parse.getM3u8Info(saveDir, m3u8Url, inputStreamFunction); ``` ### 3.实例 ``` M3u8Info m3u8Info = M3u8Parse.getM3u8Info("/home/kyll/data", "http://localhost:8080/test/index.m3u8", (url)-> (InputStream) HttpClient.get(url)); 该方法中, 第一个参数为保存目录, 一般m3u8(hls)都是一堆小文件的, 所以需要指定一个特别目录存放它 第二个参数就是m3u8的链接了 第三个参数需要提供一个java.util.Function 用于提供一个获取指定链接数据流的Function(这个Function一般是HttpClient.get()之类的方法,这个需要自行实现) 返回值是一个 M3u8Info 对象, 里面包含了对该m3u8链接的数据分析结果 ``` ### 4.注意事项 ``` 一、方法运行中会把m3u8文件都下载下来,当然也包含该m3u8文件中引用的其他m3u8文件都会一并下载下来,并根据相对路径关系存放在指定的文件夹中。 二、m3u8文件中指向的多媒体小文件, 本方法是不会自动下载的, 因为本方法只分析m3u8文件里面的信息。 三、用户可以通过Map webLinkMapLocalPath = m3u8Info.getLocalPathMap();方法 获取到 <文件网络连接, 本地存储路径> 的映射关系(这个映射结果中不包含已经下载好的M3u8文件)。 用户可以自行写一个简单方法即可实现对整个m3u8文件流的下载 四、用户可以通过 List m3u8ContentLinkInfoList = m3u8Info.getM3u8ContentLinkInfoList();方法 获取到 [{本地M3u8文件存放路径,m3u8网络链接,M3u8中的具体内容}] 的内容集合, 方便后期重写 ``` #### 5.一个简单的用于下载视频的示例 ``` 位于测试类 com.lang.hls.M3u8ParseTest.testDownloadM3u8 里面有一段多媒体视频(香港老剧) 执行里面的方法后,即可以进行简单的M3u8文件流下载(当然,这只不过是一个简单示例而已; 如要实现真正的下载功能,需要考虑使用线程池及其他监控速度及进度监控等实现) 下载后在对应的m3u8文件所在文件夹内就可以播放了 (执行命令: ffplay index.m3u8) ``` ![示例图1](./images/1.png "示例图1") ![示例图2](./images/2.png "示例图2") ![示例图3](./images/3.png "示例图3") ![示例图4](./images/4.png "示例图4")