博客 分类专栏 专题 成员
H5播放视频(二)使用ffmpeg 对mp4转.m3u8,ts 实现视频切片
2022-01-25 12:05:39
分类专栏: Java

前言

上一篇将了H5如何播放.m3u8文件 H5播放.m3u8视频src 为blob,这一篇讲下如何将常见的大视频文件比如mp4转为.m3u8文件。
如果不将视频切割,直接返回给客户端一个.mp4的文件,小文件还好,如果是一个几个G的大文件,服务器压力大,占带宽,而且视频轻易就被下载。切割成一个个很小的文件可以减轻带宽,服务器压力,同时也为下载原视频增加了难度。通过一些加密手段,就可以进一步增加视频下载的难度了。

ffmpeg 媒体处理神奇

ffmpeg 目前市面上用得最多的媒体处理工具,liunx,windows版本都有,今天我们就用它来切割mp4文件

安装ffmpeg

首先到官网下载 官网 或者这里下载 点击下载

下载解压后,配置好环境变量
开启doc,执行ffmpeg
image.png
出现上图说明ffmpeg已经配置好

切割视频

准备一个视频,打开doc,切换到该目录
image.png

生成.ts

ffmpeg -y -i test.mp4  -vcodec copy -acodec copy -vbsf h264_mp4toannexb test_ts.ts

image.png
此时会生成一个.ts的文件

生成索引文件.m3u8 和切片.ts

ffmpeg -i test_ts.ts -c copy -map 0 -f segment -segment_list test_m3u8.m3u8 -segment_time 10 10s_%3d.ts 

image.png
可以看到 生成.m3u8索引文件,还有很多分片.ts文件。ts文件可以直接打开播放

-segment_list 索引文件名
-segment_time 10 每个分片时长  这个貌似不是特别的精准
10s_%3d.ts 索引文件前缀和索引编号这里是3个0补全

一步到位

ffmpeg -i test.mp4 -c:v h264 -flags +cgop -g 30 -hls_time 10 -hls_list_size 0 -threads 1 -hls_segment_filename  index%3d.ts index.m3u8

image.png
一步到位就一个命令,但是耗时比较长,推荐使用第一种用两步完成,也可能是我对ffmpeg不熟悉,是不是哪个参数设置的不对,有ffmpeg高手可以指点一下。

更多ffmpeg参数可以自行搜索,这里重点不是ffmpeg,只是简单的介绍ffmpeg如何切割视频生成.m3u8 索引文件,还可以对切割文件加密生成key,没有key直接打开切片文件是无法打开的。

我们生成了.m3u8,和.ts切片,然后配合h5播放器,就可以实现本地视频播放了。