fluent-ffmpeg通过rtsp来截图

记录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)有需要再做补充

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值