admin 发表于 2021-12-14 20:18:34

m3u8解析、ts视频块解密合并mp4

今天客户有个批量下载视频得需求、拿到链接一顿分析、发现视频是m3u8文件分块、然后有KEY加密、aes-128


下面开始处理流程:
    1 先取出key链接、这里得key是需要携带token才能获取、具体token怎么获取不在本次讨论范围~.~

    2 下载key文件、二进制文件打开是乱码、字节保存就好

    3 上图最后一行*.ts***,这是个加密得视频分块、拼装好url也下载下来

    4 一个m3u8里面肯定会有很多ts分块得




    5 一般一个m3u8 用的都是统一个key、不过也要根据实际情况,这次得是用得同一个key、只需要下载一次Key文件就可以、

    6 把所有得ts 视频分块全部下载下来、这里有个验证必须要带来路、headers~,记得给名字划分好、后面要用到、现在得名字全是一样得~

    7 把这个m3u8得格式处理一下保存下来

      7.1 把所有key链接换成第 2 步得文件名

      7.2 #EXT-X-KEY:METHOD=AES-128,URI="key.key",IV=0x00000000000000000000000000000000

      7.3 IV不用在意、怎么加得怎么解就好了

      7.4 把第 6 步所有得 *.***ts* 、ts文件替换成刚才下载所有ts文件名

            比如:

                  1.ts

                  2.ts.....

      7.5 保存m3u8文件后缀是m3u8

      7.6 脚本处理


    8 上面我们就把一个视频得所有分块和解密key以及m3u8文件给保存好了、然后就是解密部分

    9 解密我们借助 ffmpeg 、这里我就不提供了、需要的还是大家取官网下载比较友好

    10 把所有ts、key、m3u8文件和 ffmpeg 放在同一个目录

    11 .\ffmpeg.exe -allowed_extensions ALL -protocol_whitelist "file,http,crypto,tcp" -i xxx.m3u8 -c copy 1.mp4

    12 xxx.m3u8、保存得m3u8文件名

    13 1.mp4、要解密、合并、生成得mp4文件名、即最终文件

    14 正常解码播放~安逸了

    15 其中还是有一些小坑得、比如token得生成啊、视频来路啊、不同站点带来得坑肯定不一样、这个还是要根据实际情况分析

这样一个视频就完整得解密合并成mp4了、客户要下载七十个视频、一个一个来?

肯定是不可能得、下面分享一部分自动话得代码、毕竟站点不一样、实际情况也不一样

    1 取视频id




      1.1 我这里用信号量限制了并发数为1,我也不晓得ffmpeg能不能多进程、会不会出错、索性就慢慢跑、反正也不多、才几十个视频

      1.2 我是把所有id全部取出来丢到了json中得、没得加密、没得验证、安逸~

    2 取出视频名一个一些需要得参数




    3 拼接 ts 文件链接得一些参数然后加入到循环策略批量下载保存并存下文件名




    4 整理 m3u8 得格式为上面说的格式




    5 解密、合并mp4视频文件




    6 上一步有两个 chdir 操作切换目录、第一次是为了执行ffmpeg、第二次是为了保存文件新的、防止目录错乱而出错

    7 加延时是为了防止文件占用、实际用不了那么久、合并视频也就一两秒、删除就更快了、以防万一得设置久一点



然后就可以安逸得等待全部下载完毕啦~

打完收工~.~



页: [1]
查看完整版本: m3u8解析、ts视频块解密合并mp4