在使用mpglib使用libmp3lame库环境解码MP3数据时,我得到了几条错误消息。
错误(#1):hip:不能倒流74位! 错误(#2):hip: bitstream问题,重新同步跳过10个字节.
注意:"resyncing“消息表示10字节,即74位舍入:(74 + 7) / 8 = 10__。
我的MP3解码器代码遵循LAME前端工具中的代码(主要是main.c和audio.c)。
标头不会生成错误,我会按照前端工具最多使用100个字节(参见lame_decode_initfile()文件中的get_audio.c函数)。我甚至试着一次只读取一个字节的数据,同时处理头部,看看它是否会产生不同的效果.不怎么有意思。
当我在解析了头后开始传递MP3数据时,就会发生错误。
知道为什么我会收到这些错误信息吗?
当我使用lame命令行工具解码时,我不会得到错误。
$ lame --verbose --decode test.mp3 test-lame.wav
input: test.mp3 (44.1 kHz, 2 channels, MPEG-1 Layer III)
output: test-lame.wav (16 bit, Microsoft WAVE)
skipping initial 529 samples (encoder+decoder delay)
Frame# 87426/88167 168 kbps MS 虽然帧数之间似乎存在差异,但我可以想象,这是因为88167是一个估计数,而不是已知的样本数。
发布于 2020-03-24 21:20:44
好的,我发现我有一个bug,会在缓冲区中跳过一些字节。我的实现有点复杂,因为我希望数据尽可能快地流,有一种情况是,我在前进之前没有清空一个缓冲区。
因此,如果您在代码中得到了这样的错误,但没有在控制台中运行lame,这可能是99%的错误指向您的代码中的错误。耐心点,看看你的实现,确保每次发送的数据都是正确的。如果这有助于您调试您的问题,添加一个子函数,它将保存您发送给LAME解码器的内容,并将其与原始数据进行比较。
最后,如果您试图一次性发送太多的数据,请知道您将得到类似的错误。这是因为LAME库不缓存大量数据,而且它只能返回一个帧。
最后,我每次向hip_decode1_headersB()函数发送100个字节,直到MP3结构将header_parsed字段设置为true为止。
然后,我一次最多发送1024 (1Kb)个数据到hip_decode1_headers()。然而,这个方法使用起来要复杂得多。你每次都要把所有东西都冲干净。若要刷新函数,请再次使用数据指针并将长度设置为0。该函数一旦返回0,就会进行刷新。当您没有更多的数据并且函数返回0时,您就完成了对整个MP3数据集的解压缩。
https://stackoverflow.com/questions/55976092
复制相似问题