簡體   English   中英

ACM 流轉換異常顯示 AcmNotPossible

[英]ACM Stream Convert exception displaying AcmNotPossible

當從服務器解壓縮 Mp3 幀時,當 Mp3 播放了 10 到 15 秒時會發生上述異常。我的應用程序是客戶端/服務器應用程序。我通過組合 Mp3 數據包並通過網絡流對其進行序列化來發送 Mp3 幀。我正在使用NAudio 開源 API壓縮和解壓縮幀並播放 Mp3。我在堆棧跟蹤中遇到以下異常。

NAudio.MmException.Try(MmResult 結果,字符串函數)

在 NAudio.Wave.Compression.AcmStreamHeader.Convert(Int32 bytesToConvert, Int32& sourceBytesConverted)

在 NAudio.Wave.Compression.AcmStream.Convert(Int32 bytesToConvert, Int32& sourceBytesConverted)

在 NAudio.Wave.AcmMp3FrameDecompressor.DecompressFrame(Mp3Frame frame, Byte[] dest, Int32 destOffset)

在 Client.Audio.SoundPlayer.StreamMP3(對象狀態)

AcmNotPossible 是acmStreamConvert Windows 函數返回的錯誤代碼,該函數調用 MP3 ACM 編解碼器。 此錯誤可能表示 MP3 幀無效,或者您一次傳入過多幀。 你有多確定你得到的是完整的 MP3 幀? 通過將接收到的數據寫入 MP3 文件然后檢查是否可以按預期播放來調試此類問題是一個好主意。

轉換為 mp3 需要擴展信息。

  • 將 mp3formatin "pwaveformatEx" 移動到 512 字節的 "bytebuffer"。
  • 將 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 buffer=array[0..511] ; mp3formatin:PWaveformatEx;

  • 初始化 mp3formatin 和 formatout
  • 將 mp3formatin pwaveformatEx 移動到字節緩沖區
  • move(mp3formatin^,buffer[0],sizeof(pWaveformatex))
  • 然后添加 mp3 擴展編解碼器信息move(mp3extend,buffer[sizeof(pWaveformatex)-1],length(MP3EXTEND)) acmstreamopen(Instance, nil,pwaveformatEx(@buffer[0])^,outputwaveformatEx^, etc

當你現在參考 mp3formatin 例如 pWaveformatEx(@buffer[0]).thevalues

希望這能解決您的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM