冰凌汇编

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 60|回复: 0
收起左侧

[原创] 在线M3U8音视频加密安全与技术防护

[复制链接]
Alanna 发表于 2022-9-11 22:25:47

您好,本篇文章将由浅入深介绍M3U8视频格式及视频加密切片和市面上常见的加密防护托管方案。

前言

近几年来知识付费的概念越来越受到欢迎,那么作为视频网校方而言,如何保证用户体验的前提下,防止视频资源被下载,低价贩卖传播,维护讲师和平台的利益,就成为了一个急需解决的问题。

常见的视频格式

后缀名 介绍 创造者
.mp4 目前用途十分广泛的视频格式,例如网络电影、手机拍摄的视频、智能设备拍摄的视频、宣传片、MV等。.mp4具有在较小的文件属性下,拥有接近DVD画质的视频图像质量文件。 Moving Picture Experts Group-4(运动图像专家组)
.m4v 一种应用于网络视频点播网站和移动手持设备的视频格式,是MP4格式的一种特殊类型,其后缀常为.MP4或.M4V,其视频编码采用H264,音频编码采用AAC。 苹果公司
.mov 一种音频、视频文件封装,用于存储常用数字媒体类型。 苹果公司
.avi 这个视频格式的文件,体积较同等时间、分辨率、音质码流等条件下偏大,其压缩方式众多;在二十年前,很多文件是以AVI格式来传播、拷贝的,目前,使用者不如之前多了。 微软公司
.wmv 在十几年前的流媒体mms时代,这种格式的视频文件和rm格式视频文件,备受欢迎,压缩比率高,画质损失也比较严重;使用的是SMPTE 421M标准,但是这种格式视频,这些年似乎不再流行。 微软公司
.flv 这种格式的文件,其特点是体积特别小,但是画质音质都损失严重。随着flash淡出历史舞台,这种格式的视频文件,也已不再流行。 Adobe
.mkv 能够在一个文件中容纳无限数量的视频、音频、图片或字幕轨道。所以其不是一种压缩格式,而是Matroska定义的一种多媒体容器文件。其目标是作为一种统一格式保存常见的电影、电视节目等多媒体内容。 CoreCodec Inc

我们最熟悉和常见的就是 MP4 格式了,但是目前90%的视频网站,却采用了 M3U8 格式

M3U8格式

HLS(HTTP Live Streaming) 是由Apple公司定义的用于实时流传输的协议,HLS基于HTTP协议实现,传输内容包括两部分,一是M3U8描述文件,二是TS媒体文件。

M3U文件是记录了一个索引纯文本文件,可以指定一个或多个多媒体文件的位置,其文件扩展名是“M3U”或者“m3u”。打开它时播放软件并不是播放它,而是根据它的索引找到对应的音视频文件的网络地址进行在线播放。M3U文件的作用通常是创建指向在线流媒体的播放列表,创建的文件可以轻松访问流媒体。

M3U8是Unicode版本的M3U,用UTF-8编码。

m3u8 文件实质是一个播放列表(playlist),其可能是一个媒体播放列表(Media Playlist),或者是一个主列表(Master Playlist)。

当 m3u8 文件作为媒体播放列表(Meida Playlist)时,其内部信息记录的是一系列媒体片段资源,顺序播放该片段资源,即可完整展示多媒体资源。对于点播来说,客户端只需按顺序下载片段资源,依次进行播放即可。而对于直播来说,客户端需要定时重新请求该 m3u8 文件,看下是否有新的片段数据需要进行下载并播放。

当 m3u8 作为主播放列表(Master Playlist)时,其内部提供的是同一份媒体资源的多份流列表资源(Variant Strean)。客户可以根据不同的网络状态选取合适码流的资源,并且最好根据用户喜好选择合适的资源内容。

