将实时视频数据从客户端流传输到服务器,并在另一个客户端上显示

时间:2020-08-21 09:36:20

标签: node.js express raspberry-pi axios

我们正在尝试通过连接了树莓派cam2的raspberry pi 3创建实时视频流。到目前为止,我们已经设法将原始m264缓冲区从摄像机通过Axios传输到Express。但是我们不知道如何处理传入的数据以将其显示为实时视频流。

目标是在快递服务器上为另一个客户端创建树莓派cam的实时视频供稿。

欢迎任何帮助!

这就是我们在树莓派上拥有的东西:

const fs = require("fs")
const axios = require("axios")
const { StreamCamera, Codec, SensorMode } = require("pi-camera-connect");
 
var i = 0

const stream = async () => {
    const streamCamera = new StreamCamera({
        codec: Codec.H264,
        SensorMode: SensorMode.Mode7,
        fps: 30,
        width: 300,
        height: 200
    });

    const videoStream = streamCamera.createStream();
 
    await streamCamera.startCapture();
 
    // We can also listen to data events as they arrive
    videoStream.on("data", data => send(data));
};



function send(data) {

    console.log(i)

    i++;

    axios.post("http://192.168.60.100/video", {
        stream: data,
        index: i
    })
    .then (function(response) {
        console.log(response.data)
        console.log("sending now")
    }).catch(function(error) {
        console.log("error")
    })
}

stream();

这是我们的服务器:

const fs = require("fs")
var ffmpeg = require('fluent-ffmpeg');


//console clear
process.stdout.write('\033c');
console.log("Server started")

//server
const express = require("express")
const bodyParser = require('body-parser');
const { start } = require("repl");

const app = express()
app.use(bodyParser.urlencoded({ extended: true }));

app.listen(80, () => console.log("Listening"))
app.use(express.json({ limit: "1mb"}))


app.post('/video', (req, res) => {
    //res.setHeader('Content-Type', 'application/json');
    console.log("---------")
    stream = Buffer.from(req.body.stream)
    counter = req.body.index


    console.log(counter)
    caputure(stream)

    res.end("recieved")
})

function caputure(stream) {
    console.log(stream)
    
    var writeStream = fs.createWriteStream('./output.h264');

    stream.pipe(writeStream)

    writeStream.on('error', function (err) {
        console.log(err);
    });
}

0 个答案:

没有答案