NodeJS, OpenCV и потоковые изображения с использованием Net Socket

Моя конечная цель - потоковое видео с моего ноутбука на сервер. Я'я пытаюсь сделать это с помощью NodeJs на ноутбуке сервер. Я использую библиотеку OpenCV, чтобы захватить видео на ноутбуке и сохранить его в файл JPG. Затем я читаю файл и преобразую его в base64, чтобы можно было транспортировать его с помощью модуля Net.socket в Node. Это непрерывный процесс: захват, кодирование и отправка.

Вот код сервера для передачи только одного файла jpg:

var cv = require('opencv');
var fs = require('fs');
var net = require('net');
var camera = new cv.VideoCapture(0);
var server = net.createServer();
server.listen('50007', '127.0.0.1');

server.on('connection', function(socket){
    camera.read(function(image){
        image.save('original.jpg');

        fs.readFile('original.jpg', 'base64', function(err, image){
            socket.write(image, 'base64', function(){
                socket.end();
            });
        });
    });
});

На клиенте я зацикливаюсь, пока FIN не будет получен с сервера. Вот код клиента:

var net = require('net');
var fs = require('fs');
var client = new net.Socket();
var buffer ='';
client.setEncoding('base64');

client.connect('50007', '127.0.0.1', function(){
    console.log('Connecting to server...');
});

client.on('data', function(data){
    buffer += data;
});

client.on('end', function(){
    var dataBuffer = new Buffer(buffer, 'base64');
    fs.writeFile('copy.jpg', dataBuffer, function(err){
        if(err){
            console.log(err);
        }
    });
});

Проблема в том, что на самом деле все изображение не отправляется. Когда я открываю полученный файл, copy.jpg, в нижней части всегда отсутствует фрагмент.

В финальной версии цель состоит в том, чтобы отправлять один JPG за другим и разграничивать конец каждогоJPG» с помощью ключевого слова, такого какENDOFFILE», Я попытался сделать это, добавив ключевое словоENDOFFILE» на мое изображение в кодировке base64 перед отправкой, но на приемном конце, который действительно облажался.

Пример расширенного сервера:

fs.readFile('original.jpg', 'base64', function(err, image){
    image += 'EndOfFile';
    socket.write(image, 'base64');
}); 

На стороне клиента цикл будет проверять каждый кусок данных на наличие ключевого слова, и если он найдет его, то все, что находится в буфере, будет записано в файл, и сброс буфера будет готов к следующему файлу.

Образец Advanced ClientI '

client.on('data', function(data){
    if(data.indexOf('EndOfFile') > 0){
        buffer += data.substr(0, data.indexOf('EndOfLine'));
        var dataBuffer = new Buffer(buffer, 'base64');

        fs.writeFile('copy.jpg', dataBuffer, function(err){
            if(err){
                console.log(err);
            }
        });

        buffer = '';
    } else {
        buffer += data;
    }
});

Я получил это для работы в Python, поэтому я думаю, что моя логика верна, но яМне не так удобно в NodeJS.

Если бы кто-то мог сказать мне, если это нормальный способ сделать это и где я мог ошибиться.

Заранее спасибо!

Ответы на вопрос(1)

Ваш ответ на вопрос