m3u8 文件要么是媒体播放列表,要么是主播放列表。但无论是哪种列表,其有效组成均由两部分构成:

  1. 以 #EXT 开头的为标签信息,作为对媒体资源的进一步描述;
  2. 剩余的为资源信息,要么是片段资源(Media Playlist)路径,要么是 m3u8 资源(Master Playlist)路径;

m3u8文件遵循的条件

  1. m3u8 文件必须以 utf-8 进行编码,不能使用 Byte Order Mark(BOM)字节序, 不能包含 utf-8 控制字符(U+0000 ~ U_001F 和 U+007F ~ u+009F)。
  2. 每一行要么是一个 URI,要么是空行,要么就是以 # 开头的字符串。不能出现空白字符,除了显示声明的元素
  3. 以 # 开头的字符串要么是注释,要么就是标签。标签以 #EXT 开头,大小写敏感。

常用标签

标签名 功能介绍
EXT-X-DISCONTINUITY 该标签表明其前一个切片与下一个切片之间存在中断。EXT-X-DISCONTINUITY 的一个经典使用场景就是在视频流中插入广告,由于视频流与广告视频流不是同一份资源,因此在这两种流切换时使用 EXT-X-DISCONTINUITY 进行指明,客户端看到该标签后,就会处理这种切换中断问题,让体验更佳。
EXT-X-KEY 媒体片段可以进行加密,而该标签可以指定解密方法。
EXT-X-PLAYLIST-TYPE 表明流媒体类型。全局生效。该标签为可选标签。 可选值如下:【VOD】 即 Video on Demand,表示该视频流为点播源,因此服务器不能更改该 m3u8 文件;【EVENT】 表示该视频流为直播源,因此服务器不能更改或删除该文件任意部分内容(但是可以在文件末尾添加新内容)
EXT-X-PROGRAM-DATE-TIME 该标签使用一个绝对日期/时间表明第一个样本片段的取样时间。
EXT-X-MEDIA-SEQUENCE 表示播放列表第一个 URL 片段文件的序列号,每个媒体片段 URL 都拥有一个唯一的整型序列号。 每个媒体片段序列号按出现顺序依次加 1。媒体片段序列号与片段文件名无关。如果该标签未指定,则默认序列号从 0 开始。
EXT-X-ENDLIST 若出现EXT-X-ENDLIST标签,则表明M3U8文件不会再产生更多的切片,可以理解为该M3U8已停止更新,并且播放分片到这个标签后结束。M3U8不仅仅是可以作为直播,也可以作为点播存在,在M3U8文件中保存所有切片信息最后使用EXT-X-ENDLIST结尾,这个M3U8即为点播M3U8。EXT-X-ENDLIST标签可能会出现在播放列表文件的任何地方,但是不能出现两次或以上。
EXT-X-STREAM-INF EXT-X-STREAM-INF标签出现在M3U8时,主要是出现在多级M3U8文件中时,例如M3U8中包含子M3U8列表,或者主M3U8中包含多码率M3U8时;该标签后需要跟一些属性,下面就来逐一说明一下这些属性:【BANDWIDTH】:BANDWIDTH的值为最高码率值,当播放EXT-X-STREAM-INF下对应的M3U8时占用的最大码率(必要参数)。【AVERAGE-BANDWIDTH】:AVERAGE-BANDWIDTH的值为平均码率值,当播放EXT-X-STREAM-INF下对应的M3U8时占用的平均码率(可选参数)。【CODECS】:CODECS的值用于声明EXT-X-STREAM-INF下面对应M3U8里面的音视频编码、视频编码的信息(可选参数)。【RESOLUTION】:M3U8中视频的宽高信息描述(可选参数)。【FRAME-RATE】:子M3U8中的视频帧率(可选参数)。
...省略 如果感兴趣,可以去购买《FFmpeg从入门到精通》书籍或者查阅ffmpeg官方文档(英文版) http://www.ffmpeg.org/ffmpeg-all.html

