Tag: webm

将WebM文件存储在Redis(NodeJS)中

我正在寻找一个将WebM文件存储到Redis的解决scheme。 我们来解释一下情况: NodeJS服务器从客户端接收WebM文件,并将其保存到服务器文件系统中。 然后它必须保存在redis的这个文件,因为我不想pipe理redis和文件系统。 这样我可以用redis命令删除video。 我想用fs.readFile()读取文件,然后将其保存到一个缓冲区中,但我不知道如何使用编码格式,我不知道如何引用这个过程来将WebMvideo回送给客户端发出请求时。 这是继续进行的好方法吗? 任何build议? PS:我使用强大的上传文件。 编辑:我find了一种方法来进行,但theres另一个问题: var file = fs.readFileSync("./video.webm"); client.set("video1", file1, function(){ client.get("video1", function(err, data) { var buffer = new Buffer(data, 'binary'); // file ≠ buffer }); }); 这是一个编码问题? 像unicode / UTF8 / ASCII? 也许节点和Redis使用不同的编码?

FFmpeg通过Nodejs将webmvideo直播到多个http客户端

我试图通过ExpressJS服务器共享我的屏幕直播。 性能原因,我无法将ffmpeg输出保存到文件或启动多个ffmpeg实例。 我目前的解决scheme是pipe道ffmpeg的标准输出和stream到每个连接的客户端。 index.js const express = require('express'); const app = express(); const request = require('request'); const FFmpeg = require('./FFmpeg'); const APP_PORT = 3500; app.get('/stream', function (req, res) { const recorder = FFmpeg.getInstance(); res.writeHead(200, { "content-type": "video/webm", }); recorder.stdout.on('data', res.write); req.on('close', FFmpeg.killInstance); }); app.listen(APP_PORT, function () { console.log(`App is listening on port ${APP_PORT}!`) }); FFmpeg.js […]

使用NodeJS中的mp4容器stream式转换电影,电影播放速度非常快

我已经使用stream-transcoder模块来转换文件使其成为一个stream。 所以文件不存储,它是在飞行中。 app.get("/video", function(req,res){ res.writeHead(200, {'Content-Type': 'video/mp4'}); var src = "movie.avi"; var Transcoder = require('stream-transcoder'); var stream = fs.createReadStream(src); new Transcoder(stream) .maxSize(1280, 720) .videoCodec('h264') .videoBitrate(800 * 1000) .fps(25) .sampleRate(44100) .channels(2) .audioBitrate(128 * 1000) .format('mp4') .on('finish', function() { console.log("finished"); }) .stream().pipe(res); }); 它工作的很好,速度很快,但速度太快,audio播放速度相同,但video不考虑帧速率,不pipe从ffmpeg收到什么,都很快地显示出来。 此外,它不显示总时间,我相信这是问题。 我需要以某种方式指定长度,帧率,但我找不到足够的信息。 我以为从ffmpeg收到的stream应该包含这个。 而我无法findHTTP中的相应标题。 以下是这个stream代码转换器模块用于MP4的标志: [ '-i', '-', '-vf', 'scale=min(trunc(1280/hsub)*hsub\\,trunc(a*720/hsub)*hsub):min(trunc(720/vsub)*vsub\\,trunc(1280/a/vsub)*vsub)', '-vcodec', 'h264', '-b:v', […]

Node.js Webm直播stream服务器:与<video>标记的问题

我使用Node.js作为stream服务器来传输FFMPEG发送的实时Webmvideo(从另一个应用程序执行,stream通过HTTP完成),并由使用该标记的Web应用程序接收。 这是我在做什么:FFMPEG使用以下命令stream接收的帧: ffmpeg -r 30 -f rawvideo -pix_fmt bgra -s 640×480 -i \\.\pipe\STREAM_PIPE -r 60 -f segment -s 240×160 -codec:v libvpx -f webm http://my.domain.com/video_stream.webm (stream来自使用Kinect作为源的应用程序,并通过pipe道与FFMPEG通信,发送一个接一个的帧) 当Web应用程序连接时,它立即从服务器接收到这个响应: HTTP/1.1 200 OK X-Powered-By: Express content-type: video/webm cache-control: private connection: close Date: Fri, 06 Dec 2013 14:36:31 GMT 和一个WebM标题(以前存储在服务器上,具有相同的源stream的分辨率和帧速率,并在VLC上进行testing)被立即追加。 然后webapp开始接收由FFMPEGstream传输的数据。 这是Mkvinfo GUI的屏幕截图,显示标题的字段: 但是,即使Chrome控制台的“networking”标签显示存在实际的数据stream(即stream式传输不完全是垃圾,否则连接将被丢弃),播放器也不会显示任何内容。 我们尝试手动将我们的标题添加到Web应用程序收到的转储的video,VLC播放它就好了,但这不是标签发生的情况。 什么会导致这个问题? 我们是否错过了FFMPEG方面的编码,或者我们在头上存储了错误的值(或者它们不够)? PS:我不能依靠外部stream服务器。 PPS:我们尝试了以下实验: 使用存储在服务器中的video标题代替video标题使video可以在vlc和video标签上播放 […]