当前位置: 首页 > 知识库问答 >
问题:

在Node Js中,如何写入从视频上传的文件块

卢普松
2023-03-14

我想做的是上传一个网络摄像头或音频流到Nodejs并保存到磁盘。目标是一旦数据可用,就将数据块发送到服务器。我已经从gerUserMedia,安装媒体记录器中抓取了流,当数据可用时,我将Blob转换为arrayBuffer并将其发送到服务器。我知道代码是错误的,因为我不确定正确的方法是什么,但是当数据被发送到服务器时,一个文件被保存,但只有1kb的文件,在那里它应该是一个大的视频文件。我该怎么做呢?

//Client Side

recorder.ondataavailable = (event) => {
      const reader = new FileReader();
      reader.onload = (event) =>{
        recordedChunks.push(event.data);
        sendDataToServer(event.target.result)
      }
      reader.readAsArrayBuffer(event.data)
    }
reader.readAsArrayBuffer(event.data)


//Server-Side

app.post('/media', function (req, res, next) { 

  try {
    const { data } = req.body;
    const dataBuffer = new Buffer(data, 'base64');
    const fileStream = fs.createWriteStream('video.webm');
    fileStream.write(dataBuffer);

  } catch (error) {
    console.log(error);

  }

  })

共有2个答案

苏磊
2023-03-14
const ws = new WebSocket("your server websocket url");
ws.onopen = function () {
  console.log('WebSocket Client Connected');
  
};
ws.onmessage = function (e) {
  console.log("Received: '" + e.data + "'");
};

rec.ondataavailable = (event) => {
  console.log(event.data)
  this.blobs.push(event.data);
  this.blob = new Blob(this.blobs, { type: 'video/webm' });

  if (event.data && event.data.size > 0) {
    ws.send(event.data)

  }
};

//服务器

const http = require('http');
var WebSocketServer = require('websocket').server;
var fs = require('fs');

const hostname = 'localhost';
const port = 8080;
const server = http.createServer((req, res) => {
    res.statusCode = 200;
    res.setHeader('Content-Type', 'text/plain');
    res.end('Hello Worldss12');
});

server.listen(port, hostname, () => {
    console.log(`Server running at http://${hostname}:${port}/`);
});

wsServer = new WebSocketServer({
    httpServer: server,
    maxReceivedFrameSize: 2048000,    // Added this line
    maxReceivedMessageSize: 2048000,    // And this line
    
});


wsServer.on('request', function (request) {
    const connection = request.accept(null, request.origin);
    connection.binaryType = 'blob';
    let fileStream = fs.createWriteStream('recording.webm', { flags: 'a' });

    connection.on('message', function (message) {


        if (message.type === 'utf8') {
            console.log('Received Message: ' + message.utf8Data)
            connection.sendUTF('Hi this is WebSocket servers');
        }
        else if (message.type === 'binary') {
            var fileBuffer = new Buffer(message.binaryData, 'base64');
            fileStream.write(fileBuffer);
            connection.sendUTF(message.binaryData.length)
            //connection.sendBytes(message.binaryData)
            
        }
        

    });
    connection.on('close', function (reasonCode, description) {
        console.log('Client has disconnected.');
        
    });
});
蔡晨
2023-03-14

我会研究它为你提供了一些伟大的东西来帮助文件上传。他们也有一个将其与express结合使用的示例。

类型on('progress',(收到字节数,预期字节数)=

试一试,让我们知道进展如何,或者如果你有进一步的问题。

 类似资料:
  • 问题内容: 是的,这是一个冗长的问题,涉及很多细节… 所以,我的问题是:如何将分段上传到Vimeo? 对于想要在自己的计算机上进行复制和调试的任何人: 这是您需要的东西: 我的代码在这里。 包括在此处找到的抄写员库 拥有至少大于10 MB的有效视频文件(mp4),并将其放在目录中,或更改该代码以指向您所在的位置。 而已!谢谢你的协助! 重大更新: 我在此处的代码中为Vimeo保留了有效的API密钥

  • 我正在为我的申请寻找最好的方法。我有视频上传功能。前端将发送请求并附上视频文件,然后我的后端将处理该请求,将减小视频的大小和质量(使用),然后将基于视频的第一帧创建缩略图图像,然后将视频和他的缩略图图像上传到AWS S3 bucket,最后将压缩的视频和缩略图返回到前端。我遇到的问题是,所有压缩、创建缩略图和上传的(后端)任务都非常耗时,有时(取决于视频大小和持续时间)我的服务器会返回504网关超

  • 我想上传视频文件使用php和html表单,php代码和错误如下。 除了视频(.mp4、.flv、.avi)外,我可以上传几乎任何其他类型的文件(图像、zip、文本等)。 savevideo.php: 错误: 我使用了相同的代码(带有图像属性)进行图像上传,并且工作得很好。但是当上传视频时,这给了我很多错误,有些被纠正了。现在我无法将表单中的post数据输入到savevideo.php(我检查了第7

  • 我想从任何网站的嵌入式视频中获取实际的视频文件Url。它本质上不是YouTube。它可以是任何网站。我在Java上为android编写代码。 例如:我想做的事情和这个IDM按钮做的一样: [实际上不一样,因为播放器启动时,按钮会捕获网络流。但我想直接从播放器获取文件。]有没有办法做到这一点?任何外部库[例如Jsoup]都可以这样做吗? 我已经在使用JSoup获取页面的一些其他内容,但我不知道如何做

  • 接口说明 上传视频文件 API地址 POST /api/marker/1.0.0/uploadVideo 是否需要登录 是 请求字段说明 参数 类型 请求类型 是否必须 说明 dataGuid string form 是 场景GUID file string form 是 视频文件 响应字段说明 参数 类型 说明 mp4UploadPath String 视频文件上传地址 响应成功示例 { "

  • 用户通过视频上传、管理视频、获取代码,实现本地视频在制定网站播放。 2.1视频上传 进入视频页面,点击上传视频 按钮,在弹出的页面点击添加视频 : 1)选择视频“分类”,添加视频“标签”(选填); 2)点击【添加视频】或者【选择文件并上传】按钮选择本地一个或多个视频,点击确认即开始视频上传;或者在本地选择一个或多个视频,将视频拖拽到视频上传区,即可进行视频上传; 3)上传过程中点击视频上传或者取消