客户端播放M3U8的一些标准

  1. 分片必须是动态改变的,序列不能相同,并且序列必须是增序的
  2. 当M3U8没有出现EXT-X-ENDLIST标签时,无论这个M3U8列表中有多少个分片,播放分片都是从倒数第三片开始播放,如果不满3片则不应该播放。当然如果有些播放器做了特别定制了,则可以不遵照这个原则。
  3. 以播放当前分片的duration时间刷新M3U8列表,然后做对应的加载动作。
  4. 如果播放列表在刷新之后与之前的列表相同,那么在播放当前分片duration一半的时间内在刷新一次。
  5. 前一片分片和后一片分片有不连续的时候,播放可能会出错,那么需要X-DISCONTINUTY标签来解决这个错误。

注意事项

  1. 有两种请求 m3u8 播放列表的方法:一是通过 m3u8 的 URI 进行请求,则该文件必须以 .m3u8 或 .m3u 结尾;二是通过 HTTP 进行请求,则请求头 Content-Type 必须设置为 application/vnd.apple.mpegurl 或者 audio/mpegurl。
  2. 空行和注释行在解析时都忽略。
  3. 媒体播放列表(Media Playlist)的流资源总时长就是各切片资源的时长之和。

TS文件格式

  1. TS(Transport Stream)是一种音视频封装格式,全称MPEG2-TS。MPEG-TS主要应用于实时传送的节目,比如实时广播的电视节目。
  2. TS文件(流)可以分为三层:TS层(Transport Stream)、PES层(Packet Elemental Stream)、ES层(Elementary Stream)。
  3. ES层就是音视频数据,PES层是在音视频数据上加了时间戳等对数据帧的说明信息,TS层是在PES层上加入了数据流识别和传输的必要信息。TS文件(码流)由多个TS Packet组成的。

TS文件(码流)的分层结构图

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

PES包头示例,47开头要记住

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

ES ,PES, TS关系如图(请仔细看这个图,它准确的解释了解ES的原理)

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

TS包有效载荷图解

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

从图可以看出TS包的有效载荷分为PSI(节目特定信息) 和 PES。而PSI又分为PAT表和PMT表,各表所在TS包的PID参考上面的 “表2-3 PID表”。分别给出各句法说明

PAT表 (节目相关表)

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

PES理解

  1. PES = Packetized Elementary Stream
  2. PES的payload是按照ES顺序的数据流
  3. 一个PES就是一个音频或视频的sample
  4. PES包头中含有timestamp信息
  5. PES被分成多个TS包后,第一个TS包中含有PES包头,中间TS包大多数情况只含ES数据,极少数含调整字段和ES数据,极个别夹杂着不含ES数据而只有调整字段的TS包,只有最后一个TS包可能需要填充调整字段补齐188字节。
  6. 音视频的PES的PID通过PMT表信息得到。

解TS的方法

  1. 先找到PID为0x00 的TS包,找到里面的节目映射表(PMT)PID,因为可能有几个节目信息,所以可能有几个PMT_PID,以一个为例。
  2. 接着查找该PMT_PID得TS包,通常就紧接着。在该PMT包中找音频和视频的PID。以视频为例。
  3. 开始提取一帧ES数据:
  4. 查找视频PID的TS包
  5. 找PES包头,方法:TS包头第2个字节的高6位(有效载荷单元起始指示符)为1的TS包,跳过调整字段(自适应字段),找到PES包头,提取时间戳,再跳至ES数据,这就是一帧ES数据的开始部分
  6. 查找有效载荷单元起始指示符为0的TS包。跳过TS包头,跳过自适应字段(有的话),提取后面的ES数据
  7. 同c 接着查找。
  8. 当碰到有效载荷单元起始指示符又变为1的视频TS包,就知道这是下一帧的开始了,将前面的所有ES数据组合成一帧数据。开始下一轮组帧。

