如何用fluent-ffmpeg将视频切片成ts并生成m3u8实现HLS流传输?

摘要:使用fluent-ffmpeg将完整视频文件转码切片为.ts .m3u8文件以实现hls流媒体传输,服务端保存ts切片片段和m3u8列表描述文件。使用该传输方式降低了视频网站加载延迟,提高了播放效率,hls流媒体传输为目前各大影视视频网站采
使用fluent-ffmpeg将完整视频文件转码切片为.ts .m3u8文件以实现hls流媒体传输 安装 项目内安装: npm i ffmpeg npm i fluent-ffmpeg 外部环境安装: 官网下载ffmpeg,将文件bin目录添加为Path系统环境变量 C:\Users\lenovo\Desktop\ffmpeg-6.0-essentials_build\ffmpeg-6.0-essentials_build\bin 编写JS脚本 /** * 依赖库/包: ffmpeg fluent-ffmpeg。 * 功 能: 实现hls流媒体播放,视频切片为大量.ts文件(视频)和单个.m3u8(列表描述文件)。 * 服务器中存储大量切片文件,客户端请求.m3u8列表文件实现对切片的加载 。 * test、testhls 目录和该hll.js文件为该功能的模块。 * * @time 23/10/11 */ const ffmpeg = require('fluent-ffmpeg') const inputFile = './assets/videosource/1001.mp4' // 输入文件目录 const outputPath = './assets/videosource/1001' // 输出文件目录 function hlsSlice(inputFile, outputPath) { const command = ffmpeg(inputFile) // command.videoCodec('libx264') // 设置视频编解码器 command.outputFormat('hls') // 输出视频格式 command.outputOptions('-hls_list_size 0') // -hls_list_size n:设置播放列表保存的最多条目,设置为0会保存有所片信息,默认值为5 command.outputOption('-hls_time 5') // -hls_time n: 设置每片的长度,默认值为2。单位为秒 command.output(outputPath + '/playlist.m3u8') // 输出文件 command.on('progress', (progress) => { // 监听切片进度 let number = Number(progress.percent).toFixed(2) console.log(`Processing: ${number}%`) }) command.on('end', () => { // 监听结束 console.clear() console.log(`${inputFile}:视频切片已完成`) }) command.run() // 执行 } hlsSlice(inputFile, outputPath) 客户端请求 注意:服务端.ts .m3u8文件应当在同一目录下 客户端请求对应视频文件的.m3u8文件即可实现hls加载ts分片