如果我使用 websocket 协议(protocol)接收 20ms ulaw 样本(用于内部音频 session 应用程序),将它们转换为 PCM,缓冲它们以防止任何抖动(如果需要)...是否可能,如果可以,如何,我可以指示浏览器播放它们吗?我可以枚举播放设备吗?这对于沙盒浏览器环境如何工作?
使用 Javascript 并使用尽可能少的插件。这里有人玩过这个吗?
我知道你可以使用webrtc和SRTP,但我主要考虑的是构建音频缓冲区并提交它进行播放。
最佳答案
对于那些来自搜索引擎的人:
是的,这是可能的。您可以使用createBufferSource
节点来接收来自 WebSocket 的音频数据。
事情是这样的:
var context = new window.AudioContext()
var channels = 1
var sampleRate = 44100
var frames = sampleRate * 3
var buffer = context.createBuffer(channels, frames, sampleRate)
// `data` comes from your Websocket, first convert it to Float32Array
buffer.getChannelData(0).set(data)
var source = context.createBufferSource()
source.buffer = buffer
// Then output to speaker for example
source.connect(context.destination)
请注意,在 UI 进程中执行此操作时可能会遇到性能问题,worker 可能会更好。此外,可能需要重新采样。
关于javascript - 您可以通过浏览器在 JavaScript 中播放 PCM 音频流吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17713659/