如何解析 m3u8 文件?

本文介绍了如何解析m3u8文件,重点讨论了AES加密在m3u8文件格式中的应用。m3u8文件可能包含EXT-X-KEY标签来指定加密方法,如AES-128,并通过URI和IV属性来处理解密过程。当加密方法为AES-128时,URI用于获取密钥,IV则用于初始化解密向量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如何解析 m3u8 文件

1. AES

  • 思路:
说个使用python解带key的M3U8的思路:
先下载KEY文件,使用这个key解密每一个ts文件,然后合并MP4。
m3u8 url:http://video1.aa/090812-124/1500kb/hls/index.m3u8
  • 例子
from Crypto.Cipher import AES
import requests
uu='http://video1.aa/090712-123/1500kb/hls/'
res = requests.get(uu+'key.key')
key=res.content
cryptor = AES.new(key, AES.MODE_CBC, key)
for i in range(30):
    u='%sKhbR41840%02d.ts'%(uu,i)
    print(u)
    res = requests.get(u)

    with open("/home/jet/jupy/TS/xx.mp4", 'ab') as f:
        #f.write(res.content)
        f.write(cryptor.decrypt(res.content))

m3u8 文件格式

: 文件开头的标记
#EXTM3U

: 最大的媒体播放时长(每个EXTINF值必须小于这个), 单位是秒
#EXT-X-TARGETDURATION:<s>

: 指定每个媒体段(ts)的持续时间
#EXTINF

: 每一个媒体段在 PlayList 中只有唯一的序号,相邻之间序号+1。
#EXT-X-MEDIA-SEQUENCE:<number>

: 表示怎么对媒体段进行解码。其作用范围是下次该tag出现前的所有媒体段
#EXT-X-KEY:<attribute-list>

: 是否允许客户端用缓存来重播,这个可以在PlayList文件中任意地方出现,并且最多出现一次,作用效果是所有的媒体段
#EXT-X-ALLOW-CACHE :<YES|NO>

: 将一个绝对时间和一个媒体段中的第一个sample相关联
:: example: #EXT-X-PROGRAM-DATETIME:2010-02-19T14:54:23.031+08:00
#EXT-X-PROGRAM-DATE-TIME

: 文件结束标记
#EXT-X-ENDLIST

加密

  • 表示怎么对媒体段进行解码。其作用范围是下次该tag出现前的所有媒体段
    如果播放列表文件没有包含EXT-X-KEY标签,那么媒体文件将不会被加密。
  • Method属性指定了加密方法,定义了两种加密方法:NONE和AES-128。
    加密方法NONE表示媒体文件不被加密,如果加密方法是NONE,那么URI和IV属性不允许存在。
  • 如果加密方法是AES-128,那么对于URI属性,如果存在,则指定获取密钥的方法。
    对于IV属性,如果存在,则指定使用密钥的初始化向量;
    如果不存在,在加密或者解密媒体文件的时候必须使用序列号作为IV值。
#EXT-X-KEY:METHOD=<method> [,URI = “<uri>”] [,IV = <iv>]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值