gpt4 book ai didi

javascript - 如何以低延迟流式传输实时音频

转载 作者:太空狗 更新时间:2023-10-29 13:50:03 26 4
gpt4 key购买 nike

我使用 express 编写了一个服务器,它可以从我的 MacBook 的音频输入创建音频流, osx-audiolame :

const http = require("http");
const express = require("express");
const audio = require("osx-audio");
const lame = require("lame");
const audioInput = new audio.Input();

const encoder = new lame.Encoder({
channels: 2,
bitDepth: 16,
sampleRate: 44100,
bitRate: 128,
outSampleRate: 22050,
mode: lame.STEREO
});

audioInput.pipe(encoder);

const app = express();
const server = http.Server(app);

app.get("/stream.mp3", (req, res) => {
res.set({
"Content-Type": "audio/mpeg",
"Transfer-Encoding": "chunked"
});
encoder.pipe(res);
});

server.listen(3000);

在客户端,来自此音频流的声音包含为 <audio>像这样的元素:

<audio controls autoplay preload="none">
<source src="./stream.mp3" type="audio/mpeg" />
<p>Oops – your browser doesn't support HTML5 audio!</p>
</audio>

这是有效的——当我点击音频元素上的“播放”按钮时,我可以通过连接到服务器的任何浏览器听到我在笔记本电脑上选择的输入源的声音。

但是浏览器播放的音频比原始信号滞后几秒钟。看起来虽然我使用的是 preload="none",但浏览器在开始播放之前缓冲了相当多的音频流。

这里有什么明显的遗漏吗?有没有更好的方法来实现延迟只有几毫秒而不是几秒的实时音频?

如果您有兴趣,我项目的完整源代码是here on GitHub .

最佳答案

与其重新发明轮子,不如使用 FFMPEG , 宣传为“一个完整的跨平台解决方案,用于录制、转换和流式传输音频和视频。”

例子:

ffmpeg -re -i input -f rtsp -muxdelay 0.1 rtsp://server/live.sdp

您可以选择适合您的浏览器的库(h.264、mpeg 等)。

关于javascript - 如何以低延迟流式传输实时音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56096603/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com