当前位置:  开发笔记 > 编程语言 > 正文

使用.m3u8解密和组合.ts音频文件

如何解决《使用.m3u8解密和组合.ts音频文件》经验,为你挑选了1个好方法。

我有几千个带有.key和.m3u8文件的AES-128加密音频文件.

密钥文件只包含一个由44个字符组成的密钥..m3ud文件似乎是某种类型的播放列表.

#EXTM3U
#EXT-X-ALLOW-CACHE:NO
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-KEY:METHOD=AES-128,URI="http://localhost:[port]/hls/keys/nax_9781843794066.key"
#EXTINF:10,
http://localhost:[port]/filesequence0000000.ts
#EXTINF:10,
etc...

请注意,密钥URI和.ts文件的路径现在都是错误的.

环顾四周,看来ffmpeg可能适用于这种格式.但我不确定语法.

如何解密和组合这些文件?

我一直在玩修复播放列表语法,并弄清楚如何使用ffmpeg并得到.

ffmpeg -i nax_9781843794066.m3u8 -c copy output.ts
ffmpeg version N-77197-gdf2ce13 Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 5.2.0 (GCC)
configuration: --enable-gpl --enable-version3 --disable-w32threads --enable-avisynth --enable-bzlib --enable-fontconfig --enable-frei0r --enable-gnutls --enable-iconv --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libdcadec --enable-libfreetype --enable-libgme --enable-libgsm --enable-libilbc --enable-libmodplug --enable-libmp3lame --enable-libopencore-amrnb --enable-libopencore-amrwb --enable-libopenjpeg --enable-libopus --enable-librtmp --enable-libschroedinger --enable-libsoxr --enable-libspeex --enable-libtheora --enable-libtwolame --enable-libvidstab --enable-libvo-aacenc --enable-libvo-amrwbenc --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx264 --enable-libx265 --enable-libxavs --enable-libxvid --enable-libzimg --enable-lzma --enable-decklink --enable-zlib
libavutil      55. 10.100 / 55. 10.100
libavcodec     57. 17.100 / 57. 17.100
libavformat    57. 19.100 / 57. 19.100
libavdevice    57.  0.100 / 57.  0.100
libavfilter     6. 20.100 /  6. 20.100
libswscale      4.  0.100 /  4.  0.100
libswresample   2.  0.101 /  2.  0.101
libpostproc    54.  0.100 / 54.  0.100
[hls,applehttp @ 0000003e6348a660] Error when loading first segment 'filesequence0000000.ts'
nax_9781843794066.m3u8: Invalid data found when processing input

filesequence0000000.ts是第一个文件,在同一个文件夹中.我不知道这是加密或其他什么问题.

这是关键文件,如果重要的话: MoOoNvcKlThWBm2T+VzYq9QKZLw7MFUqSyLYjiwquTQ=



1> aergistal..:

最新版本的ffmpeg应该能够解密AES-128 HLS流.您不需要网络服务器.如果m3u8URI /路径错误,您可以:

创建一个目录

将密钥复制到密钥文件,即将my.key其放在目录中.请注意,如果播放列表有多个键,则可以旋转键,将所有键复制到不同的文件中.

将所有.ts段复制到同一目录

复制和编辑playlist.m3u8并仅使用密钥(URI)和段的文件名.

获取单个.ts文件做:

ffmpeg -i playlist.m3u8 -c copy output.ts

如果你只想要没有.ts容器的音频流,你可以提取它.例如:假设您使用AAC编解码器运行时有一个音频流:

ffmpeg -i playlist.m3u8 -map 0:a -c copy output.aac

这将在AAC不重新编码的情况下将流提取到文件.如果您想要一个与源不同的编解码器,则必须重新编码.

如果由于某种原因你必须使用openssl解密段,请记住,如果没有IV指定,那么IV它等于段的媒体序列,即.第一段有IV=0,第二段有IV=1,依此类推.解密后,更新播放列表以指向解密的段并删除该EXT-X-KEY行.如果你走这条路线你甚至不需要ffmpeg来获得单个.ts文件,因为MPEG-TS可以直接连接,即.你可以cat在解密的段上使用.


@JonathonWisnoski GOT IT.似乎base64密钥以某种方式加密.我设法绕过保护以获得普通的16字节密钥.一旦我有了密钥,我就使用了我昨天编写的实用程序,它可以轻松地将加密的.ts文件转换为一个单独的解密文件.ts.奇怪的是,这适用于IV,它始终为0.现在我有16字节密钥,我将看看是否可以弄清楚base64 44字节密钥如何映射到普通的16字节密钥.如果我弄明白的话,我会尝试开源我的代码,以便其他人可以从我努力解决这个问题中学习;).
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有