想把 rtsp 的直播流转成 一帧一帧的图片
通过命令行可以实现
ffmpeg -i "rtsp://admin:123456@192.168.0.185/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:123456@192.168.0.185/main/Channels/'
// ffmpeg -i "rtsp://admin:123456@192.168.0.185/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 获取到 不写入文件中
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.