我想做的是上传一个网络摄像头或音频流到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);
}
})
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.');
});
});
我会研究它为你提供了一些伟大的东西来帮助文件上传。他们也有一个将其与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)上传过程中点击视频上传或者取消