HLS加密、解密细节

加密:使用FFmpeg进行视频文件切割转m3u8索引文件(ts文件)并AES-128加密;

解密:索引m3u8文件含有获取解密匙URI,大致如下:
#EXT-X-KEY:METHOD=AES-128,URI=“https://priv.example.com/key.php?r=53”
URI部分就是去获取解密匙的http请求,进行边解密边播放。
URI可以加token进行权限控制。

加密解密原理参考:https://blog.csdn.net/coloriy/article/details/47295499?utm_source=blogxgwz9
使用ffmpeg将视频切片并加密参考:https://blog.csdn.net/zyxzj/article/details/104520298
java调用ffmpeg开源项目(maven引入,免安装FFmpeg):https://github.com/a-schild/jave2

//java调用ffmpeg开源项目:https://github.com/a-schild/jave2
//使用FFmpeg命令如下
FFMPEGLocator locator = new DefaultFFMPEGLocator();
FFMPEGExecutor ffmpeg = locator.createExecutor();
ffmpeg.addArgument("some i need self operation here");
ffmpeg.execute();
ffmpeg.destroy();

使用ffmpeg将视频切片并加密:
前提条件,需要有ffmpeg,最新版格式工厂安装后,会自动装上ffmpeg
在这里插入图片描述

新建一个记事本,取名enc.key(名字可以随便取),添加16个字节的秘钥,如

qwertyuiop123456

新建一个文件,enc.keyinfo,添加如下内容

http://localhost:8080/enc.key
enc.key

这里需要把enc.key和enc.keyinfo放在同一目录下

在当前目录运行cmd或者powershell

执行

ffmpeg -y -i video.mp4 -hls_time 12 -hls_key_info_file enc.keyinfo -hls_playlist_type vod -hls_segment_filename "file%5d.ts" video.m3u8

解释:

video.mp4 --需要处理的视频

-hls_time 12 --将分片时长设置为12秒

-hls_segment_filename “file%5d.ts” --设置ts文件格式化名称

video.m3u8 --m3u8文件名

生成后,将所有文件移动到本地搭建的tomcat中,方便测试

同时,将enc.key也放到本地服务中,保证KeyUrl可以访问:http://localhost:8080/enc.key,这样一来,m3u8就可以在支持网络串流的播放器中播放了,这里推荐使用VLC media player,播放时,m3u8文件会自动寻找秘钥keyUrl

在这里插入图片描述