首页
电脑工具
安卓工具
技术文章
资源分享
中文编程
其它资料
登录
搜索
登录
搜索
435000
累计撰写
382
篇文章
累计收到
0
条评论
首页
栏目
首页
电脑工具
安卓工具
技术文章
资源分享
中文编程
其它资料
登录
包含标签 【M3U8】 的文章
2025-3-26
推荐几款 Chrome m3u8 播放器插件(附下载)
之前在 PC 端 Chrome 浏览器上尝试播放 hls 视频地址时,都是直接下载。 观看时都是先复制地址,然后使用播放器客户端诸如 hls player 等进行播放。 有时也挺不方便。那么有什么方法可以使得在 Chrome 浏览器上直接播放 m3u8 视频? 使用第三方 Chrome m3u8 插件就可以解决。 这里介绍几个 Chrome 插件,支持直接在...
2025年-3月-26日
6 阅读
0 评论
电脑工具
2025-3-26
【在线M3U8音视频加密安全与技术防护】
https://www.52pojie.cn/thread-1686788-1-1.html 您好,本篇文章将由浅入深介绍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 文件要么是媒体播放列表,要么是主播放列表。但无论是哪种列表,其有效组成均由两部分构成: 以 #EXT 开头的为标签信息,作为对媒体资源的进一步描述; 剩余的为资源信息,要么是片段资源(Media Playlist)路径,要么是 m3u8 资源(Master Playlist)路径; m3u8文件遵循的条件 m3u8 文件必须以 utf-8 进行编码,不能使用 Byte Order Mark(BOM)字节序, 不能包含 utf-8 控制字符(U+0000 \~ U_001F 和 U+007F \~ u+009F)。 每一行要么是一个 URI,要么是空行,要么就是以 # 开头的字符串。不能出现空白字符,除了显示声明的元素 以 # 开头的字符串要么是注释,要么就是标签。标签以 #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的一些标准 分片必须是动态改变的,序列不能相同,并且序列必须是增序的 当M3U8没有出现EXT-X-ENDLIST标签时,无论这个M3U8列表中有多少个分片,播放分片都是从倒数第三片开始播放,如果不满3片则不应该播放。当然如果有些播放器做了特别定制了,则可以不遵照这个原则。 以播放当前分片的duration时间刷新M3U8列表,然后做对应的加载动作。 如果播放列表在刷新之后与之前的列表相同,那么在播放当前分片duration一半的时间内在刷新一次。 前一片分片和后一片分片有不连续的时候,播放可能会出错,那么需要X-DISCONTINUTY标签来解决这个错误。 注意事项 有两种请求 m3u8 播放列表的方法:一是通过 m3u8 的 URI 进行请求,则该文件必须以 .m3u8 或 .m3u 结尾;二是通过 HTTP 进行请求,则请求头 Content-Type 必须设置为 application/vnd.apple.mpegurl 或者 audio/mpegurl。 空行和注释行在解析时都忽略。 媒体播放列表(Media Playlist)的流资源总时长就是各切片资源的时长之和。 TS文件格式 TS(Transport Stream)是一种音视频封装格式,全称MPEG2-TS。MPEG-TS主要应用于实时传送的节目,比如实时广播的电视节目。 TS文件(流)可以分为三层:TS层(Transport Stream)、PES层(Packet Elemental Stream)、ES层(Elementary Stream)。 ES层就是音视频数据,PES层是在音视频数据上加了时间戳等对数据帧的说明信息,TS层是在PES层上加入了数据流识别和传输的必要信息。TS文件(码流)由多个TS Packet组成的。 TS文件(码流)的分层结构图 PES包头示例,47开头要记住 ES ,PES, TS关系如图(请仔细看这个图,它准确的解释了解ES的原理) TS包有效载荷图解 从图可以看出TS包的有效载荷分为PSI(节目特定信息) 和 PES。而PSI又分为PAT表和PMT表,各表所在TS包的PID参考上面的 “表2-3 PID表”。分别给出各句法说明 PAT表 (节目相关表) PES理解 PES = Packetized Elementary Stream PES的payload是按照ES顺序的数据流 一个PES就是一个音频或视频的sample PES包头中含有timestamp信息 PES被分成多个TS包后,第一个TS包中含有PES包头,中间TS包大多数情况只含ES数据,极少数含调整字段和ES数据,极个别夹杂着不含ES数据而只有调整字段的TS包,只有最后一个TS包可能需要填充调整字段补齐188字节。 音视频的PES的PID通过PMT表信息得到。 解TS的方法 先找到PID为0x00 的TS包,找到里面的节目映射表(PMT)PID,因为可能有几个节目信息,所以可能有几个PMT_PID,以一个为例。 接着查找该PMT_PID得TS包,通常就紧接着。在该PMT包中找音频和视频的PID。以视频为例。 开始提取一帧ES数据: 查找视频PID的TS包 找PES包头,方法:TS包头第2个字节的高6位(有效载荷单元起始指示符)为1的TS包,跳过调整字段(自适应字段),找到PES包头,提取时间戳,再跳至ES数据,这就是一帧ES数据的开始部分 查找有效载荷单元起始指示符为0的TS包。跳过TS包头,跳过自适应字段(有的话),提取后面的ES数据 同c 接着查找。 当碰到有效载荷单元起始指示符又变为1的视频TS包,就知道这是下一帧的开始了,将前面的所有ES数据组合成一帧数据。开始下一轮组帧。 TS流生成流程 将原始音视频数据压缩之后,压缩结果组成一个基本码流(ES)。 对ES(基本码流)进行打包形成PES。 在PES包中加入时间戳信息(PTS/DTS)。 将PES包内容分配到一系列固定长度的传输包(TS Packet)中。 在传输包中加入定时信息(PCR)。 在传输包中加入节目专用信息(PSI) 。 连续输出传输包形成具有恒定比特率的MPEG-TS流。 TS流解析流程 复用的MPEG-TS流中解析出TS包; 从TS包中获取PAT及对应的PMT; 从而获取特定节目的音视频PID; 通过PID筛选出特定音视频相关的TS包,并解析出PES; 从PES中读取到PTS/DTS,并从PES中解析出基本码流ES; 将ES交给解码器,获得压缩前的原始音视频数据。 目前最常见的盗版形式 方案 过程 下载 通过技术手段直接从网页端/客户端/H5页面下载视频 录屏 就是在观看视频的时候同步录制视频内容 明确了盗版路径,要做的就是对症下药。 针对【录屏】的安全防护解决方案 对小窗录屏/全屏录屏等行为起到强有力的震慑作用。 通过播放器实时监测,如果检测到视频处于录屏状态或小窗待录屏状态,视频会立即停止播放,以此来防止视频被盗取。 将用户ID、电话号码或其他信息内容等以跑马灯的形式展现在视频上,实现设定文字在视频上不规则地跑动,可追溯录屏者身份 在视频中添加用户专属的视频水印,从而让视频中融入企业的版权信息,防止盗录者盗取版权,保护公司的知识产权。 视频播放到某个时间点,弹出问答播放器,只有答题正确,提交后才能继续观看,增加了录屏的难度,提高录屏成本,大大降低盗版视频的观看体验。 为什么要对视频切片? 普通场景 相信大家都有这样的经历,一个视频太大,放到服务器上面,播放的时候,受服务器宽带和自己网络的影响访问会很慢。 经常看视频的小伙伴肯定看到过下面的场景,网页上视频播放的时候,会有一个m3u8的请求,然后再去请求key,再一个ts一个ts的下载。 这样有什么好处呢?就是当你视频五六百兆的大小,你可以通过工具将视频切片成一个个5兆大小的ts。 然后生成m3u8文件,m3u8文件中包含每一个ts的名字和加密的key。 这样播放的时候,会一个一个的去获取ts文件,因为ts文件的大小5兆左右,一般来说,普通服务器上就能很快的访问到。 加密场景 比如说公司要求在视频播放快的基础上,还要保证视频不能被别人下载,也可以采用这个方式 将mp4切片然后加密。然后对key的获取做限制,这样别人也就无法下载你的视频了。 部分影视站图床白嫖原理 目前很多盗版影视站,ts流媒体视频文件,不存自己服务器,而是通过某些大平台的上传页面抓包,使用它们的图床 有些没对图片接口做文件限制的,就被白嫖了 这么做对于影视站来说,节约存储和带宽访问成本,对图床来说,增加了成本 当然也有做文件限制的,检测是否为图片格式,通常是检测开头的几个字节。如【PNG】是 89 50 开头 但是又出现了,对ts文件的开头拼接假图片(花屏,小尺寸图片),实现伪造真图片来欺骗接口的文件检测的效果实现上传成功的目的 当然这种做法我是不赞同的,如果您是服务商,请检查上传图片的接口,防止被滥用。 使用FFMPEG对MP4视频切片生成加密的M3U8文件 所需软件: openssl 点我下载(加密值生成) ffmpeg 点我下载(音视频切片) 如果出现了【不是内部或外部命令,也不是可运行的程序】请参考以下方案,操作步骤: 您可以先把两个软件的所在目录添加到环境变量 或者调用时使用绝对路径(E:\OVVO\ffmpeg.exe) 或者放到同目录 导出随机16位字节到enc.key文件 openssl rand 16 > enc.key 生成随机 iv 偏移 十六进制 字符串,记下来 openssl rand -hex 16 新建一个文件 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文件的内容 复制代码 隐藏代码 #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不固定?这是因为关键帧问题,也可以得到解决。 如何本地播放看效果? 前置软件 下载phpStudy(PHP调试环境的程序集成包。该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便、好用的PHP调试环境。该程序不仅包括PHP调试环境,还包括了开发工具、开发手册等。) 下载Play HLS M3u8(浏览器插件) 在【E:\OVVO】目录,将生成的【.m3u8】【.key】【*.ts】移动到【D:\phpStudy\PHPTutorial\WWW】 然后在浏览器按下F12(开发者调试工具),打开本地网址,即可看到视频效果。 http://localhost/playlist.m3u8 选择key文件看看响应值,奇怪?为什么是红色字符?因为那是不可见的(详细请查看ASCII码值表),如果直接复制会造成不一致的情况。 那有什么办法能得到十六进制?可以下载010 Editor(专业文本/十六进制编辑器),打开【enc.key】文件,第一行就是了。 市面上的视频托管平台 目前极少网站采用了这个新型格式,WebAssembly(简称wasm)是一个虚拟指令集体系架构(virtual ISA),整体架构包括核心的ISA定义、二进制编码、程序语义的定义与执行,以及面向不同的嵌入环境(如Web)的应用编程接口(WebAssembly API)。其初始目标是为C/C++等语言编写的程序经过编译,在确保安全和接近原生应用的运行速度更好地在Web平台上运行。 新某某(Webassembly,分段key(如1-10碎片是一个key,11-20是另外一个key),使用Nodejs补环境就行) 某某威,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】的安全防护解决方案 通过以上的操作,我们暂时是实现了本地对视频切片,并生成【.m3u8】和【.key】和【.ts】 现在的关键就在与【.key】的安全性,正常来说,是16位字节的,需要对它二次加密。 HLS加密技术:也可以称之为m3u8切片加密,这种是目前H5时代广泛使用的技术,该加密本身是很安全的,基于AES加密算法。但有个致命的问题:别人很容易拿到秘钥进行解密。这种方式最大的优点是:几乎主流浏览器都支持,包括微信、qq等,打开就能播放,兼容性很好。缺点也很明显 因为算法是公开的,并且如果不保护好秘钥文件,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是什么鬼? 最早是数据库直接用Blob来存储二进制数据对象,这样就不用关注存储数据的格式了。在web领域,Blob对象表示一个只读原始数据的类文件对象,虽然是二进制原始数据但是类似文件的对象,因此可以像操作文件对象一样操作Blob对象。 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 等基础元数据。 视频加密防护发展方向 浏览器端实现 WebAssembly 播放器(相对于JS层而言,难度提升了,调试也都是压栈出栈等指令的操作) 谷歌的WideVine数字版权管理(DRM)
2025年-3月-26日
7 阅读
0 评论
电脑工具