我想知道是否有办法从服务器获取流式音频数据(mp3,flac,任意编码的任意数据块),处理它并在第一个块之后开始播放?
背景:我们所有的数据都存储在压缩块中,LAMP环境为数据提供服务。解压缩和重新组装是在客户端完成的 xhr-downloads,indexeddb,filehandle和/或chromefs。所有目前 可用的音频/视频功能需要音频 完全下载(否则decodeAudioData失败)或需要 指向源的URL,但没有给我机会处理传入的数据 客户端。
我正在寻找一种解决方案,将我的处理压缩到浏览器“内置”流/缓存/解码功能(例如音频/视频标签)。我不想预处理任何服务器端,我不想要flash / java-applets,我想避免对齐数据客户端(例如进程mp3)
问题:是否可以动态“增长”bloburl指向的存储?换句话说:创建文件句柄/文件条目,生成blobURL,将其提供给音频标签并使用更多数据增大文件?
还有其他想法吗?
麦克拉
已添加:嗯,经过另一天毫无结果的尝试之后,我必须确认在处理流式/分块mp3 | ogg数据时存在两个问题:
1)decodeAudioData对于它所带来的东西太挑剔了。即使我预先对齐ogg音频(在“OggS”边界处分割),我也无法解码第二个块。
2)即使我能够解码块,如何在不设置定时器,开始位置或其他头撞弯路的情况下继续播放它们?也许webAudioAPI开发人员应该看看aurora / mp3?
已添加:抱歉,这是一个婊子。但是我从麦克风录制音频的最新实验也不是很有希望。 400K的WAV录制几秒钟?我花了几分钟时间写下我在webAudioAPI上的经历并添加了一些建议 - 从编码员的角度来看:http://blog.michaelamerz.com/wordpress/a-coders-perspective-on-the-webaudioapi/
答案 0 :(得分:1)
结帐https://github.com/brion/ogv.js。 Brion的项目chunk加载一个.ogv视频,并通过WebAudio API和Canvas将原始数据输出回屏幕,播放文件本身的原始FPS /时间。
代码库中有一个StreamFile对象,用于处理数据的分块加载,缓冲和读出,以及如何组装它以通过WebAudio进行回放的示例。
我实际上直接通过电子邮件向Brion发送了一些帮助,他在一小时内回复了我。它并不是为了完全用你的用例而构建,但元素就在那里,我强烈推荐Brion,他对文件格式,编码和播放非常了解。
答案 1 :(得分:0)
您无法使用<audio>
标记。但是,您可以使用什么
Web Audio API - 允许您在JavaScript中动态构建音频流
WebRTC - 可能需要在服务器端进行流式数据预处理,不确定
缓冲区是可回收的,因此您可以丢弃已播放的音频。
只要您可以将原始数据粘贴到JavaScript缓冲区,如何加载数据(XHR,WebSockets,chuncked文件下载)无关紧要。
请注意,浏览器无法解码通用音频格式,MP3的里程可能会有所不同。 AAC(mpeg-4音频)受到更多支持,它具有最佳的网络和移动覆盖范围。您还可以使用Firefox中的纯JavaScript解码AAC:http://jster.net/library/aac-js - 您还可以使用纯JavaScript解码MP3:http://audiocogs.org/codecs/mp3/
请注意,localStorage每个源只支持5 MB数据而没有其他对话框,因此严重限制了在客户端存储音频。