前言

最近有个需求,需要将服务器视频资源进行加密提供给客户端播放,防止用户盗用视频。

常用的加密方式

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 加密相关推荐

  1. ffmpeg 视频转ts切片 生成m3u8视频播放列表

    近期做视频点播,要求将视频文件切片成ts文件.经搜索得到以下两个命令,可完成这个任务. 一  首先将视频文件转为视频编码h264,音频编码aac格式的mp4文件       1.可以预先使用ffpro ...

  2. FFMPEG将视频切片成ts文件并对ts文件进行ASE加密,并合并成M3U8操作方法

    环境:centos7 开发语言:php 框架:视频转码服务系统 生成ASE加密文件需要用到的命令: #!/bin/sh BASE_URL=${1:-'.'} openssl rand 16 > ...

  3. Spring boot视频播放(解决MP4大文件无法播放),整合ffmpeg,用m3u8切片播放。

    一.首先说一下,不超过500M的视频如何提供给前端,这种方式比较快速,但是对前端不友好,特别大的视频文件,浏览器无法播放. 下面是Java代码实例. 这种方式不需要引入依赖.首先进行配置 import ...

  4. ffmpeg视频截取切片

    通过segment_format指定切片文件的格式 ffmpeg -re -i input.mp4 -c copy -f segment -segment_format mp4 test_outpou ...

  5. 【FFmpeg性能测试】Linux Centos 4核8G使用FFmpeg配置视频切片,转码性能实测及教程

    测前说明 随着媒体流的技术增长,m3u8在直播和点播行业成为主流,但因视频资源都是整体文件,需要自行或使用高额的第三方切片,所以在这里为大家测试一下入门级服务器的切片和转码性能,供大家参考和学习到底是 ...

  6. linux将ts文件合并,生成ts文件 Linux下生成HLS所需的.ts和.m3u8文件

    要想利用HLS来实现视频的播放,就得需要将一个完整的视频文件切割成多个ts视频流,然后利用m3u8的索引文件来播放. 安装ffmpeg $ apt-get install ffmpeg $ apt-g ...

  7. ffmpeg生成hls直播流

    ffmpeg生成hls流 1.nginx搭建Http服务器 配置nginx-win-rtmp.conf文件:这个配置可以进行推rtmp流,也可以推hls的流.配置中追加 rtmp {applicati ...

  8. 正常情况下ffmpeg生成moov是在mdat写完成之后写入

    可以分析MP4封装格式的工具比较多除了FFmpeg之外,还有一些常用工具,例如Elecard Stream Eye.MP4BOX.mp4info等:下面简单介绍一下这几款常见工具: 8.1 Eleca ...

  9. ffmpeg生成hls点播

    ffmpeg生成hls点播 视频源文件test.mp4 ffmpeg -i test.mp4 -c copy -f segment -segment_list test.m3u8 test_%d.ts ...

  10. 20221122非累加的m3u8的ts切片列表的补全步骤

    20221122非累加的m3u8的ts切片列表的补全步骤 2022/11/22 19:07 https://apppy87xs3b3950.h5.xiaoeknow.com/v2/course/ali ...

最新文章

  1. 基于机器学习的文本分类!
  2. 008_setting指令
  3. 2019年暑假慈溪集训(更新ing)
  4. RocketMQ性能压测分析(转载)
  5. ThinkPHP6项目基操(18.实战部分 表单令牌Token 防CSRF)
  6. LQR 离散与连续问题
  7. async 与 await
  8. 伪静态页面在iis7.0中的配置
  9. gcc详解以及静态,动态库的生成 2
  10. Weblogic下载安装以及部署
  11. WIN7 安装VS2005
  12. ubuntu 黑体_Ubuntu 10.04下安装字体最简单的方法
  13. linux重装系统驱动,linux系统下安装驱动方法
  14. U盘快捷方程病毒 iexplore.vbs
  15. zui之0001 npm install zui
  16. 2-1个人小程序注册
  17. iOS中延时执行(睡眠)的几种方法
  18. PKI CA RA KMC
  19. mysql字段掩码_什么叫掩码
  20. Excel中如何连续使用格式刷

热门文章

  1. 极米H5搭载全新CCB流明,树电影色彩亮度新标杆
  2. SafeTpack — 基于 AURI 2G 实现功能安全目标
  3. 从游戏AI到自动驾驶,一文看懂强化学习的概念及应用
  4. Mstar 平台背光时序调试
  5. 进击zheng项目zheng-umps-server
  6. CentOS7安装Teamviewer
  7. u3d计算机获取键盘输入,Unity 中的键盘输入
  8. 京东方高级副总裁姜幸群:AIoT技术赋能企业物联网转型
  9. OllyDBG V1.10聆风听雨汉化版
  10. 通达信大资金进出指标公式