m3u8,一个强悍的python库

m3u8是一个用于解析和生成M3U8文件的Python库,这种文件格式通常用于HTTP Live Streaming(HLS)中,用于流式传输多媒体内容。该库提供了一种简单的方式来处理HLS流的各个组成部分,如播放列表、片段以及加密信息,使得开发者可以轻松地创建、修改和读取M3U8文件。

特点

解析与生成

m3u8能够解析现有的M3U8文件,并基于这些信息生成新的M3U8文件。这对于开发直播流、视频点播等应用至关重要。

支持广泛

支持各种类型的M3U8标签和属性,包括EXT-X-VERSION、EXTINF、EXT-X-STREAM-INF等,几乎覆盖了HLS规范的所有方面。

简单易用

通过提供直观的API接口,m3u8使得操作M3U8文件变得非常简单,即使是没有深入了解HLS协议的开发者也能快速上手。

最佳实践

安装方法

安装m3u8同样简单,通过pip命令即可完成安装:

pip install m3u8

易于上手的功能示例

解析M3U8文件

下面的代码展示了如何读取并解析一个M3U8文件。

 import m3u8

# 假设你已经有了一个M3U8文件的URL或者文件路径
m3u8_url = 'http://example.com/path/to/playlist.m3u8'
playlist = m3u8.load(m3u8_url)  # 从URL加载
# 或者使用m3u8.load()从文件路径加载
print(playlist.segments)  # 打印所有的片段信息
print(playlist.playlists)  # 如果是一个master playlist,打印所有的variant streams

生成M3U8文件

要将播放列表从对象转储到控制台或文件,请使用 dump/dump 函数

import m3u8

# 假设你已经有了一个M3U8文件的URL或者文件路径
m3u8_url = 'http://example.com/path/to/playlist.m3u8'
playlist = m3u8.load(m3u8_url)  # 从URL加载
# 或者使用m3u8.load()从文件路径加载
print(playlist.segments)  # 打印所有的片段信息
print(playlist.playlists)  # 如果是一个master playlist,打印所有的variant streams

进阶功能示例

探索m3u8库更深层次的功能,比如处理加密的流。

通过请求查看秘钥

image.png

首先用F12查看当前m3u8的秘钥方法,这里不详细展开,百度上已经有许多现成的教程,

之后可以通过最后的key来获取所有片段

import m3u8

m3u8_obj = m3u8.loads('#EXTM3U8 ... etc ...')
segmk1 = m3u8_obj.segments.by_key(None)

segm = m3u8_obj.segments.by_key( m3u8_obj.keys[-1] )

不仅如此,我们还可以更改已有的key值通过这个方法

import m3u8

m3u8_obj = m3u8.loads('#EXTM3U8 ... etc ...')

# 创建一个新的秘钥并替换
new_key = m3u8.Key("AES-128", "/encrypted/newkey.bin", None, iv="0xf123ad23f22e441098aa87ee")
for segment in m3u8_obj.segments.by_key( m3u8_obj.keys[-1] ):
    segment.key = new_key
# 最后记得同步最终的key
m3u8_obj.keys[-1] = new_key

总结

m3u8库为Python开发者提供了一个强大而简单的工具,用于处理HTTP Live Streaming的各个方面。无论是解析、生成M3U8文件,还是处理复杂的流加密问题,m3u8都能提供直观、易于使用的解决方案。