小编xmi*_*elx的帖子

WebAudio-无缝播放音频块序列

我有一个实时的,恒定的波形数据源,可为我提供每秒一秒钟的采样率恒定的单通道音频。目前,我以这种方式播放它们:

// data : Float32Array, context: AudioContext
function audioChunkReceived (context, data, sample_rate) { 
    var audioBuffer = context.createBuffer(2, data.length, sample_rate);
    audioBuffer.getChannelData(0).set(data);
    var source = context.createBufferSource(); // creates a sound source
    source.buffer = audioBuffer;
    source.connect(context.destination);
    source.start(0);
}
Run Code Online (Sandbox Code Playgroud)

音频可以正常播放,但是在连续播放的块之间有明显的暂停(如预期)。我想摆脱它们,而且我知道我必须引入某种缓冲。

问题:

  • 有没有可以为我做的JS库?(我正在搜索它们)
  • 如果没有可以做到这一点的图书馆,我该怎么办?
  • 是否检测到某个源中的播放何时结束并且之后是否准备好立即播放另一源?(使用AudioBufferSourceNode.onended事件处理程序)
  • 创建一个大缓冲区,然后一个接一个地复制我的音频块,然后使用AudioBufferSourceNode.start AudioBufferSourceNode.stop函数控制流?
  • 有些不同?

javascript streaming html5 web-audio-api

5
推荐指数
2
解决办法
2475
查看次数

禁用数据 url jpg 缓存

我有一个恒定的 Base64 编码 jpg 文件源,大约每秒 1-5 个图像,创建一个简单的视频流。它们是这样的:

data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAUAAAAFCAYAAACNbyblAAAAHElEQVQI12P4//8/w38GIAXDIBKE0DHxgljNBAAO9TXL0Y4OHwAAAABJRU5ErkJggg==
Run Code Online (Sandbox Code Playgroud)

将它们输入到 img 元素的 src 属性中会在后台触发由浏览器缓存的请求:

Chrome 网络选项卡的屏幕截图

由于每个帧都被缓存,我的应用程序会在短时间内填充浏览器缓存。

  1. 如何避免这种缓存行为,以便每个帧要么不被缓存,要么被缓存很短的时间?
  2. 如果这是不可能的,那么我如何才能相当快地显示来自流的 jpg 二进制数据*并且无需缓存?

* 我尝试使用jpg.js将原始二进制 jpg 数据解码为原始像素并将它们渲染在 Canvas 上,但这在时间和 CPU 消耗方面成本太高

html javascript browser jpeg caching

5
推荐指数
1
解决办法
1314
查看次数

标签 统计

javascript ×2

browser ×1

caching ×1

html ×1

html5 ×1

jpeg ×1

streaming ×1

web-audio-api ×1