我们无法在浏览器中播放流式音频(使用 Chrome)。
我们有一个进程在某个端口上的 udp 上流式传输一些音频(例如互联网广播)。它是 avconv ( avconv -y -i SOMEURL -f alaw udp://localhost:PORT
)。我们有一个 NodeJs 服务器,它接收此音频流并将其转发给通过 websocket 连接的多个客户端。NodeJs 接收到的音频流被包装在一个缓冲区中,该缓冲区是一个数字从 0 到 255 的数组。数据被发送到浏览器没有任何问题,然后我们使用 AudioContext 在浏览器中播放音频流(我们的代码基于 AudioStreamer - https://github.com/agektmr/AudioStreamer)。
起初,我们在这一点上得到的只是静态的。在查看 AudioStreamer 代码时,我们意识到音频流数据应该在 -1 到 1 的范围内。有了这些知识,我们尝试用这个公式修改缓冲区中的每个值x = (x/128) - 1
。我们这样做只是为了看看会发生什么,令人惊讶的是,静电变得不那么可怕了——如果音频是语音,你甚至可以辨认出歌曲或单词的旋律。但它仍然非常非常糟糕,有很多静态,所以这显然不是一个解决方案 - 但它确实表明我们确实通过 websocket 接收音频流,而不仅仅是一些随机数据。
所以问题是——我们做错了什么?是否有我们应该使用的编解码器/格式?当然,所有代码(avconv、NodeJs 和客户端)都可以随意修改。如果需要,我们也可以使用其他浏览器,尽管我认为这不是问题所在。我们唯一知道的是,我们确实需要它来通过 websockets 工作。
运行 avconv 和 NodeJs 的操作系统是 Ubuntu(各种版本 10-13)
有任何想法吗?所有帮助将不胜感激。
谢谢!托马斯