想把 rtsp 的直播流转成 一帧一帧的图片
通过命令行可以实现
ffmpeg -i "rtsp://admin:[email protected]/main/Channels/" -y -f image2 img%03d.jpg
在 nodejs 中使用 fluent-ffmpeg 实现了
const ffmpeg = require('fluent-ffmpeg')
const fs = require('fs')
let ffmpegPath = 'ffmpeg/ffmpeg.exe'
ffmpeg.setFfmpegPath(ffmpegPath)
let url = 'rtsp://admin:[email protected]/main/Channels/'
// ffmpeg -i "rtsp://admin:[email protected]/main/Channels/" -y -f image2 img%03d.jpg
ffmpeg(url)
.addInputOption('-rtsp_transport', 'tcp', '-buffer_size', '102400') // 这里可以添加一些 RTSP 优化的参数
// .outputOptions(['-vframes 1', '-fflags nobuffer', '-tune zerolatency']) // 每帧一张图
.videoCodec('png') // 输出 PNG 格式图片
.on('error', function (err, stdout, stderr) {
console.log('错误信息', err.message);
})
.on('end', function () {
console.log('结束' ,'Screenshots taken');
})
.on('codecData', function () {
console.log('codecData 事件', 'Stream codecData.')
})
.output('img%03d.jpg').format("image2").noAudio().run()
但是上面两种方式都会直接生成图片 有没有办法把图片的 buffer 获取到 不写入文件中