代码拉取完成,页面将自动刷新
解析M3U8文件, 方便提取M3U8文件中的各种信息, 并且支持流解密. 目前正在测试阶段, 欢迎改进.
go get gitee.com/kaylee595/m3u8
从网络链接中解析M3U8, 使用网络链接解析下来的M3U8信息会自动将资源的相对路径转为绝对路径.
例如: 会自动将资源和key中的URI的相对路径转为绝对路径.
func ExampleNewM3U8FromUrl() {
uri := "https://example.com/path/100.m3u8"
m8, err := NewM3U8FromUrl(uri, nil)
if err != nil {
panic(err)
}
fmt.Printf("M3U8版本: %d\n", m8.Version)
fmt.Printf("媒体列表类型: %s\n", m8.PlayListType)
for _, media := range m8.PlayList {
fmt.Printf("媒体URI: %s, 媒体时长: %s, 媒体加密信息: %+v\n", media.URI, media.Duration.String(), media.Key)
}
}
除了可以使用NewM3U8FromUrl
从网络中解析以外, 还支持从其他地方进行解析. 如果需要从其他地方进行加载, 需要传入第二个参数baseURI(*url.Url), 它将自动把数据中的相对路径自动转为以baseURI为基础的绝对路径, 如果你不需要进行路径转换, 请传nil
. NewM3U8FromReq()
不需要传baseURI.
函数 | 注释 |
---|---|
NewM3U8FromReader() |
从reader中加载(核心) |
NewM3U8FromText() |
从文本中加载 |
NewM3U8FromFile() |
从文件中加载 |
NewM3U8FromReq() |
从一个(*http.Request)去请求, 在需要自定义referer等场景中使用 |
func ExampleStreamDecrypt() {
uri := "https://example.com/path/100.m3u8"
m8, err := NewM3U8FromUrl(uri, nil)
if err != nil {
panic(err)
}
// 下载第一个流并解密
media := m8.PlayList[0]
resp, err := http.Get(media.URI)
if err != nil {
panic(err)
}
defer resp.Body.Close()
payload, err := io.ReadAll(resp.Body)
if err != nil {
panic(err)
}
payload, err = media.Key.Decrypt(nil, payload)
if err != nil {
panic(err)
}
err = os.WriteFile("example.ts", payload, 0600)
if err != nil {
panic(err)
}
}
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。