我正在做一个加密项目
视频,我对程序有一些疑问。
我使用命令将mp4
转码为HLS
,其ts
段持续时间约为10秒。
首先,我需要使用数据库中的 key 对这些视频进行加密。然而,
我不知道是否使用ffmpeg进行加密。
第二,如果加密可以在没有ffmpeg的情况下工作,那我该怎么办?我在google中搜索过,其中包含类似openssl/aes的内容,但是
没有任何详细步骤可供我遵循,即使是ffmpeg链接也是如此:
http://www.ffmpeg.org/ffmpeg-all.html#srtp
有人可以教我如何加密视频吗?谢谢你。
最佳答案
是的,您可以使用ffmpeg
做到这一点。您需要将 key 从数据库写入文件,例如video.key
。
您需要第二个文件,我们将其命名为key_info
,这是 key 信息文件。它具有以下格式:
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
关于encryption - FFMPEG加密,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32734578/