TS流生成流程

  1. 将原始音视频数据压缩之后,压缩结果组成一个基本码流(ES)。
  2. 对ES(基本码流)进行打包形成PES。
  3. 在PES包中加入时间戳信息(PTS/DTS)。
  4. 将PES包内容分配到一系列固定长度的传输包(TS Packet)中。
  5. 在传输包中加入定时信息(PCR)。
  6. 在传输包中加入节目专用信息(PSI) 。
  7. 连续输出传输包形成具有恒定比特率的MPEG-TS流。

TS流解析流程

  1. 复用的MPEG-TS流中解析出TS包;
  2. 从TS包中获取PAT及对应的PMT;
  3. 从而获取特定节目的音视频PID;
  4. 通过PID筛选出特定音视频相关的TS包,并解析出PES;
  5. 从PES中读取到PTS/DTS,并从PES中解析出基本码流ES;
  6. 将ES交给解码器,获得压缩前的原始音视频数据。

目前最常见的盗版形式

方案 过程
下载 通过技术手段直接从网页端/客户端/H5页面下载视频
录屏 就是在观看视频的时候同步录制视频内容

明确了盗版路径,要做的就是对症下药。

针对【录屏】的安全防护解决方案


对小窗录屏/全屏录屏等行为起到强有力的震慑作用。

  1. 通过播放器实时监测,如果检测到视频处于录屏状态或小窗待录屏状态,视频会立即停止播放,以此来防止视频被盗取。
  2. 将用户ID、电话号码或其他信息内容等以跑马灯的形式展现在视频上,实现设定文字在视频上不规则地跑动,可追溯录屏者身份
  3. 在视频中添加用户专属的视频水印,从而让视频中融入企业的版权信息,防止盗录者盗取版权,保护公司的知识产权。
  4. 视频播放到某个时间点,弹出问答播放器,只有答题正确,提交后才能继续观看,增加了录屏的难度,提高录屏成本,大大降低盗版视频的观看体验。

为什么要对视频切片?

普通场景

  1. 相信大家都有这样的经历,一个视频太大,放到服务器上面,播放的时候,受服务器宽带和自己网络的影响访问会很慢。
  2. 经常看视频的小伙伴肯定看到过下面的场景,网页上视频播放的时候,会有一个m3u8的请求,然后再去请求key,再一个ts一个ts的下载。
  3. 这样有什么好处呢?就是当你视频五六百兆的大小,你可以通过工具将视频切片成一个个5兆大小的ts。
  4. 然后生成m3u8文件,m3u8文件中包含每一个ts的名字和加密的key。
  5. 这样播放的时候,会一个一个的去获取ts文件,因为ts文件的大小5兆左右,一般来说,普通服务器上就能很快的访问到。

加密场景

  1. 比如说公司要求在视频播放快的基础上,还要保证视频不能被别人下载,也可以采用这个方式
  2. 将mp4切片然后加密。然后对key的获取做限制,这样别人也就无法下载你的视频了。

部分影视站图床白嫖原理

  1. 目前很多盗版影视站,ts流媒体视频文件,不存自己服务器,而是通过某些大平台的上传页面抓包,使用它们的图床
  2. 有些没对图片接口做文件限制的,就被白嫖了
  3. 这么做对于影视站来说,节约存储和带宽访问成本,对图床来说,增加了成本
  4. 当然也有做文件限制的,检测是否为图片格式,通常是检测开头的几个字节。如【PNG】是 89 50 开头
  5. 但是又出现了,对ts文件的开头拼接假图片(花屏,小尺寸图片),实现伪造真图片来欺骗接口的文件检测的效果实现上传成功的目的

当然这种做法我是不赞同的,如果您是服务商,请检查上传图片的接口,防止被滥用。

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

使用FFMPEG对MP4视频切片生成加密的M3U8文件

所需软件:

如果出现了【不是内部或外部命令,也不是可运行的程序】请参考以下方案,操作步骤:

  1. 您可以先把两个软件的所在目录添加到环境变量
  2. 或者调用时使用绝对路径(E:\OVVO\ffmpeg.exe)
  3. 或者放到同目录

