【发布时间】:2015-02-08 00:39:28
【问题描述】:
我正在尝试通过他们的直接视频 URL 加载 YouTube 视频(使用 ytdl-core 检索)。我使用request 库加载它们。然后我将结果通过管道传输到一个流中,该流用作 ffmpeg 的输入(通过fluent-ffmpeg)。代码如下所示:
var getAudioStream = function(req, res) {
var requestUrl = 'http://youtube.com/watch?v=' + req.params.videoId;
var audioStream = new PassThrough();
var videoUrl;
ytdl.getInfo(requestUrl, { downloadURL: true }, function(err, info) {
res.setHeader('Content-Type', 'audio/x-wav');
res.setHeader('Accept-Ranges', 'bytes');
videoUrl = info.formats ? info.formats[0].url : '';
request(videoUrl).pipe(audioStream);
ffmpeg()
.input(audioStream)
.outputOptions('-map_metadata 0')
.format('wav')
.pipe(res);
});
};
这实际上工作得很好,前端成功地只接收到 WAV 格式的音频并且可以播放。但是,音频缺少有关其大小或持续时间(以及所有其他元数据)的任何信息。这也使它无法搜索。
我假设这在ffmpeg 阶段的某个地方丢失了,因为如果我通过传递给request 的URL 直接加载视频,它可以正常加载和播放,并且具有设定的持续时间/可搜索。有什么想法吗?
【问题讨论】:
标签: javascript node.js express ffmpeg