NodeJS 如何将WriteStream与Svelte API端点一起使用

t98cgbkg  于 2023-06-29  发布在  Node.js
关注(0)|答案(1)|浏览(116)

我正在使用youtube-audio-stream,并希望使用它将Youtube音频直接流到audio html标签。它有一个'stream'函数,返回一个WriteStream。express中的用法是这样的(来自here):

const stream = require('youtube-audio-stream');

const uri = "https://www.youtube.com/watch?v=t1TcDHrkQYg";

app.get("/stream", (req, res) => {
  stream(uri).pipe(res);
})

如何在svelte kit API端点中实现等效?文档给出了ReadableStream的示例,但没有WriteStream。

zazmityj

zazmityj1#

在SvelteKit API端点中,您可以使用Node.js stream模块中的Writable类来实现与Express示例中的WriteStream类似的功能。以下是如何在SvelteKit API端点中使用youtube-audio-stream将YouTube音频直接流式传输到音频HTML标签的示例:

import { writable } from 'stream';
import { get } from 'youtube-audio-stream';

export async function get(req, res) {
  const uri = "https://www.youtube.com/watch?v=t1TcDHrkQYg";

  res.setHeader('Content-Type', 'audio/mpeg');
  res.setHeader('Transfer-Encoding', 'chunked');
  res.setHeader('Cache-Control', 'no-cache');

  const writeStream = writable();

  try {
    const readStream = await get(uri);
    readStream.pipe(writeStream);

    writeStream.pipe(res);
  } catch (error) {
    console.error('Error streaming audio:', error);
    res.status(500).send('Error streaming audio');
  }
}

在本例中,我们使用stream模块中的writable函数来创建一个可写流。然后,我们将可写流传递给youtube-audio-stream'sget函数,该函数返回一个可读流。我们将可读流传输到可写流,将可写流传输到响应对象(res),从而有效地将音频数据从YouTube流传输到客户端。
请确保在响应中设置适当的标头,以指示您正在流式传输音频。您可以根据正在流式传输的实际音频格式调整Content-Type头。
请注意,此代码假定您安装了必要的依赖项(streamyoutube-audio-stream)。您可以通过运行npm install stream youtube-audio-stream来安装它们。

相关问题