用ffmpeg加密/解密播放CENC的mp4
MPEG Common Encryption (CENC)
說明請參考wiki
https://en.wikipedia.org/wiki/MPEG_Common_Encryption
for ISOBMFF, Common encryption in ISO base
media file format files (ISO/IEC 23001-7:2016)
for MPEG-TS, Common encryption of MPEG-2
transport streams (ISO/IEC 23001-9:2016)
確認ffmpeg是否有CENC功能
$ ./ffmpeg -h muxer=mp4 | grep enc
...
-encryption_scheme
-encryption_key
-encryption_kid
用CENC加密mp4
./ffmpeg -i /content/sample.ts \
-c copy \
-encryption_scheme cenc-aes-ctr \
-encryption_key 76a6c65c5ea762046bd749a2e632ccbb \
-encryption_kid a7e61c373e219033c21091fa607bf3b8 \
cenc.mp4
預設只支援AES CTR模式, 可參考wiki解說
https://en.wikipedia.org/wiki/Block_cipher_mode_of_operation#Counter_(CTR)
就是把counter編號(編號起始值可以自訂,就類似IV)拿去加密後再跟明文xor產生密文, 這個方法的好處就是可以把counter的加密結果做成表,加速加密運算的進行。然後解密的時候也支援隨機存取,因為跳到要存取位置可以快速得到counter值, 解密也就不像CBC一樣需要先解出其他明文塊,才能解目前的加密塊。
解密並播放mp4
./ffplay \
-decryption_key 76a6c65c5ea762046bd749a2e632ccbb \
-i cenc.mp4
參考:FFmpeg CENC加密mp4文件
https://www.jianshu.com/p/ea0761f6aa04
留言