apiRouter.js 2.64 KB
const express = require('express');
const fs = require('fs');
const ffmpeg = require('ffmpeg');
const request = require('request')

const router = express.Router();
const path = require('path');
//================================================================

router.post('/videoResult', function (req, res) {

    try {
        let preview = req.body[0].preview;

        str = preview.replace(/^data:(.*?);base64,/, "");
        str = str.replace(/ /g, '+');


        fs.writeFileSync(`./data/temp.mp4`, str, 'base64', function (err) {
            if (err) throw err;
            console.log("video saved");
            return;
        })

        let process = new ffmpeg(`./data/temp.mp4`);


        detectedImgFile = "test.jpg"; // null로 바꿀 것
        process.then(function (video) {
            video.fnExtractFrameToJPG(__dirname + "/data",
                {
                    every_n_seconds: 1,
                    file_name: 'frame_%s'
                }, function (error, files) {
                    if (!error)
                        console.log('###1 Frames =>' + files);
                    console.log("###2 갯수 => " + files.length)


                    console.log("###3 첫번째 파일 => " + files[0]); // 마지막 파일은 영상임
                    let base64str = base64_encode(files[0]);
                    console.log("###4 base64str => " + base64str);
                    console.log("##### for")
                    for(var i=0;i<files.length-1;i++){
                        request.post({
                            url: 'http://101.101.210.73/process',
                            form: {
                                'data': base64_encode(files[0])
                            },
                            json: true
                        }, (err, response, body) => {
                            console.log(body)
                        })
                    }
                    /**
                     * TODO
                     * 반복문돌면서 각 프레임 파이썬 api 요청하고 응답받아서
                     * 하나라도 true나오면 프론트에 감지된 이미지파일주소 응답
                     */
                    detectedImgFile=null;
                }
            )
        })

    } catch (err) {
        console.error(err);
    }

    return res.json({ data: detectedImgFile });
});

function base64_encode(file) {
    // read binary data
    var bitmap = fs.readFileSync(file);
    // convert binary data to base64 encoded string
    return new Buffer(bitmap).toString('base64');
}

module.exports = router;