导出随机16位字节到enc.key文件

openssl rand 16 > enc.key

生成随机 iv 偏移 十六进制 字符串,记下来

openssl rand -hex 16

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

新建一个文件 enc.keyinfo 内容格式如下:

Key URI # enc.key的路径,使用http形式 
Path to key file # enc.key文件 
IV # 上面生成的iv

举个例子:enc.keyinfo内容如下:

https://xxx/OVVO/enc.key
/OVVO/enc.key
59147068b6158bd311859d28f5ace301

视频分片,这里先用命令进行视频分片加密

ffmpeg -y \
-i "E:\OVVO\test.mp4" \
-hls_time "3" \
-hls_key_info_file "E:\OVVO\enc.keyinfo" \
-hls_playlist_type "vod" \
-hls_list_size "0" \
-hls_segment_filename "E:\OVVO\file%d.ts" \
"E:\OVVO\playlist.m3u8"

-i:要切片的原视频文件
-hls_time:指定生成 ts 视频切片的时间长度s秒
hls_key_info_file:enc.keyinfo文件的位置
hls_list_size: 索引播放列表的最大列数 默认5,0 为不限制
hls_segment_filename:生成ts和m3u8文件的路径及文件名

最终一行命令

ffmpeg -y -i "E:\OVVO\test.mp4" -hls_time "3" -hls_key_info_file "E:\OVVO\enc.keyinfo" -hls_playlist_type "vod" -hls_list_size "0" -hls_segment_filename "E:\OVVO\file%d.ts" "E:\OVVO\playlist.m3u8"

等待几秒,切片完成,如下图,多出了【.ts】和【.m3u8】文件

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

m3u8文件的内容

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="enc.key",IV=0x59147068b6158bd311859d28f5ace301
#EXTINF:4.133333,
file0.ts
#EXTINF:3.700000,
file1.ts
#EXTINF:4.166667,
file2.ts
#EXTINF:1.833333,
file3.ts
#EXTINF:2.933333,
file4.ts
#EXT-X-ENDLIST

为何我定义的每个碎片3秒,实际有4,3,4,1,2不固定?这是因为关键帧问题,也可以得到解决。

如何本地播放看效果?

前置软件

  1. 下载phpStudy(PHP调试环境的程序集成包。该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等。)
    在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

  2. 下载Play HLS M3u8(浏览器插件)
    在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

在【E:\OVVO】目录,将生成的【.m3u8】【.key】【*.ts】移动到【D:\phpStudy\PHPTutorial\WWW】

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

然后在浏览器按下F12(开发者调试工具),打开本地网址,即可看到视频效果。

http://localhost/playlist.m3u8

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

选择key文件看看响应值,奇怪?为什么是红色字符?因为那是不可见的(详细请查看ASCII码值表),如果直接复制会造成不一致的情况。

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

那有什么办法能得到十六进制?可以下载010 Editor(专业文本/十六进制编辑器),打开【enc.key】文件,第一行就是了。

在线M3U8音视频加密安全与技术防护 - Alanna_冰凌汇编

市面上的视频托管平台

目前极少网站采用了这个新型格式,WebAssembly(简称wasm)是一个虚拟指令集体系架构(virtual ISA),整体架构包括核心的ISA定义、二进制编码、程序语义的定义与执行,以及面向不同的嵌入环境(如Web)的应用编程接口(WebAssembly API)。其初始目标是为C/C++等语言编写的程序经过编译,在确保安全和接近原生应用的运行速度更好地在Web平台上运行。

  1. 新某某(Webassembly,分段key(如1-10碎片是一个key,11-20是另外一个key),使用Nodejs补环境就行)
  2. 某某威,32位key
