Обрабатывать PUT в Node.js и передавать этот файл на страницу HTML? - PullRequest
0 голосов
/ 09 сентября 2018

Я делаю первоначальную попытку работы с потоками Node.js. Моя цель - получить удаленный файл, содержащий видео данные в Node.js и перенаправить их на веб-страницу ... где они могут быть просмотрены третьими лицами в Интернете. Удаленный файл видео должен быть сгенерирован GStreamer.

Удаленный файл использует следующую команду 'pipe' в GStreamer:

gst-launch videotestsrc ! x264enc ! souphttpclientsink location=<put the server location here>

Эта строка выше выполняет необходимое кодирование / упаковку и отправляет на указанный сервер с помощью запроса PUT.

Моя первоначальная попытка написать код для этого заключается в следующем:

Сервер:

var express = require('express');
var app = express();
var fs = require('fs');
var io = require("socket.io");  //web socket external module
var ioc = require('socket.io-client');
var ss = require('socket.io-stream');
var stream = ss.createStream();

io.sockets.on('connection', function (socket, username) {

// When the username is received it’s stored as a session variable 
//and the 'data' is streamed to the client...

 socket.on('new_client', function(username) {

 username = ent.encode(username);
 socket.username = username;

 //send-re-route data that is being PUT onto server (from GStreamer)
 fs.createReadStream('data').pipe(stream);

 });

});

app.put('/', (err, res) => {

var data = [];

 req.on('data', function(chunk) {
  data.push(chunk);

 }).on('end', function() {
    //at this point data is an array of Buffers
    //so Buffer.concat() can make us a new Buffer
    //of all of them together
    var buffer = Buffer.concat(data);
    console.log(buffer.toString('base64'));
 });

});  //handle the INCOMING "PUT" request (i.e. the GStreamer "Soup" file)

HTML:

<!DOCTYPE html>
<html>
<script src="/socket.io/socket.io.js"></script>
<script src="/js/socket.io-stream.js"></script>

    <p> Video Stream Test </p>
    <body>

    <script>

        // Connecting to socket.io
        var socket = io.connect('http://localhost:8080');

        // The username is requested, sent to the server and displayed in the title
        var username = prompt('What\'s your username?');
        socket.emit('new_client', username);
        document.title = username + ' - ' + document.title;


            <video width="640" height="480" controls>
            <source src="http://localhost:8080" type="video/webm" codecs="vp8.0">
            Your browser does not support the video tag.
            </video>

    </script>
    </body>
</html> 

Я прошу помощи у экспертов в сообществе, которые могут дать рекомендации относительно того, кем я могу быть делать неправильно с кодом, который я написал. Поскольку это моя первая попытка, мой код более правильно считается схематичным.

Я не знаю, будет ли код, как я его написал, работать так, как предназначено для «чтения» данных из запроса PUT, а затем перенаправить на страницу HTML.

Как можно видеть, у меня возникла путаница относительно получения данных в запросе PUT и их потоковой передачи / перенаправления. Кроме того, я совсем не уверен, как настроить HTML для правильного приема / отображения видеофайла. Я намеренно не поместил 'emit' в HTML, потому что я просто хочу отобразить то, что получено, поэтому я не думаю, что это необходимо. Любые предложения будут приветствоваться. Я благодарю вас заранее.

...