# 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)
```



