使用 FFmpeg 生成 ts 切片并使用 AES-128 加密
前言
最近有个需求,需要将服务器视频资源进行加密提供给客户端播放,防止用户盗用视频。
常用的加密方式
m3u8切片加密(本文使用)
各种在线播放视频的网站广泛使用的技术,切片同样是使用AES加密算法。
优点:各种浏览器,手机,小程序都能兼容,通用性很好。
缺点:由于是公开的算法,还原也十分简单,有很多影音嗅探工具能直接下载还原,加密效果很弱,防小白可以,聊胜于无。
防翻录:无
文件流加密
采用异或或者AES等文件流加密方式,对文件数据进行处理。播放时动态解密相应的数据到内存再播放。
优点:加密和解密速度都很快。
缺点:必须使用专用的播放器才能解密,加密强度较弱,专业破解人员可写工具瞬间提取。
防翻录:通过播放器,APP实现
视频逐帧转码加密
加密强度最高但同时也是技术实现最麻烦的一种。软件需要读取源视频内部编码,逐帧把视频编码转为私有视频编码,通常是基于H264来改写为私有协议(即非标准H264算法)。
优点:由于采用私有视频编码协议,除非熟知视频内部编码规则,否则绝无破解或提取的可能,安全性极高。但这种加密方式对开发者技术要求较高,比较少公司使用。
缺点:必须使用专用的播放器才能解密,加密过程类似于视频转码,需要消耗比较长的加密时间。
防翻录:通过播放器,APP实现
环境要求
VLC播放器
openssl
ffmpeg
原理
核心原理其实就是讲解了一个视频源从正常的mp4
格式如何变为加密后的m3u8
文件+ts
文件+key
秘钥文件,之后使用vlc
播放。
实验
使用 OpenSSL 生成密钥
openssl rand 16 > [密钥存放位置]
例如: openssl rand 16 > D:\openssl_key\encrypt.key
生成IV
openssl rand -hex 16
会生成一串字符串,后面会用到
本次案例生成的字符串: 10c27a9e3fa363dfe4c44b59b67304b3
编写keyinfo文件
http://localhost:8000/encrypt.key
D:\openssl_key\encrypt.key
10c27a9e3fa363dfe4c44b59b67304b3
一共有三段信息
第一段:解密文件路径,必须是URI,用来解密视频文件
第二段:是加密文件路径
第三段:之前生成的IV
FFmpeg 将视频切片且加密
ffmpeg -y -i D:\openssl_key\test.mp4 -c:v libx264 -c:a copy -f hls -hls_time 180 -hls_list_size 0 -hls_key_info_file D:\openssl_key\enc.keyinfo -hls_playlist_type vod -hls_segment_filename D:\openssl_key\file%d.ts D:\openssl_key\playlist.m3u8
命令参数解释
命令参数 | 解释 |
---|---|
-y | 不经过确认,输出时直接覆盖同名文件。 |
-c | 指定编码器 |
-c copy | 直接复制,不经过重新编码(这样比较快) |
-i | 指定输入文件 |
-title | 设置标题 |
-author | 设置作者 |
-copyright | 设置版权 |
-f | 强制设置输入输出的文件格式,默认情况下ffmpeg会根据文件后缀名判断文件格式 |
-hls_key_info_file | keyinfo文件路径 |
-hls_time | 每段文件的时间长度(单位:秒) |
-hls_list_size 0 | 索引播放列表的最大列数 默认5,0 为不限制 |
-hls_playlist_type vod | 表示当前的视频流并不是一个直播流,而是点播流 |
-hls_segment_filename | 输出 ts和m3u8 文件路径中间空格 ,例如:D:\openssl_key\ file%d.ts D:\openssl_key\playlist.m3u8 |
%d:表示一位数字,从0开始。
最终执行结果
最后生成的文件
m3u8 文件
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:183
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="http://localhost:8000/encrypt.key",IV=0x10c27a9e3fa363dfe4c44b59b67304b3
#EXTINF:182.625000,
file0.ts
#EXTINF:31.958333,
file1.ts
#EXT-X-ENDLIST
文件内容解析
#EXTM3U M3U8文件头,必须放在第一行;
#EXT-X-MEDIA-SEQUENCE 第一个TS分片的序列号,一般情况下是0,但是在直播场景下,这个序列号标识直播段的起始位置; #EXT-X-MEDIA-SEQUENCE:0
#EXT-X-TARGETDURATION 每个分片TS的最大的时长;
#EXT-X-TARGETDURATION:10 每个分片的最大时长是 10s
#EXT-X-ALLOW-CACHE 是否允许cache;
#EXT-X-ALLOW-CACHE:YES
#EXT-X-ALLOW-CACHE:NO 默认情况下是YES
#EXT-X-ENDLIST M3U8文件结束符;
#EXTINF extra info,分片TS的信息,如时长,带宽等;一般情况下是
#EXTINF:<duration>,[<title>] 后面可以跟着其他的信息,逗号之前是当前分片的ts时长,分片时长 移动要小于
#EXT-X-TARGETDURATION 定义的值;
#EXT-X-VERSION M3U8版本号
#EXT-X-DISCONTINUITY 该标签表明其前一个切片与下一个切片之间存在中断。下面会详解
#EXT-X-PLAYLIST-TYPE 表明流媒体类型;
#EXT-X-KEY 是否加密解析,
#EXT-X-KEY:METHOD=AES-128,URI="https://priv.example.com/key.php?r=52" 加密方式是AES-128,秘钥需要请求 https://priv.example.com/key.php?r=52 ,请求回来存储在本地;
总结
本篇文章简单的介绍了如何使用FFmpeg 将视频生成 ts 切片并使用 AES-128 加密。
windows 安装openssl
windows 安装 ffmpeg
使用 FFmpeg 生成 ts 切片并使用 AES-128 加密相关推荐
- ffmpeg 视频转ts切片 生成m3u8视频播放列表
近期做视频点播,要求将视频文件切片成ts文件.经搜索得到以下两个命令,可完成这个任务. 一 首先将视频文件转为视频编码h264,音频编码aac格式的mp4文件 1.可以预先使用ffpro ...
- FFMPEG将视频切片成ts文件并对ts文件进行ASE加密,并合并成M3U8操作方法
环境:centos7 开发语言:php 框架:视频转码服务系统 生成ASE加密文件需要用到的命令: #!/bin/sh BASE_URL=${1:-'.'} openssl rand 16 > ...
- Spring boot视频播放(解决MP4大文件无法播放),整合ffmpeg,用m3u8切片播放。
一.首先说一下,不超过500M的视频如何提供给前端,这种方式比较快速,但是对前端不友好,特别大的视频文件,浏览器无法播放. 下面是Java代码实例. 这种方式不需要引入依赖.首先进行配置 import ...
- ffmpeg视频截取切片
通过segment_format指定切片文件的格式 ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 test_outpou ...
- 【FFmpeg性能测试】Linux Centos 4核8G使用FFmpeg配置视频切片,转码性能实测及教程
测前说明 随着媒体流的技术增长,m3u8在直播和点播行业成为主流,但因视频资源都是整体文件,需要自行或使用高额的第三方切片,所以在这里为大家测试一下入门级服务器的切片和转码性能,供大家参考和学习到底是 ...
- linux将ts文件合并,生成ts文件 Linux下生成HLS所需的.ts和.m3u8文件
要想利用HLS来实现视频的播放,就得需要将一个完整的视频文件切割成多个ts视频流,然后利用m3u8的索引文件来播放. 安装ffmpeg $ apt-get install ffmpeg $ apt-g ...
- ffmpeg生成hls直播流
ffmpeg生成hls流 1.nginx搭建Http服务器 配置nginx-win-rtmp.conf文件:这个配置可以进行推rtmp流,也可以推hls的流.配置中追加 rtmp {applicati ...
- 正常情况下ffmpeg生成moov是在mdat写完成之后写入
可以分析MP4封装格式的工具比较多除了FFmpeg之外,还有一些常用工具,例如Elecard Stream Eye.MP4BOX.mp4info等:下面简单介绍一下这几款常见工具: 8.1 Eleca ...
- ffmpeg生成hls点播
ffmpeg生成hls点播 视频源文件test.mp4 ffmpeg -i test.mp4 -c copy -f segment -segment_list test.m3u8 test_%d.ts ...
- 20221122非累加的m3u8的ts切片列表的补全步骤
20221122非累加的m3u8的ts切片列表的补全步骤 2022/11/22 19:07 https://apppy87xs3b3950.h5.xiaoeknow.com/v2/course/ali ...
最新文章
- 基于机器学习的文本分类!
- 008_setting指令
- 2019年暑假慈溪集训(更新ing)
- RocketMQ性能压测分析(转载)
- ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)
- LQR 离散与连续问题
- async 与 await
- 伪静态页面在iis7.0中的配置
- gcc详解以及静态,动态库的生成 2
- Weblogic下载安装以及部署
- WIN7 安装VS2005
- ubuntu 黑体_Ubuntu 10.04下安装字体最简单的方法
- linux重装系统驱动,linux系统下安装驱动方法
- U盘快捷方程病毒 iexplore.vbs
- zui之0001 npm install zui
- 2-1个人小程序注册
- iOS中延时执行(睡眠)的几种方法
- PKI CA RA KMC
- mysql字段掩码_什么叫掩码
- Excel中如何连续使用格式刷