mp3到m3u8的加密格式错误

2024-04-18 05:08:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个python函数将mp3编码为m3u8。这个功能允许我 生成一个m3u8文件及其ts块。在

我可以用iOs上的原生播放器来阅读这个“播放列表”。 不幸的是,我无法实现使用android mediaplayer(我得到了错误MEDIA_error_MALFORMED)。在

关键是,如果在python中,我通过子进程使用openssl,它就可以工作。但是产生一个新的过程太贵了,我想避免这种情况:

 cmd = ["openssl",
            "aes-128-cbc",
            "-e",
            "-in", path,
            "-out", dest_path+".openssl.ts",
            "-iv", ("%d" % iv_counter).zfill(32),
            "-K", keyHex]
        subprocess.check_call(cmd)

使用openssl或我的实现生成相同的m3u8文件,相同数量的ts文件,并且这些ts文件具有完全相同的权重。在

我能找到的唯一解释是我的实现是错误的。我知道这可能很难调试,但也许在第一次阅读时会有一些东西跃然纸上。 以下是执行加密的函数:

^{pr2}$

编辑,如果可以的话:我们编写了一个小JAVA函数来解密openssl生成的ts文件和我们自制的代码。openssl生成的文件很好,但是python代码生成的文件有一个错误的填充异常。在


Tags: 文件path函数功能cmd编码错误播放器
1条回答
网友
1楼 · 发布于 2024-04-18 05:08:31

问题来自于你的初始向量(iv)。OpenSSL正在等待一个数字参数(十六进制),但是是16个字符的字符串格式。在

代码只返回十六进制的数字,但以ASCII格式:

    >>> iv_counter = 11111111
    >>> print("%16X" % iv_counter)
    '          A98AC7'

但是,预期值为:

^{pr2}$

要实现这一点,您必须将其替换为:

    >>> print(("%032X" % iv_counter).decode("hex"))
    '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xa9\x8a\xc7'

相关问题 更多 >