【发布时间】:2013-12-04 12:07:03
【问题描述】:
我想知道是否有办法从服务器获取流式音频数据(mp3、flac、任意编码的任意数据块)、处理它并在第一个块之后开始播放?
背景:我们所有的数据都存储在压缩块中,并由 LAMP 环境提供数据。解压缩和重新组装是在客户端完成的 xhr-downloads、indexeddb、文件句柄和/或 chromefs。目前所有 可用的音频/视频功能需要音频 完全下载(否则 decodeAudioData 失败)或需要 不给我机会处理传入数据的源 URL 客户端。
我正在寻找一种解决方案,将我的处理压缩到浏览器“内置”流/缓存/解码功能(例如音频/视频标签)中。我不想在服务器端预处理任何东西,我不想要 flash/java-applet,我想避免在客户端对齐数据(例如处理 mp3)
问题:是否可以动态“增长” bloburl 指向的存储?换句话说:创建一个文件句柄/文件条目,生成一个 blobURL,将其输入音频标签并使用更多数据增长文件?
还有其他想法吗?
米迦勒
补充:好吧,经过又一天毫无结果的尝试,我必须确认在处理流式/分块 mp3|ogg 数据时存在两个问题:
1) decodeAudioData 对输入的内容过于挑剔。即使我预先对齐 ogg-audio(在“OggS”边界处分割),我也无法解码第二个块。
2) 即使我能够解码这些块,我将如何在不设置计时器、开始位置或其他令人头疼的弯路的情况下继续播放它们?也许 webAudioAPI 开发者应该看看 aurora/mp3 ?
已添加:很抱歉,我在开玩笑。但是我最新的从麦克风录制音频的实验也不是很有希望。 400K WAV 几秒钟的录音?我花了几分钟来写下我使用 webAudioAPI 的经验并添加了一些建议 - 从编码人员的角度来看:http://blog.michaelamerz.com/wordpress/a-coders-perspective-on-the-webaudioapi/
【问题讨论】:
-
你不能在第一个块之后开始播放。每种格式都有自己的框架。开始播放之前需要多少数据完全取决于编解码器和容器格式。除此之外,您还需要 WebAudio API。
-
感谢 Brad - 我知道这一点,尽管 aurora.js 和 mp3.js 非常乐意在第一块之后开始播放。我们的块大小在 100 到 300 KB 之间。使用 Webaudio,我无法将任意块输入 decodeAudioData,因为如果数据未对齐,它将失败。我想使用 WebAudioApi - 但只要解码器没有做它应该做的事情,它就不是一个选项:)
-
您需要自己解码编解码器并将其提供给 WebAudio API。 WebAudio API 是使用 JavaScript 将音频写入声音设备的唯一真正方法。
-
对不起,布拉德,但这很愚蠢。如果浏览器内置了所有编解码器,为什么我需要自己解码常见的音频?如果“decodeAudioData”能够更强大地自行解码,难道不是更有意义吗?我并不是在反对 WebAudioAPI——但如果它不能像 MP3 或 OGG 这样的普通音频流式传输,那就没有任何意义了。
-
嗯,WebAudioAPI 提供了 decodeAudioData 来做到这一点:将已知的音频类型解码为 PCM。 aurora/mp3 能够正确对齐任意块 - 为什么不能 decodeAudioData?我不想控制自己的缓冲或其他任何东西,我只想使用可用的东西:mp3|ogg|任何数据块。如果需要的只是 decodeAudioData 中内置的更多“大脑”,那么考虑编解码器不应该是 javascript 开发人员的工作。
标签: html streaming html5-video audio-streaming html5-audio