2

如果我使用 websocket 协议接收 20ms 的 ulaw 样本(用于内部音频会议应用程序),将它们转换为 PCM,缓冲它们以应对任何抖动(如果需要)......是否可能,如果可以,如何,我可以指示一个浏览器来播放它们?我可以枚举播放设备吗?这对于沙盒浏览器环境如何工作?

尽可能少地使用带有插件的 Javascript。身边有人玩过这个吗?

我知道你可以使用 webrtc 和 SRTP,但我主要是考虑组合音频缓冲区并将其提交以供播放。

4

1 回答 1

3

对于那些来自搜索引擎的人:

对的,这是可能的。您可以使用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 过程中执行此操作时可能会遇到性能问题,工作人员可能会更好。此外,可能需要重新采样。

于 2017-11-02T11:28:40.570 回答