使用fluent-ffmpeg将完整视频文件转码切片为.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分片
本文来自博客园,作者:杰哥来了,转载请注明原文链接:https://www.cnblogs.com/yuanjiejie/p/17761107.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)