node.js直播ffmpeg stdout到res

时间:2014-05-23 23:32:36

标签: javascript node.js ffmpeg html5-audio audio-streaming

我希望node.js将极长的音频文件转换为mp3,第二个数据在stdout上可用,node.js应该将它发送给客户端供他们播放。

我已经写了以下内容,虽然它有效,但是html5音频/视频标签一直等到ffmpeg 100%完成转码,因为我想在ffmpeg正在做的时候开始播放视频。< / p>

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:不知道为什么,但如果params.location指向电影,一切似乎都有效。但如果它是一个音频文件,ffmpeg似乎没有输出到stdout,直到它100%转换。

编辑2:由于mp4文件是非因果(http://en.wikipedia.org/wiki/Causal_system),因此无法将mp4文件转储到stdout。因此,如果你使用webm它是有效的。只需确保使用webm支持编译ffmpeg(对于自制用户:brew install ffmpeg --with-vpx --with-vorbis)。

我上传了一个github gist,显示了两个发送实时mp3 / webm转码的功能:https://gist.github.com/cobookman/c1a9856a4588496b021a

1 个答案:

答案 0 :(得分:0)

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

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