如果我使用 websocket 协议接收 20ms 的 ulaw 样本(用于内部音频会议应用程序),将它们转换为 PCM,缓冲它们以应对任何抖动(如果需要)......是否可能,如果可以,如何,我可以指示一个浏览器来播放它们?我可以枚举播放设备吗?这对于沙盒浏览器环境如何工作?
尽可能少地使用带有插件的 Javascript。身边有人玩过这个吗?
我知道你可以使用 webrtc 和 SRTP,但我主要是考虑组合音频缓冲区并将其提交以供播放。
如果我使用 websocket 协议接收 20ms 的 ulaw 样本(用于内部音频会议应用程序),将它们转换为 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 过程中执行此操作时可能会遇到性能问题,工作人员可能会更好。此外,可能需要重新采样。