当从服务器解压缩Mp3的帧时,Mp3已播放10到15秒时发生上述异常。我的应用程序是客户端/服务器应用程序。我通过编写Mp3数据包并将其序列化来发送Mp3帧网络流。我使用 NAudio开源API 进行压缩和解压缩帧并播放Mp3.I使用堆栈跟踪获得以下异常。
NAudio.MmException.Try(MmResult result,String function)
at NAudio.Wave.Compression.AcmStreamHeader.Convert(Int32 bytesToConvert,Int32& sourceBytesConverted)
at NAudio.Wave.Compression.AcmStream.Convert(Int32 bytesToConvert,Int32& sourceBytesConverted)
at NAudio.Wave.AcmMp3FrameDecompressor.DecompressFrame(Mp3Frame frame,Byte [] dest,Int32 destOffset)
在Client.Audio.SoundPlayer.StreamMP3(对象状态)
答案 0 :(得分:1)
AcmNotPossible是acmStreamConvert Windows函数返回的错误代码,它调用MP3 ACM编解码器。此错误可能表示MP3帧无效,或者您一次传入太多帧。您对整个MP3帧的确定程度如何?最好通过将收到的数据写入MP3文件,然后检查可以按预期播放来调试这样的问题。
答案 1 :(得分:0)
转换为 mp3 需要扩展信息。
我将 mp3 编解码器信息声明为
const MP3Extend = chr(0)+chr(1)+chr(0)+chr(4)+chr(0)+chr(0)+chr(0)+chr(192)+chr(3)+chr(1)+chr(0)+chr(0);
然后我创建了 var 缓冲区
buffer=array[0..511]
字节; mp3formatin:PWaveformatEx;
move(mp3formatin^,buffer[0],sizeof(pWaveformatex))
move(mp3extend,buffer[sizeof(pWaveformatex)-1],length(MP3EXTEND))
acmstreamopen(Instance, nil,pwaveformatEx(@buffer[0])^,outputwaveformatEx^,
等当您现在参考 mp3formatin 时,例如 pWaveformatEx(@buffer[0]).thevalues
希望这能解决您的问题。