想达到的目的:将一个mp4视频文件切割为多个ts片段,并在切割过程中对每一个片段使用 AES-128 加密,最后生成一个m3u8的视频索引文件;

电脑环境 Fedora,已经安装了最新的ffmpeg;

如果要加密,首先准备好一下两个东西:


加密用的 key


openssl rand  16 > enc.key ( 生成一个enc.key文件  )



另一个是 iv


openssl rand -hex 16  ( 生成一段字符串,记下来)



新建一个文件 enc.keyinfo 内容格式如下:


Key URI  # enc.key的路径,使用http形式

Path to key file # enc.key文件

IV # 上面生成的iv



几个例子:


http://localhost/video/enc.key
enc.key
48c674428c1e719751565ad00fe24243



最后重点来了


ffmpeg -y \

-i test.mp4 \

-hls_time 12 \ # 将test.mp4分割成每个小段多少秒

-hls_key_info_file enc.keyinfo \

-hls_playlist_type vod \ # vod 是点播,表示PlayList不会变
-hls_segment_filename "file%d.ts" \ # 每个小段的文件名

playlist.m3u8 # 生成的m3u8文件



生成的m3u8文件可以通过大部分播放器直接播放


dplayer.zip




想达到的目的:将一个mp4视频文件切割为多个ts片段,并在切割过程中对每一个片段使用 AES-128 加密,最后生成一个m3u8的视频索引文件;

电脑环境 Fedora,已经安装了最新的ffmpeg;

如果要加密,首先准备好一下两个东西:


加密用的 key


openssl rand  16 > enc.key ( 生成一个enc.key文件  )



另一个是 iv


openssl rand -hex 16  ( 生成一段字符串,记下来)



新建一个文件 enc.keyinfo 内容格式如下:


Key URI  # enc.key的路径,使用http形式

Path to key file # enc.key文件

IV # 上面生成的iv



几个例子:


http://localhost/video/enc.key
enc.key
48c674428c1e719751565ad00fe24243



最后重点来了


ffmpeg -y \

-i test.mp4 \

-hls_time 12 \ # 将test.mp4分割成每个小段多少秒

-hls_key_info_file enc.keyinfo \

-hls_playlist_type vod \ # vod 是点播,表示PlayList不会变
-hls_segment_filename "file%d.ts" \ # 每个小段的文件名

playlist.m3u8 # 生成的m3u8文件



生成的m3u8文件可以通过大部分播放器直接播放


dplayer.zip