在 NodeJS 中从客户端到服务器的视频流

Video stream from client to server in NodeJS

我目前正在开发一个应用程序,用于在 NodeJS 中将视频源从客户端流式传输到服务器。服务器端代码如下所示

server.js

const express = require('express')
const app = express()
const morgan = require('morgan')
const server = require('http').Server(app)
const io = require('socket.io')(server)
const auth = require('./routes/auth')
const video = require('./routes/videoproc')(io)


const bodyParser = require('body-parser')


app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
app.use(morgan('dev'))
app.use("/users", auth)
app.use("/exam", video);


server.listen(3000)

videoproc.js

const express = require('express')
const video = express.Router()
const ss = require('socket.io-stream')
const fs  = require('fs')
const path = require('path')

module.exports = (io) => {
    video.post('/video', (req, res) => {
        io.on('connection', (socket) => {
            ss(socket).on('video', (stream, data) => {
                const fileName = path.basename('test')
                stream.pipe(fs.createWriteStream(fileName))
            })
        })
    })
    return video
}

这是客户端代码

var io = require('socket.io-client');
var ss = require('socket.io-stream');
var fs = require('fs')
var socket = io.connect('http://localhost:3000/exam/video/');
var stream = ss.createStream();
var filename = './test.webm';
 
ss(socket).emit('video', stream, {name: filename});
fs.createReadStream(filename).pipe(stream);

作为测试,我已将视频源发送到服务器,但文件未被存储,感谢您提供解决此问题的帮助。

你应该的服务器:

const bodyParser = require('body-parser')


app.use(bodyParser.json())
app.use(bodyParser.urlencoded({extended: true}))
app.use(morgan('dev'))
// app.use("/users", auth)
app.use("/exam", video);

io.on('connection', (socket) => {
    console.log('CONNECTED');
    ss(socket).on('video', (stream, data) => {
        console.log('RECEIVED');
        const fileName = path.basename('test')
        stream.pipe(fs.createWriteStream(fileName))
    })
})
server.listen(3000)

和客户端:连接函数中的参数只是“http://localhost:3000/”,排除路由

var socket = io.connect('http://localhost:3000/');
var stream = ss.createStream();
var filename = './test.webm';
 
ss(socket).emit('video', stream, {name: filename});
fs.createReadStream(filename).pipe(stream);

在客户端:连接到域,而不是路由: ref

在服务器:你把io.on放在一个路由上,io.on只是在你调用路由时监听。如果你想在服务器启动时 运行 ,你应该把 io.on 放在路由

之外