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