某某威版本 结论
V10 M3U8和KEY,均在JS层处理,AES算法
V11 Webassembly传递TS和某些值,返回解密后的TS,其中内部计算解密了key,当然也可以在内存的Buffer中Uint8Array截取得到,也可Nodejs调用,或魔改wasm,返回结果
V1102 同上,换了下盐
V1103 同上,换了下盐
V12 Webassembly封装了ffmpeg库,输出的是YUV抛给Canvas渲染,实际只要反混淆下文件头就可以

如何逆向wasm?请翻阅漁滒的文章

wasm转c调用与封装至dll案例
wasm转c调用实战
某网站字幕加密的wasm分析

托管平台 结论
某某场景 21位KEY
某家云 反混淆文件头,取前一段字节,运算替换下就行
某度云 对KEY进行了AES加密
阿某某 JSVMP层生成随机数,并同时计算KEY,之后在PES层处理,不同于标准的AES-128-CBC而它是ECB算法
七某某 对m3u8和ts链接做时效限制,过期后就打不开了
慕某某 动态加密m3u8和key值
腾某某 16位KEY,并不是真正的,有JSVMP生成临时随机key和iv,再取返回值AES解密后才是
气某某 20位KEY,算法细节就是,针对部分第几位的值运算,如果请求二次后返回的是假的随机key
i某某 xxtea算法,canvas有指纹同时运算才是
我要某某某 对m3u8和key动态加密
还有很多 不一一列举

需要你掌握HTTP协议,JS逆向的知识,并断点分析【Hls.js】脚本,就可以得到如上结论。
正所谓,知己知彼百战百胜,我们看到了,核心关键在与key的保护

针对【key】的安全防护解决方案

  1. 通过以上的操作,我们暂时是实现了本地对视频切片,并生成【.m3u8】和【.key】和【.ts】
  2. 现在的关键就在与【.key】的安全性,正常来说,是16位字节的,需要对它二次加密。
  3. HLS加密技术:也可以称之为m3u8切片加密,这种是目前H5时代广泛使用的技术,该加密本身是很安全的,基于AES加密算法。但有个致命的问题:别人很容易拿到秘钥进行解密。这种方式最大的优点是:几乎主流浏览器都支持,包括微信、qq等,打开就能播放,兼容性很好。缺点也很明显
  4. 因为算法是公开的,并且如果不保护好秘钥文件,ffmpeg等命令行、很多工具软件,均可拿到秘钥对视频基本还原,如果只是采用单纯的HLS加密技术,可以说:极其不安全。幸好,近几年国内很多厂商在标准HLS加密的基础上,对m3u8文件中的秘钥等做了防盗处理,这种二者结合,效果就好很多。

防盗链技术:这种严格来说,不属于视频加密,只是想办法防止视频被下载,只允许在线播放。但这种基本上来说属于防一般用户,很容易被绕过去。因为你只要让浏览器可以播放,别人就可以伪装自己是浏览器,拿到url,进行伪装浏览器的各种referer等信息,欺骗过防盗链系统,下载到视频。

防护种类 细节
key身份鉴权 服务器验证Cookie是否购买
key时效鉴权 若已购,则下发含【?t=1662901149&sign=2dc85bcdf05fad8d308000b0691b7c60】的链接,做时间限制,若10秒后访问就不给值了
次数限制 只允许访问一次
IP白名单 拒绝或只允许特定IP访问
Referer 基于HTTP Header跟踪来源,但可以伪造
user-agent 基于HTTP Header跟踪来源,但可以伪造
Cookie 基于用户信息跟踪来源

电脑端

视频文件内容采用私有算法真正逐帧加密:这种方式一般是基于不公开的算法,对视频文件、直播流、m3u8中的ts数据等,均可实现实时逐帧加密。但加密后的视频,需要专用特定播放器才可以播放。由于采用私有算法,因此其他播放器无法进行播放,增强了安全性。但也带来了一定不便利性,就是必须安装专用软件。不过这类技术就比较考验加密实力了,目前很多加密软件号称加密,但某宝等平台随便一搜,也有很多破解。因为,即使你用了专用播放器,但如果别人很容易逆向你的播放器,也就知道了加密算法,所以需要开发公司有多年深厚的研发实力才可以放心。

