mpglib输出的“ hip:不能以74位倒带流”是什么意思?

问题描述 投票:0回答:1

在使用mpglib库环境使用libmp3lame解码MP3数据时,我收到一些错误消息。

错误(#1):臀部:无法以74位倒带流!错误(#2):hip:比特流问题,正在重新同步跳过10个字节...

注意:“正在重新同步”消息表示10个字节,四舍五入为74位:(74 + 7) / 8 = 10

我的MP3解码器代码遵循LAME前端工具中的代码(主要是frontend/lame_main.cfrontend/get_audio.c)。

标头不产生任何错误,按照前端工具,我最多使用100个字节(请参阅lame_decode_initfile()文件中的get_audio.c函数。)我什至试图在处理标头时一次读取一个字节的数据。看看是否会有所作为,而且……不是真的。

解析标题后,当我开始传递MP3数据时发生错误。

知道为什么我会收到这些错误消息吗?

P.S。当我使用la脚的命令行工具解码时,我没有收到错误。

$ 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是估计值,而不是已知的样本数。

c++ c mp3 lame
1个回答
0
投票

好吧,我发现我有一个错误,会跳过缓冲区中的某些字节。我的实现有点复杂,因为我想让数据尽可能快地流式传输,在某些情况下,我错过了在继续前进之前清空缓冲区的情况。

因此,如果您在代码中遇到这种错误,但未在控制台中运行lame,则有99%的可能性表明您的代码中存在错误。请耐心等待,并查看您的实现,并确保100%每次都发送正确的数据。如果这样可以帮助您调试问题,请添加一个子功能,该功能将保存您发送到LAME解码器的内容并将其与原始数据进行比较。

最后,如果您一次尝试发送太多数据,请注意您也会遇到类似的错误。这是因为LAME库不会缓存大量数据,并且只能返回一个帧。

[最后,我一次向hip_decode1_headersB()函数发送100个字节,直到MP3结构将header_parsed字段设置为true

然后,我一次最多向hip_decode1_headers()发送1024(1Kb)数据。但是,使用起来要复杂得多。您必须每次都冲洗所有东西。若要刷新,请使用数据指针并将长度设置为0再次调用该函数。函数返回0时即完成刷新。当没有更多数据且函数返回0时,便完成了对整个函数的解压缩。 MP3数据。

© www.soinside.com 2019 - 2024. All rights reserved.