我正在尝试将来自youtube链接的音频直接传输到带有node.js的http。
我的代码看起来像这样,我使用快递4.0。
var express = require('express');
var router = express.Router();
var ytdl = require('ytdl');
var ffmpeg = require('fluent-ffmpeg');
var fs = require('fs');
router.get('/', function(req, res) {
var url = 'https://www.youtube.com/watch?v=GgcHlZsOgQo';
var video = ytdl(url)
res.set({
"Content-Type": "audio/mpeg"
})
new ffmpeg({source: video})
.toFormat('mp3')
.writeToStream(res, function(data, err) {
if (err) console.log(err)
})
});
module.exports = router;
现在,我可以将视频的音频流式传输到响应中,如果我保存文件然后将其传输到响应,但我宁愿尝试找出一些方法去从下载到ffmpeg到响应。
不确定这是否可行。主要目标是尽可能保持轻量级,而不必从文件中读取。
我已经看过this代码,这基本上是我想做的,减去了对文件部分的保存。
答案 0 :(得分:0)
由于
res
是流,ffmpeg
也是流。
我们用.pipe()
互相传送。
使用管道不需要将文件保存在ROM中。数据存储在RAM中,并在需要时进行访问。这是一种非常有效的流文件方式!
router.get('/', function(req, res) {
var url = 'https://www.youtube.com/watch?v=GgcHlZsOgQo';
// Audio format header (OPTIONAL)
res.set({ "Content-Type": "audio/mpeg" });
// Send compressed audio mp3 data
ffmpeg()
.input(ytdl(url))
.toFormat('mp3')
.pipe(res);
});