我希望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
答案 0 :(得分:0)
我不知道为什么这对你不起作用,因为我的应用程序中的代码几乎完全相同。不同之处在于我使用-
而不是pipe:1
作为输出。试试吧。
我建议的另一件事是从FFmpeg的stderr
读取,以便您可以看到FFmpeg是否有任何奇怪的输出可能会为您提供有关正在发生的事情的线索。