FFmpeg CENC加密mp4文件

目录

  1. 参考
  2. 概述
  3. CENC加密的mp4文件
  4. 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      E....... Configures the encryption scheme, allowed values are none, cenc-aes-ctr
  -encryption_key         E....... The media encryption key (hex)
  -encryption_kid         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加密文件

image.png

查看CENC加密后的mp4文件,相比原有文件在stbl下增加了3个box:

  1. senc:sample specific encryption data,特定加密数据样本。
  2. saio:sample auxiliary information offsets,样本辅助信息偏移量。
  3. 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);

你可能感兴趣的:(FFmpeg CENC加密mp4文件)