38 条回复  ·  631 次点击
fly9i 小成 2024-9-11 11:21:16
一般常规做法是在 m3u8 不加密,ts 文件加密,每个 ts 文件密钥可以不一样,加密一般是用 aes-128-cbc 。
m3u8 中配置一条
#EXT-X-KEY:METHOD=AES-128,URI="https://example.com/path/to/key",IV=0xabcdef0123456789abcdef0123456789

类似这样的数据,hls.js 每次请求 ts 前会先先请求密钥,ts 解密也是库里自动了。
thinkingbullet 小成 2024-9-11 11:24:11
@yuzo555 ffmpeg -i video.mp4 -codec:v libx264 -codec:a aac -strict -2 -f hls -hls_key_info_file key_info.txt -hls_segment_type mpegts -hls_encryption_algorithm AES-128 -hls_key_url http://example.com/path/to/key playlist.m3u8
gpt3.5 的答案是这个,不知道谁真谁假
abusizhishen 小成 2024-9-11 11:51:15
用 ffmpeg 加密之后,得到 m3u8 文件,把其中的解密 key 加密,前端播放前解密,这样对方拿到 m3u8 也无法播放,不过问题是解密是在前端,对方研究代码也能找到破解的方法,代价是花费更多的时间
puzzle9 初学 2024-9-11 11:51:56
m3u8
要不 你自己重新实现下解密流程 像那种视频网站一样
增加下破解难度而已
joewang1988 小成 2024-9-11 15:42:29
做完了,怎么交付?
rekulas 小成 2024-9-11 16:31:32
还有个骚操作办法,先视频预处理对 rgb 通道进行异或,前端播放时根据 key 还原,速度非常快对性能影响很小,虽然没加密但是对方没 key 播放出来就是花屏
Oldletter 小成 2024-9-11 16:54:22
@fly9i 感觉他就是想做个 https://help.aliyun.com/zh/cdn/user-guide/m3u8-encryption-and-rewrite 这样的
BaiLinfeng 小成 2024-9-11 17:01:42
这是想做啥黑科技
Ipsum 初学 2024-9-11 17:07:52
@BaiLinfeng 我感觉是想放毛片在国内 cdn 上躲避审查。
azhangbing 小成 2024-9-11 17:30:13
31 楼正确 你只需要重写 class CustomFragmentLoader extends Hls.DefaultConfig.loader 的 load 方法就行了

    load(context, config, callbacks) {
        const onSuccessOriginal = callbacks.onSuccess;

        callbacks.onSuccess = (response, stats, context) => {
            if (context.frag && context.frag.url && context.frag.url.includes('.ts')) {
                const encryptedData = new Uint8Array(response.data);
                const filenameBase = this.extractFilename(context.frag.url);

   

                const decryptedData = xorDecrypt(encryptedData, this.keyBytes);
                response.data = decryptedData.buffer;

   
            }
            onSuccessOriginal(response, stats, context);
        };

        super.load(context, config, callbacks);
    }
返回顶部