/ / Записване на AR-Drone 2.0 видеопоток с помощта на Node JS - javascript, node.js, png, ar.drone

Записване на AR-Drone 2.0 видео поток с помощта на възел JS - javascript, node.js, png, ar.drone

Опитвам се да намеря начин да спася.png изображения, произведени при поточно видео от AR-Drone. Следващият код, който използва ar-drone модула от felixge, успешно предава видеото в браузър, но бих искал да направя екранна снимка на тази емисия и да я запиша в устройството ми за анализ на изображения в реално време.

Опитвам се да използвам модула на екрана, за дазапишете това, което се появява в браузъра ми, когато се свържа с хоста, но всичко това е да запишете празно бяло изображение с размера, който посочвам (вижте по-долу код). Има ли по-добър начин да запазите неподвижен кадър от видеоклипа AR-Drone (НЕ запишете .h264 видео емисия)?

Благодаря ти.

 // 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();
});
});

Отговори:

2 за отговор № 1

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.png, frame2.png и frame3.png, Тук ", а frame1.png:

въведете описанието на изображението тук

Тествах кода и с обърната надолу камера и той работеше също толкова добре.