hls加密流生成之aes-128加密

本文详细介绍了HLS媒体流协议及其sample-aes加密方式,包括加密原理、环境准备、加密步骤以及如何进行本地和推流测试。通过实例演示了如何使用ffmpeg进行HLS流的加密,生成加密的m3u8播放列表,并提供了加密过程中的关键文件和命令解析。
摘要由CSDN通过智能技术生成

相关原创文章:

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.环境工具准备

  1. pc: ubuntu(可以是其他操作系统)
  2. openssl
  3. ffmpeg
  4. 一个视频

上述的工具请自行安装准备,安装方法不难,不在此文中详述。

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
  1. 运行命令
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
  1. 命令解析
  • -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.测试

  1. 本地测试

    可以使用ffmpeg直接播放:

    ffplay -i playlist.m3u8
    

    如果由于key uri的路径访问不了,可以将playlist.m3u8的URI="http://example.com/enc.key"改为URI="enc.key"

  2. 推流测试

    这个需要搭建hls推流环境,然后在客户端里使用播放器测试。

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值