Articles of streaming

Crossdevice编码静态文件在浏览器中使用FFMPEGstream(分段h264?)

我在NodeJS中构build了一个媒体中心应用程序, (你可以在Github上查看: https : //github.com/jansmolders86/mediacenterjs ) 我正在使用FFMPEG将本地(静态)电影转码为一个stream,然后发送到浏览器。 起初,我使用了Flash在浏览器中工作的h264,但我真的需要它在Android上工作(所以没有Flash),最好在Raspberry Pi上工作。 但是让它在所有设备上播放都让我绝对疯了! 我已经从无数小时阅读文章,教程和堆栈溢出post中得到了所有这些难题,这使我得出结论,我需要产生以下结论: 使用video编解码器H264转码为MP4 移动moovatom'-movflags'来制作MP4stream式传输 将stream分段,Apple也可以播放stream。 但是没有办法。 每次我产生一系列FFMPEG设置,要么不工作,要么在某些设备上工作,而不是在所有设备上工作。 我的一些失败的尝试在哪里: 我的闪光尝试 – > 主要问题(不在IOS中运行): '-y','-ss 0','-b 800k','-vcodec libx264','-acodec mp3'\ '-ab 128','-ar 44100','-bufsize 62000', '-maxrate 620k'\ metaDuration,tDuration,'-f flv 我的HLS尝试 – > 主要问题(不在浏览器中运行): '-r 15','-b:v 128k','-c:v libx264','-x264opts level=41'\ '-threads 4','-s 640×480','-map 0:v','-map 0:a:0','-c:a mp3'\ '-b:a 160000','-ac 2','-f hls','-hls_time 10','-hls_list_size 6'\ […]

在Koa中用Mongoose写入stream式响应

我试图从Mongo数据库发送一个大的结果集到一个Koa应用程序的用户(使用Mongoose)。 我本来有这样的东西: var res = yield Model.find().limit(500).exec(); this.body = {data: res}; 然而,正在发送的结果集的大小导致应用程序超时,因此我想stream数据库中的响应。 使用Mongoose,您可以通过执行以下操作将查询结果转换为stream: var stream = Model.find().limit(300).stream(); 但是,我不确定如何将这个stream写入响应,同时保留所需的格式。 我想要这样的事情发生: this.body.write("{data: "}); this.body.write(stream); this.body.write("}"); 但是我知道在Koa中没有body.write,我确定我也没有正确使用stream。 有人能指出我正确的方向吗?

你如何使用Node.jsstream式传输MP4文件与ffmpeg?

我一直在努力解决这个问题好几天了,真的很感谢这个话题。 我能够使用fluent-ffmpeg成功传输存储在Node.js服务器上的mp4audio文件,方法是将文件的位置作为string传递,并将其转码为mp3。 如果我从同一个文件创build一个文件stream,并将其传递给fluent-ffmpeg,它可以用于mp3input文件,而不是mp4文件。 在mp4文件的情况下,没有错误抛出,并声称stream成功完成,但没有什么在浏览器中播放。 我猜这是与存储在mp4文件末尾的元数据有关,但我不知道如何编码。 这是完全相同的文件,当它的位置被传递给ffmpeg,而不是stream。 当我尝试传递一个stream到S3上的mp4文件时,再次没有错误,但没有stream到浏览器。 这并不奇怪,因为ffmpeg不能在本地作为stream来处理文件,所以期待它从s3处理stream是一厢情愿的想法。 我怎样才能streams3 mp4文件,而不是作为一个文件本地存储在本地? 如何获得ffmpeg来做到这一点,而不是转码文件呢? 以下是我目前无法使用的代码。 请注意,它试图将s3文件作为stream传递给ffmpeg,并将其转码为一个mp3,我不想这样做。 .get(function(req,res) { aws.s3(s3Bucket).getFile(s3Path, function (err, result) { if (err) { return next(err); } var proc = new ffmpeg(result) .withAudioCodec('libmp3lame') .format('mp3') .on('error', function (err, stdout, stderr) { console.log('an error happened: ' + err.message); console.log('ffmpeg stdout: ' + stdout); console.log('ffmpeg stderr: ' + stderr); […]

如何使用NodeJS创buildstream媒体API

你将如何去创build一个stream媒体API的节点 ? 就像TwitterstreamAPI一样 。 我最终想做的是从FriendFeed api获得第一个更新,当新的可用(如果id不同),然后将其公开为Web服务,所以我可以在我的WebSockets上使用它网站:)。 到目前为止,我有这样的: var sys = require('sys'), http = require('http'); var ff = http.createClient(80, 'friendfeed-api.com'); var request = ff.request('GET', '/v2/feed/igorgue?num=1', {'host': 'friendfeed-api.com'}); request.addListener('response', function (response) { response.setEncoding('utf8'); // this is *very* important! response.addListener('data', function (chunk) { var data = JSON.parse(chunk); sys.puts(data.entries[0].body); }); }); request.end(); 哪个只从FriendFeed获取数据,创build带有节点的Http服务器很容易,但不能返回一个stream(或者我还没有find如何)。

通过带有HTML5 <audio>标签的stream式MP3文件进行search

希望有人能帮我解决这个问题。 我正在玩一个将audiostream到客户端的node.js服务器,我想创build一个HTML5播放器。 现在,我使用分块编码从节点stream式传输代码,如果直接访问URL,则效果很好。 我想要做的就是使用HTML5 <audio>标签embedded,如下所示: <audio src="http://server/stream?file=123"> 其中/stream是节点服务器stream式传输MP3的端点。 HTML5播放器在Safari和Chrome中加载正常,但它不允许我寻求,Safari甚至说这是一个“直播”。 在/stream的头文件中,我包含文件大小和文件types,并且响应正常结束。 有关如何解决这个问题的任何想法? 我当然可以立即发送整个文件,但是这个播放器会一直等到整个文件被下载 – 我宁愿把它stream出来。