2012-04-27 145 views
0

我在寫視頻播放器。對於音頻部分我使用XAudio2。爲此,我有單獨的線程正在等待BufferEnd事件,並在此之後用新數據填充緩衝區並調用SubmitSourceBuffer。 問題是如果緩衝區大小很小(1024字節),則在播放下一個緩衝區之前XAudio2(驅動程序或聲卡)會有巨大延遲。我做了測量,XAudio需要長達兩倍的時間才能播放這樣的大塊。 (1024字節大小的48khz原始2聲道pcm應該在接近5ms播放,但在我的電腦上播放時間可達10ms)。如果我使緩衝區爲4kbytes或更多,幾乎沒有延遲。 我需要這樣的小緩衝區才能與視頻時鐘或外部時鐘同步(如ffplay一樣)。如果我讓我的緩衝區太大,那麼由於同步的原因,最終用戶會聽到很多輸出噪音。被解碼和同步音頻或其他任何可能阻止或延遲生產對我的所有功能小緩衝區大小的XAudio2延遲

而且我做了測量,他們採取0或1毫秒來執行,所以他們是沒有問題的100%。

有誰知道它是什麼以及它爲什麼會發生?任何人都可以檢查他是否有與小緩衝區相同的延遲問題?

回答

0

我沒有經歷任何延遲或使用.wav文件暫停。如果您使用的是mp3格式,則可能會在壓縮操作過程中在聲音的開頭和結尾添加靜音,從而導致聲音播放延遲。 See this post瞭解更多信息。