我有一個音頻應用程序,它在Linux上使用ALSA驅動程序,並且代碼在intel linux桌面機上工作得很好。但是,我也想支持Raspberry Pi,並且在該平臺上定期發生音頻丟失和緩衝區欠載。公平起見,intel linux上也出現這種不足,但它們沒有伴隨着令人討厭的靜態爆發,這可能與該平臺上的ALSA驅動程序有關。如何正常恢復ALSA中的-EPIPE錯誤?
無論如何,我收到兩種類型的錯誤。首先,我撥打snd_pcm_wait()
有時會返回-EPIPE
代碼。我抓住這個代碼,然後嘗試呼叫snd_pcm_recover()
,然後snd_pcm_prepare()
,但在隨後調用snd_pcm_writei()
時仍然會出現一些靜態失真。這是從這種錯誤中恢復的正確方法嗎?有沒有辦法從這個沒有靜態恢復?
當snd_pcm_wait()
成功返回時,我打電話snd_pcm_avail_update()
...我應該在snd_pcm_recover()
成功返回後也這樣做嗎?
我的第二個問題是,有時snd_pcm_writei()
也返回-EPIPE
返回碼。再次,我嘗試在這種情況下撥打snd_pcm_recover()
,但仍然聽到咔嗒聲或其他噪音。有沒有辦法更好地從這個錯誤中恢復?