使用fluent-ffmpeg将完整视频文件转码切片为.ts .m3u8文件以实现hls流媒体传输

如果你不相信努力和时光,那么成果就会是第一个选择辜负你的。不要去否定你自己的过去,也不要用你的过去牵扯你现在的努力和对未来的展望。不是因为拥有希望你才去努力,而是去努力了,你才有可能看到希望的光芒。使用fluent-ffmpeg将完整视频文件转码切片为.ts .m3u8文件以实现hls流媒体传输,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

使用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.bmabk.com/index.php/post/209104.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!