m3u8 0.3.12
pip install m3u8
上次发布日期:
python m3u8解析器
m3u8的Python项目详细描述
m3u8
pythonm3u8解析器。
文档
基本用法是从uri、文件路径或 直接从字符串:
import m3u8 m3u8_obj = m3u8.load('http://videoserver.com/playlist.m3u8') # this could also be an absolute filename print m3u8_obj.segments print m3u8_obj.target_duration # if you already have the content as string, use m3u8_obj = m3u8.loads('#EXTM3U8 ... etc ... ')
支持的标记
- #EXT-X-TARGETDURATION
- #EXT-X-媒体序列
- #ext-x-不连续序列
- #ext-x-program-date-time
- #EXT-X-媒体
- #ext-x-playlist-type
- #EXT-X-键
- #ext-x-stream-inf
- #EXT-X-版本
- #ext-x-allow-cache
- #EXT-X-ENDLIST
- #熄灭
- #仅限Ext-X-I-Frames
- #ext-x-byterange
- #ext-x-i-frame-stream-inf
- #EXT-X-不连续性
- #EXT-X-CUE-OUT
- #EXT-X-CUE-OUT-CONT
- #EXT-X-独立段
- #EXT-OATCLS-SCTE35
- #EXT-X-CUE-OUT
- #EXT-X-CUE-IN
- #外部-X-提示-SPAN
- #EXT-X-MAP
- #EXT-X-启动
- #ext-x-server-control
- #ext-x-rendition-report
- #EXT-X-SKIP
加密密钥
段可以加密,也可以不加密。keys属性列表将 如#EXT-X-KEY:
每个键都有下一个属性:
- method:例如:“aes-128”
- uri:密钥uri,例如:“http://videoserver.com/key.bin”
- iv:初始化向量(如果可用)。否则None。
如果找不到#EXT-X-KEY,则keys列表将具有唯一的元素None。支持多个密钥。
如果m3u8文件中混合了未加密段和加密段,那么列表将包含一个None元素,其中有一个 或者更多的钥匙。
遍历可用键列表:
import m3u8 m3u8_obj = m3u8.loads('#EXTM3U8 ... etc ...') len(m3u8_obj.keys) => returns the number of keys available in the list (normally 1) for key in m3u8_obj.keys: if key: # First one could be None key.uri key.method key.iv
获取用一个密钥加密的段
在某些情况下,列出给定键的段非常重要。有可能 通过中的by_key方法检索用一个密钥加密的段列表 segments列表。
获取不加密段的示例:
import m3u8 m3u8_obj = m3u8.loads('#EXTM3U8 ... etc ...') segmk1 = m3u8_obj.segments.by_key(None) # Get the list of segments encrypted using last key segm = m3u8_obj.segments.by_key( m3u8_obj.keys[-1] )
使用此方法,现在还可以通过编程方式更改某些段的键:
import m3u8 m3u8_obj = m3u8.loads('#EXTM3U8 ... etc ...') # Create a new Key and replace it new_key = m3u8.Key("AES-128", "/encrypted/newkey.bin", None, iv="0xf123ad23f22e441098aa87ee") for segment in m3u8_obj.segments.by_key( m3u8_obj.keys[-1] ): segm.key = new_key # Remember to sync the key from the list as well m3u8_obj.keys[-1] = new_key
可变播放列表(可变比特率)
播放列表可以包含其他播放列表文件的列表,这用于 表示多个比特率视频,称为variant streams。 见example here。
variant_m3u8 = m3u8.loads('#EXTM3U8 ... contains a variant stream ...') variant_m3u8.is_variant # in this case will be True for playlist in variant_m3u8.playlists: playlist.uri playlist.stream_info.bandwidth
上面for循环中使用的playlist对象有几个属性:
- uri:流的url
- stream_info:具有 所有可用于#EXT-X-STREAM-INF
- media:包含所有属性的相关Media对象的列表 可用于#EXT-X-MEDIA
- playlist_type:播放列表的类型,可以是VOD (视频点播)或EVENT
注意:以下属性尚未实现,请遵循 issue 4用于更新
- alternative_audios:它是一个空列表,除非它是一个播放列表 对于Alternative audio,在本例中是一个带有^{tt16}的列表$ 具有#EXT-X-MEDIA所有可用属性的对象
- alternative_videos:与alternative_audios 相同
变体播放列表也可以有指向I-frame playlists的链接,这些链接被使用 指定视频中i帧的位置。见Apple’s documentation上的 这是为了获取更多信息。这些i-frame播放列表可以在类似的 常规播放列表的方式。
variant_m3u8 = m3u8.loads('#EXTM3U ... contains a variant stream ...') for iframe_playlist in variant_m3u8.iframe_playlists: iframe_playlist.uri iframe_playlist.iframe_stream_info.bandwidth
上面for循环中使用的iframe_playlist对象有几个属性:
- uri:i-frame播放列表的url
- base_uri:变体播放列表的基本uri(如果给定的话)
- iframe_stream_info:一个StreamInfo对象(与常规播放列表相同)
自定义标记
引用文档:
Lines that start with the character '#' are either comments or tags. Tags begin with #EXT. They are case-sensitive. All other lines that begin with '#' are comments and SHOULD be ignored.
默认情况下,此库忽略所有非标准标记。如果你想把它们收起来加载文件内容, 您需要将函数传递给load/loads函数,如下所示:
import m3u8 def get_movie(line, data, lineno): if line.startswith('#MOVIE-NAME:'): custom_tag = line.split(':') data['movie'] = custom_tag[1].strip() m3u8_obj = m3u8.load('http://videoserver.com/playlist.m3u8', custom_tags_parser=get_movie) print(m3u8_obj.data['movie']) # million dollar baby
运行测试
$ ./runtests
贡献
欢迎所有贡献,但我们将合并一个拉取请求,前提是且仅当它
- 有测试
- 遵循代码约定
如果你计划实现一个新的特性或者需要更多 再过几分钟,请打开一个问题以确保我们不工作 同样的事情。
推荐PyPI第三方库
validate-yaml
验证yaml
benchmark-multiprocess
可复制基准模板的简单工作流引擎
possel-server
基于python的irc“bouncer”,需要自定义客户机进行滚动。
GeoAlchem
对空间数据库使用sqlalchemy
django-bootstrap-forms
twitter bootstrap ready django表单。
pox.banner
Ploneopenx网站的横幅管理
Network-checker
网络连接状况检查工具
ranges-consolidator
用于展平和合并多个(潜在分层)范围源(范围对象上的迭代器)的包
azure-mgmt-nspkg
Microsoft azure资源管理命名空间包[内部]
odoo11-addon-l10n-it-central-journal
意大利本地化-Libro Journale
odoo8-addon-product-variant-supplierinfo
供应商信息到产品变型范围
nanoservice
nanoservice是一个小的python库,用于使用nanomsg编写轻量级网络服务
gensim
快速向量空间建模的python框架
data-catapult
python批量数据加载etl库
yaipopt
ipopt非线性优化求解器的python绑定。
导 航 栏
项目 链接
标 签
许可证: BSD许可证(BSD 3条款)
作者信息:: 暂无