目录
- 参考
- 概述
- CENC加密的mp4文件
- libav CENC加密、解密mp4文件
1. 参考
- [1] ISO/IEC 23001-7:2016
Information technology -- MPEG systems technologies -- Part 7: Common encryption in ISO base media file format files - [2] ISO Common Encryption ('cenc') Protection Scheme for ISO Base Media File Format Stream Format
- [3] stackoverflow/FFmpeg: how to produce MP4 CENC (Common Encryption) videos
- [4] 郭晓霞/视频内容加密封装技术研究
- [5] zhihu/代码实现FFmpeg加密、解密mp4文件
2. 概述
FFmpeg提供了cenc的方式来加密保护mp4文件。
ffmpeg -h muxer=mp4
能看到mp4封装器提供的选项,加密相关的选项如下所示。
-encryption_scheme <string> E....... Configures the encryption scheme, allowed values are none, cenc-aes-ctr
-encryption_key <binary> E....... The media encryption key (hex)
-encryption_kid <binary> E....... The media encryption key identifier (hex)
- encryption_scheme:加密的方案,只支持cenc-aes-ctr。
- encryption_key:加密key,128比特(16bytes),格式使用16进制的表示。加密和解密的时候使用。
- encryption_kid:加密key的标识,128比特(16bytes),格式使用16进制的表示。加密时需要,解密不需要。具体作用尚未找到参考。
ffmpeg命令行工具对已有mp4进行CENC加密示例:
ffmpeg -i julin_5s.mp4 -c:v copy -c:a copy -encryption_scheme cenc-aes-ctr -encryption_key 76a6c65c5ea762046bd749a2e632ccbb -encryption_kid a7e61c373e219033c21091fa607bf3b8 julin_5s_cenc.mp4
ffplay播放CENC加密的mp4文件的示例:
ffplay julin_5s_cenc.mp4 -decryption_key 76a6c65c5ea762046bd749a2e632ccbb
3. mp4的CENC加密文件
查看CENC加密后的mp4文件,相比原有文件在stbl下增加了3个box:
- senc:sample specific encryption data,特定加密数据样本。
- saio:sample auxiliary information offsets,样本辅助信息偏移量。
- saiz:sample auxiliary information sizes,样本辅助信息大小。
4. libav CENC加密、解密mp4文件
加密
AVDictionary *opts = NULL;
av_dict_set(&format_opts, "encryption_scheme", "cenc-aes-ctr", 0);
av_dict_set(&format_opts, "encryption_key", "76a6c65c5ea762046bd749a2e632ccbb", 0);
av_dict_set(&format_opts, "encryption_kid", "a7e61c373e219033c21091fa607bf3b8", 0);
ret = avformat_write_header(ofmt_ctx, &format_opts);
解密
av_dict_set(&format_opts, "decryption_key", "76a6c65c5ea762046bd749a2e632ccbb", 0);
ret = avformat_open_input(&ifmt_ctx, is->filename, is->iformat, &format_opts);