我正在编写一个应用程序,用于录制音频并通过网络上传音频文件。为了加快上传速度,我想在完成录制之前开始上传。
我正在创建的文件是WAV文件。我的计划是使用多个数据块。而不是我正在使用的正常编码(RIFF,fmt,data)(RIFF,fmt,数据,数据,......,数据)。第一个问题是RIFF标题需要整个文件的总长度,但在流式传输音频时我当然不知道(我现在使用的是任意数字)。另一个问题是我不确定它是否有效,因为Audacity无法识别该文件,而Windows Media Player会打开该文件,但只播放一小部分文件。我一直在阅读WAV规格,但没有找到答案。
有什么建议吗?
答案 0 :(得分:3)
您只需使用支持追加而不编辑标题的容器格式。
我建议使用Raw PCM样本。它们可以随意转换为其他任何东西。
Audacity将从文件中导入原始字节 - >导入 - >原始数据菜单。
另一种选择可能是无损音频编解码器,例如可流式容器格式内的FLAC。 (As done by a Czech web radio station)
我注意到VLC可以从声卡中压缩和流式传输FLAC-in-OGG。应该是一个简单的步骤,在那里存储或解压缩服务器端的流。
答案 1 :(得分:1)
通过仅使用一个数据块并将ChunkSize设置为0xFFFFFFFF以及将Subchunk2Size设置为0xFFFFFF,我也设法流化了wav。生成的文件不完全符合规范,但通过<audio>
标签嵌入后,Chrome可以实时播放,不会出现问题。下载的文件也可以播放。
答案 2 :(得分:0)
你上传到哪里?你自己的网站?听起来你需要一些服务器端代码来获取原始样本上传并将它们组装到服务器上的有效WAV文件(正确的文件长度字段,一个数据块)中。
但如果您真的想加快上传速度,我认为您实际上想要上传MP3编码的帧并让服务器将它们组装成 MP3 文件。哪个更复杂,我很害怕。