相关原创文章:
1.hls
HTTP实时流(也称为HLS)是一种基于HTTP的媒体流通信协议,由Apple Inc.制定。它类似于MPEG-DASH,它的工作原理是将整个流分解为一系列基于HTTP的小文件下载,每次下载都加载一个分片。当播放流时,客户端可以从多个不同备选流中选择,这些备选流包含不同编码速率的码流,从而允许流会话适应可用的数据速率。在流会话开始时,HLS下载一个扩展的M3U播放列表,其中包含各种可用子流的元数据。
2.加密方式
hls可以允许码流加密和不加密,其中加密方式有几种:aes-128, sample-aes, drm等。
不同的加密方式原理不一样,生成的方式也不一样,下面简述的是aes-128加密流的生成:
3.aes-128加密原理
aes-128加密是对分片进行整个加密,加密得到的分片流是检查不出媒体信息的。即相当于将整个文件进行加密,不区分媒体头之类的定义。
4.环境工具准备
- pc:
ubuntu
(可以是其他操作系统) openssl
ffmpeg
- 一个视频
上述的工具请自行安装准备,安装方法不难,不在此文中详述。
5.加密步骤
5.1 准备加密密钥
$ openssl rand 16 > enc.key
命令解释:随机生成一个16字节(128位)的数据作为密钥,保存到enc.key中,名字可以取其他。
5.2 生成IV(可选)
$ openssl rand -hex 16
a95ce0bac3652feab02c83f233aec77d
这个值a95ce0bac3652feab02c83f233aec77d
需要记下来。
5.3 创建enc.info文件
创建一个文件来记录key的信息,文件名可以起其他名字,格式如下:
Key URI
Path to key file
IV (optional)
解析:
-
Key URI: 指的key的位置,即放置enc.key的路径,一般为服务器的路径,这个路径会在m3u8里。
这个url在测试时,需要填写正确的路径,本地测试时,可以不用服务器的路径
-
Path to key file:这里一般都是key的文件名
-
IV (optional):可选,将之前生成的值填到这里
例如:
enc.info的内容为:
http://example.com/enc.key
enc.key
a95ce0bac3652feab02c83f233aec77d
5.4 ffmpeg加密
以上准备好了,那么当前工作文件夹下应当有这些文件:
.
├── enc.info
├── enc.key
└── test.mp4
0 directories, 3 files
- 运行命令:
ffmpeg -y \
-i test.mp4 \
-hls_time 9 \
-hls_key_info_file enc.info \
-hls_playlist_type vod \
-hls_segment_filename "index%d.ts" \
playlist.m3u8
- 命令解析:
-i
:输入视频-hls_time
: 分成几个分片,这里是9-hls_key_info_file
:加密信息文件-hls_playlist_type
:这个是可选的,有VOD, EVENT, LIVE, 点播一般是vod-hls_segment_filename
:分片名字- 输出结果:playlist.m3u8,可以是其他名字
博文为ganqiuye原创,转载请附上原文出处链接和本声明。
结果:
.
├── enc.info
├── enc.key
├── index0.ts
├── index10.ts
├── index11.ts
├── index12.ts
├── index13.ts
├── index1.ts
├── index2.ts
├── index3.ts
├── index4.ts
├── index5.ts
├── index6.ts
├── index7.ts
├── index8.ts
├── index9.ts
├── playlist.m3u8
└── test.mp4
0 directories, 18 files
其中:playlist.m3u8内容:
#EXTM3U
#EXT-X-VERSION:3
#EXT-X-TARGETDURATION:15
#EXT-X-MEDIA-SEQUENCE:0
#EXT-X-PLAYLIST-TYPE:VOD
#EXT-X-KEY:METHOD=AES-128,URI="http://example.com/enc.key",IV=0xa95ce0bac3652feab02c83f233aec77d
#EXTINF:9.958333,
index0.ts
#EXTINF:10.416667,
index1.ts
#EXTINF:10.416667,
index2.ts
#EXTINF:10.416667,
....
6.测试
-
本地测试
可以使用ffmpeg直接播放:
ffplay -i playlist.m3u8
如果由于key uri的路径访问不了,可以将playlist.m3u8的
URI="http://example.com/enc.key"
改为URI="enc.key"
-
推流测试
这个需要搭建hls推流环境,然后在客户端里使用播放器测试。