使用节点JS保存AR-Drone 2.0videostream

我试图find一种方法来保存从AR-Dronestreamvideo时产生的.png图像。 以下使用felixge ar-drone模块的代码将video成功地传输到浏览器,但是我希望拍摄该提要的屏幕截图并将其保存到我的驱动器以进行实时图像分析。

我试图使用屏幕截图模块来保存当我连接到主机时在浏览器中显示的内容,但是所有这些都保存了我指定大小的空白图像(请参阅下面的代码)。 有没有更好的方法来保存AR-Dronevideo的静帧(不保存.h264video源)?

谢谢。

// Run this to receive a png image stream from your drone. var arDrone = require('ar-drone'); //Call AR-drone module var http = require('http'); //Allows video to be displayed to browser var client = arDrone.createClient(); //Create AR-drone client--->IP address, video frame rate, image sizing var pngStream = client.getPngStream(); //Fetch real-time video feed from quad var fs = require('fs'); var screenshot = require('node-webkit-screenshot'); client.config('general:navdata_options', 777060865); //turn on GPS client.config('video:video_channel',3); //Switch feed to downward-facing camera var lastPng; pngStream .on('error', console.log) .on('data', function(pngBuffer) { lastPng = pngBuffer; //Store latest png still frame }); var server = http.createServer(function(req, res) { if (!lastPng) { res.writeHead(503); res.end('Did not receive any png data yet.'); return; } res.writeHead(200, {'Content-Type': 'image/png'}); res.end(lastPng); }); server.listen(8080, function() { console.log('Serving latest png on port 8080 ...'); }) screenshot({ url : 'http://localhost:8080', width : 640, height : 360 }) .then(function(buffer){ fs.writeFile('Drone.png', buffer, function(){ console.log('Screenshot saved') ; screenshot.close(); }); }); 

PngStream已经为您提供了对PNG图像的访问,您只需将其写入文件即可。 以下代码显示了如何将帧每5000毫秒保存到一个文件中:

 var arDrone = require('ar-drone'); var client = arDrone.createClient(); var fs = require('fs'); var pngStream = client.getPngStream(); var frameCounter = 0; var period = 5000; // Save a frame every 5000 ms. var lastFrameTime = 0; pngStream .on('error', console.log) .on('data', function(pngBuffer) { var now = (new Date()).getTime(); if (now - lastFrameTime > period) { frameCounter++; lastFrameTime = now; console.log('Saving frame'); fs.writeFile('frame' + frameCounter + '.png', pngBuffer, function(err) { if (err) { console.log('Error saving PNG: ' + err); } }); } }); 

以下是运行代码时的样子:

 [wiseman@Intercept node-ar-drone (master)]$ node temp.js Saving frame Saving frame Saving frame [...] 

运行frame1.pngframe2.pngframe3.png保存的帧。 这里是frame1.png

在这里输入图像描述

我也用向下的相机testing了代码,它也工作得很好。