针对于试看业务逻辑的,防止白嫖方案

如果业务允许视频试看前2分钟,那么m3u8如下

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:4
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="enc.key",IV=0x59147068b6158bd311859d28f5ace301
#EXTINF:4.133333,
000.ts
#EXTINF:3.700000,
001.ts
#EXTINF:4.166667,
002.ts
#EXTINF:1.833333,
003.ts
#EXTINF:2.933333,
004.ts
#EXT-X-ENDLIST

根据切片命名自增规则,之后的文件就是【005.ts】【006.ts】盲猜,循环取响应值,就能拼接出完整的m3u8了

如何解决?
切片完,对所有.ts文件,已随机命名

#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:5
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="key.txt"
#EXTINF:5.000000,
7bc1edc0a66379b6.ts
#EXTINF:5.000000,
68029aa7c69383c9.ts
#EXTINF:5.000000,
ad0a6b20b5225a93.ts
#EXTINF:5.000000,
458981605103f4d8.ts
#EXTINF:5.000000,
238684a014581aee.ts
#EXT-X-ENDLIST

分析时链接是blob?

Blob和ArrayBuffer是什么鬼?

  1. 最早是数据库直接用Blob来存储二进制数据对象,这样就不用关注存储数据的格式了。在web领域,Blob对象表示一个只读原始数据的类文件对象,虽然是二进制原始数据但是类似文件的对象,因此可以像操作文件对象一样操作Blob对象。
  2. ArrayBuffer对象用来表示通用的、固定长度的原始二进制数据缓冲区。我们可以通过new ArrayBuffer(length)来获得一片连续的内存空间,它不能直接读写,但可根据需要将其传递到TypedArray视图或 DataView 对象来解释原始缓冲区。实际上视图只是给你提供了一个某种类型的读写接口,让你可以操作ArrayBuffer里的数据。TypedArray需指定一个数组类型来保证数组成员都是同一个数据类型,而DataView数组成员可以是不同的数据类型。

TypedArray视图的类型数组对象有以下几个:

Int8Array:8位有符号整数,长度1个字节。
Uint8Array:8位无符号整数,长度1个字节。
Uint8ClampedArray:8位无符号整数,长度1个字节,溢出处理不同。
Int16Array:16位有符号整数,长度2个字节。
Uint16Array:16位无符号整数,长度2个字节。
Int32Array:32位有符号整数,长度4个字节。
Uint32Array:32位无符号整数,长度4个字节。
Float32Array:32位浮点数,长度4个字节。
Float64Array:64位浮点数,长度8个字节。

Blob与ArrayBuffer的区别是,除了原始字节以外它还提供了mime type作为元数据,Blob和ArrayBuffer之间可以进行转换。

File对象其实继承自Blob对象,并提供了提供了name , lastModifiedDate, size ,type 等基础元数据。

视频加密防护发展方向

  1. 浏览器端实现 WebAssembly 播放器(相对于JS层而言,难度提升了,调试也都是压栈出栈等指令的操作)
  2. 谷歌的WideVine数字版权管理(DRM)

本帖最后由 Alanna 于 2022-9-11 22:29 编辑
冰凌汇编免责声明
以上内容均来自网友转发或原创,如存在侵权请发送到站方邮件9003554@qq.com处理。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|站点统计|Archiver|小黑屋|RSS|冰凌汇编 ( 滇ICP备2022002049号 滇公网安备 53032102000029号)|网站地图

GMT+8, 2022-10-6 21:10 , Processed in 0.142001 second(s), 6 queries , Redis On.

冰凌汇编 - 建立于2021年12月20日

Powered by Discuz! © 2001-2022 Comsenz Inc.

快速回复 返回顶部 返回列表