Replies: 1 comment
-
|
为啥不能看hdr和杜比视界啊,合成的qsv用那个解密工具解密后的dovi信息还在吗 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Uh oh!
There was an error while loading. Please reload this page.
-
新版 QSV 结构
根据前辈公开的已有资料,可以知晓目前新版 qsv 的整体结构:
点击展开
头部
索引
每个索引结构体的大小为0x1C,经过加密,记录视频分段的偏移和大小。
json字符串
加密的json字符串,需要解密(应使用 version1 算法 解密)。
视频分段
一个qsv文件包含多段视频文件,通过索引定位,且每个视频文件的前0x400字节经过加密(应使用 version2 算法 解密)。
明白文件结构后,我们就能从 QSV 文件中读取想要的信息,并提取出加密的 TS 文件。
python 实现:https://github.com/nilaoda/qsv_unpacker/blob/main/qsv_unpacker.py
一个想法
通过对 QSV 文件的解析,我们已经能够提取出有关的 m3u8 文件、json 文件和加密 TS 文件
那如果我们已经有了加密的 TS 文件,能否自行生成符合规范的 QSV 文件,然后实现用官方的播放器直接播放加密文件呢?
理论上是可以的。
实现加密
根据已有的解密算法(这里需要指出,原始的
decrypt_1函数对于新版本的解密有些问题,@592767809 已经给出正确的版本),不难写出对应的逆向操作,即加密算法。python 版本的加密函数:
生成JSON
JSON 文件用于告知播放器如何播放视频,最关键的是
ticketdata和ticketsize这两个字段。注意: 需要调用
encrypt_1将数据加密后再写入。生成索引
索引主要是
文件名、文件在QSV中的起始位置、大小。文件名和大小可以通过 m3u8 文件来获取:通过正则表达式提取出对应的文件名和大小:
有了每个文件的
文件名和大小,再加上已知的偏移数据,就能计算每个文件在 QSV 中的正确起始位置。注意: 需要调用
encrypt_2将数据加密后再写入。写入 TS 数据
与读取相反,写入结束后,根据索引跳转到文件对应位置,调用
encrypt_2加密每个分片的前1024字节即可。完整实现
根据以上步骤,即可自行使用已知的 TS 文件、m3u8 文件和 ticketdata 来生成 QSV 文件。
完整实现:https://github.com/nilaoda/qsv_unpacker/blob/main/qsv_packer.py
验证
Beta Was this translation helpful? Give feedback.
All reactions