记录fluent-ffmpeg的使用方法
(1)截图 直接上代码
get_camera_snapshot(rtsp) {
return new Promise((resolve, reject) => {
try {
let chunks = [];
let size = 0;
let proc = ffmpeg(rtsp)
.withFrames(1)
.inputOptions("-stimeout 5000000")
.inputOptions("-rtsp_transport tcp")
.noAudio()
.format('mjpeg')
.on('end', async function () {
let data = Buffer.concat(chunks, size);
let base64_img = data.toString('base64');
resolve({
camera_rtsp: rtsp,
image_data: base64_img
});
})
.on('error', function (err) {
console.log('an error happened on get_camera_snapshot:' + err.message);
resolve(false);
})
let ffstream = proc.pipe();
ffstream.on('data', function (chunk) {
chunks.push(chunk);
size += chunk.length;
});
} catch (error) {
this.error_log('---get camera snapshot failed---', error);
resolve(false);
}
})
}
(2)验证rtsp地址能否成功取到流
check_rtsp_stream(rtsp) {
return new Promise((resolve, reject) => {
try {
let is_play = false;
let command = ffmpeg()
.input(rtsp)
.inputOptions("-stimeout 5000000")
.inputOptions("-rtsp_transport tcp")
.noAudio()
.videoCodec("copy")
.on("start", () => {
console.log("begin start...");
})
.on("codecData", () => {
console.log("codec data....");
is_play = true;
command.kill();
resolve(true);
})
.on("error", (err) => {
if (!is_play) {
resolve(false);
}
})
.format("avi")
.save('./test.avi');
} catch (error) {
this.error_log('---check rtsp stream failed---', error);
resolve(false);
}
});
}
(3)有需要再做补充