我正在尝试使用 WebRTC 录制音频,然后将其存储在服务器端。我的服务器是使用NodeJS和express制作的,我使用POST将数据从客户端传输到服务器。
在客户端,我将数据从 wav BLOB 转换为 base64,传输该数据,然后在服务器端读取它,将其转换为二进制,然后将其写入文件中。应该没问题吧?
只有一个问题:我从客户端下载的内容与发送到服务器的内容之间存在一些非常严重的不一致。有时它会添加字节,有时它只是删除数据 block 。如果只是添加了字节,那就意味着字符集问题(从一个字符集转换为另一个字符集,然后再转换为另一个字符集,等等),但在某些时候我添加了 280 个字节,例如。
我在这里添加了一张十六进制差异的图片: /image/psqf4.png (抱歉,到目前为止我还没有足够的声誉来直接发布图片)
另外,使用这些运行文件会得到以下结果: (uuid.wav是服务器端,output(1).wav是客户端端)
9F2B75D3-4C34-4C8F-935E-FC7637D7A054.wav:RIFF(小端)数据、WAVE 音频、Microsoft PCM、4 位、立体声 11321924 Hz
输出 (1).wav:RIFF(小端)数据、WAVE 音频、Microsoft PCM、16 位、立体声 44100 Hz
...很明显这里出了问题。另外,尝试修复 header 或转换 WAV 会出现以下错误:找不到数据 block /数据 block 大小为 0。
有什么想法可能导致这种情况吗?
最佳答案
这看起来很可疑,就像某些代码层正在尝试将二进制数据转换为 Unicode。 0x44 0xAC(小尾数中为 0xAC44,即 44100,表示 44.1 kHz 采样率)正在变成 0x44 0xC2 0xAC。这会被字节交换为 0x00ACC244,即 11321924 Hz,这与您在损坏的文件中看到的内容一致。
这些 0xC2 添加内容看起来确实像 Unicode (UTF-8) 工件。我不确切知道您正在使用哪些数据类型和函数,但您需要审核这些步骤以确保它们都不会尝试进行隐式 Unicode 转换。
关于node.js - WAV 格式的差异 (JS/NodeJS),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21764529/