學習筆記(01):FFmpeg打造Android萬能音頻播放器-OpenSL ES介紹並實現播放PCM數據

立即學習:https://edu.csdn.net/course/play/6842/172189?utm_source=blogtoedu

# 記錄一下今天踩到的兩個坑:



1. Android 10 系統上,會出現下面這個問題:
 

E/AudioEffect: set(): AudioFlinger could not create effect c2e5d5f0-94bd-4763-9cac-4e234d06839e / ec7178ec-e5e1-4432-a3f4-4657e6795210, status: -1

E/libOpenSLES: Effect initCheck() returned -19
E/libOpenSLES: EnvironmentalReverb effect initialization failed

首先排查一下權限是否正確獲取到了,如果權限配置正確,這個問題可以忽略掉,不影響最後的播放。

2. 無法播放出聲音

 

因爲在播放的時候,每次 Enque 進去的是獲取到的 size 的大小,代碼如下:

int size = getPcmData(&mBuffer);
if (nullptr != mBuffer) {
        result = (*mDataQueue)->Enqueue(mDataQueue, mBuffer, size);
    }

發現size的值始終爲1,排查後發現是執行

`fread` 時,將 count 和 size 參數寫反了,寫成下面這樣就可以了:
 

size = fread(mOutBuffer, 1,  44100 * 2 * 2, mInput);

 

也很奇怪爲什麼寫反了就讀不到那麼多數據,不應該是 count * size 的嗎?寫反了竟然不對。

 

算是踩到的兩個坑,希望能幫助到遇到相同問題的同學

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章