Node.js实时流式传输ffmpeg标准输出到res



我想让node.js转换一个非常长的音频文件到mp3,第二个数据是可用的stdout, node.js应该把它发送到客户端让他们播放。

我已经写了以下内容,而它的工作,html5音频/视频标签等待,直到ffmpeg是100%完成转码,在哪里,我想开始播放视频,而ffmpeg正在做它的事情。

var ffmpeg = childProcess.spawn('ffmpeg', [
   '-i', params.location, //location of the specified media file
   '-f', 'mp3',
   'pipe:1'
 ]);
 res.writeHead(200, {
   'Content-Type': 'audio/mp3'
 });
 ffmpeg.stdout.pipe(res);

编辑1:不知道为什么,但如果参数。地点指向电影,一切似乎都行得通。但如果它是一个音频文件,ffmpeg似乎不会输出到标准输出,直到它100%转换。

编辑2:事实证明,你不能转储一个mp4文件到stdout由于事实,mp4文件是非因果的(http://en.wikipedia.org/wiki/Causal_system)。因此,如果你使用webm,它可以工作。只要确保用webm支持编译ffmpeg(对于自制用户:brew install ffmpeg——with-vpx——with-vorbis)。

我已经上传了一个github gist,展示了两个函数来发送live mp3/webm转码:https://gist.github.com/cobookman/c1a9856a4588496b021a

我不知道为什么这对你不起作用,因为我在我的应用程序中几乎有完全相同的代码。不同之处在于我使用-而不是pipe:1作为输出。试试。

我建议的另一件事是从FFmpeg的stderr中阅读,以便您可以看到FFmpeg是否有任何奇怪的输出,这可能会给您关于正在发生的事情的线索。

最新更新