ffmpeg 转换为 adts -> 发送到 nodejs 服务器 -> 服务器上的 ffmp-6ren">
gpt4 book ai didi

node.js - 仅从 nodejs 窗口流式传输 mp3 文件时的 Chrome "stalling"

转载 作者:行者123 更新时间:2023-12-04 23:16:32 26 4
gpt4 key购买 nike

在尝试发送 mp3 数据时,我们遇到了一个非常烦人的错误。我们有以下设置。

网络摄像头生成 aac -> ffmpeg 转换为 adts -> 发送到 nodejs 服务器 -> 服务器上的 ffmpeg 将 adts 转换为 mp3 -> mp3 然后流式传输到浏览器。

这在 Linux 上*完美地工作(带有 HTML5 和 flash 的 chrome,仅限 firefox flash)

然而,在 Windows 上,声音只是“停止”,无论我们使用什么组合( browser/html5/flash )。但是,如果我们关闭服务器,声音就会立即开始按我们的预期播放。

出于某种原因,在基于 Windows 的机器上,好像声音正在被缓冲“等待”某事,但我们不知道那是什么。

任何帮助将不胜感激。

Node 中的相关代码

    res.setHeader('Connection', 'Transfer-Encoding');
res.setHeader('Content-Type', 'audio/mpeg');
res.setHeader('Transfer-Encoding', 'chunked');
res.writeHeader('206');

that.eventEmitter.on('soundData', function (data) {
debug("Got sound data" + data.cameraId + " " + req.params.camera_id);
if (req.params.camera_id == data.cameraId) {
debug("Sending data direct to browser");
res.write(data.sound);
}
});

浏览器上的代码
       soundManager.setup({
url: 'http://dashboard.agricamera.co.uk/themes/agricamv2/swf/soundmanager2.swf',
useHTML5Audio: false,
onready: function () {
that.log("Sound manager is now ready")
var mySound = soundManager.createSound({
url: src,
autoLoad: true,
autoPlay: true,
stream: true,
});
}
});

最佳答案

If however we shutdown the server the sound then immediately starts to play as we expect.

For some reason on windows based machines it's as if the sound is being buffered "waiting" for something but we don't know what that is.


这正是正在发生的事情。
首先,chrome 可以播放 ADTS 流,所以如果可能的话,直接使用它并通过不必在链中使用第二个有损编解码器来节省一些音频质量。
接下来,不要使用 soundManager,或者至少让它使用 HTML5 音频。在大多数情况下,这些天您不需要 Flash 后备,Chrome 完全能够播放您的流。我怀疑这是你的问题所在。
接下来,尝试禁用分 block 传输。许多客户不喜欢在流上传输编码。
最后,我看到 Chrome 的内置媒体处理(我相信因操作系统而异)无法同步到流的情况。 Chromium 有一些错误票。如果您的播放计时器没有增加,这可能是您的问题,您可以简单地尝试以编程方式重新加载流来解决它。

关于node.js - 仅从 nodejs 窗口流式传输 mp3 文件时的 Chrome "stalling",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32996370/

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