1. 程式人生 > >關於音訊重取樣計算的理解

關於音訊重取樣計算的理解

av_rescale_rnd(swr_get_delay(swr_ctx, 48000) + 1024, 44100, 48000, AV_ROUND_UP);

這裡48000是輸入音訊A的取樣率,44100是輸出視訊B的取樣率,這行程式碼的意思是說,如果轉換1024個音訊A,能夠生成多少個音訊B,那為什麼要使用swr_get_delay呢,大家可以這麼理解,當我們的專案是一個實時的推流專案的時候,假設我們的輸入音訊是48000取樣率,推流輸出需要44100的取樣率,為了保證音視訊的同步,我們必須保證每秒鐘能夠輸出44100 * 2個取樣點B(這裡假設是雙聲道),但是要知道重取樣本身也需要時間,因此,我們需要將這個時間計算出來,轉換為相當於幾個輸入音訊A的取樣點,這樣就可以保證每秒的輸出為44100*2個取樣點B,從而保證音視訊的同步。

注意:

多出來的取樣點B用靜默音0來填充。