【问题标题】:FFMPEG EncryptionFFMPEG 加密
【发布时间】:2015-12-20 11:25:56
【问题描述】:

我正在做一个加密项目 视频,我有几个关于程序的问题。

我使用命令将mp4 转码为HLSts 段持续时间约为 10 秒。

首先,我需要使用数据库中的密钥加密这些视频。然而, 我不知道是否使用 ffmpeg 进行加密。

第二,如果不用ffmpeg也可以加密,那我该怎么办呢?我在谷歌搜索过,其中包括类似 openssl / aes 但 我没有详细的步骤可以遵循,即使是 ffmpeg 链接: http://www.ffmpeg.org/ffmpeg-all.html#srtp

谁能帮我教我如何加密视频?谢谢你。

【问题讨论】:

    标签: encryption ffmpeg openssl aes http-live-streaming


    【解决方案1】:

    是的,您可以使用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
    

    【讨论】:

    • 运行命令后出现如下错误:Unrecognized option 'hls_key_info_file'。拆分参数列表时出错:找不到选项
    • @rickyma924 您可能使用的是过时版本的ffmpeg。从源代码构建它或获取package/static build。这是hls 文档的链接:ffmpeg.org/ffmpeg-formats.html#Options-2
    • @chovy 这是加密而不是解密。但是是的,您可以加密或解密实时 AES-128 HLS 流。
    • @chovy 无,您只需将其指向m3u8,它就会自动使用其中的EXT-X-KEY 信息。
    • @Whome 是的,它只是原始密钥,而不是 DRM。
    猜你喜欢
    • 2017-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-09
    • 2020-10-01
    • 2021-03-05
    • 1970-01-01
    相关资源
    最近更新 更多