是的,您可以使用ffmpeg 来完成。您需要将数据库中的密钥写入文件,比如video.key。
您需要第二个文件,我们将其命名为key_info,这是关键信息文件。格式如下:
key URI
key file path
IV (optional)
例如:
http://example.com/video.key
video.key
您告诉ffmpeg 使用hls_key_info 参数来加密您的段:
ffmpeg -i input.mp4 -c copy -bsf:v h264_mp4toannexb -hls_time 10 -hls_key_info_file key_info playlist.m3u8
这将在 CBC 模式下使用 AES-128 加密您的片段,并将相关标签添加到您的播放列表:
#EXT-X-KEY:METHOD=AES-128,URI="http://example.com/video.key"
如果需要,您还可以使用openssl 手动加密分段。这是一个示例脚本,其中每个 IV 都等于段索引:
#!/bin/bash
ts_dir=/path/to/ts/
key_file=video.key
openssl rand 16 > $key_file
enc_key=$(hexdump -v -e '16/1 "%02x"' $key_file)
pushd $ts_dir
ts_cnt=$(ls *.ts | wc -l)
((ts_cnt--))
i=0
for i in $(seq -f "%01g" 0 $ts_cnt); do
iv=$(printf '%032x' $i)
ts_file=segment-$i.ts
echo [$i] $ts_file
openssl aes-128-cbc -e -in $ts_file -out encrypted_${ts_file} -nosalt -iv $iv -K $enc_key
done
popd