Android mtk單路錄音問題

在單路錄音中,有兩種狀況致使底層錄音資源被佔用的問題:java

1 開啓vmLog後,撥打一個電話,掛斷電話。若是掛斷電話後,沒有關閉vmlog進程,則會致使其它AP 沒法獲得底層的錄音資源,從而沒法錄音。微信

2 打開第三方錄音軟件,第三方錄音軟件在後臺getinput,一直佔用底層資源,不釋放的狀況話,則會致使其它AP 沒法獲得底層的錄音資源,從而沒法錄音。app

    當第三方錄音軟件退出後,因爲後臺一直佔用底層資源,沒有釋放mic source,也會致使其它AP 沒法獲得底層的錄音資源,從而沒法錄音。編碼

    當第三方錄音軟件退出前,把它獲得的getinput交給別的AP,沒有釋放mic source,也會致使其它AP 沒法獲得底層的錄音資源,即便重啓手機也沒法錄音。orm

    當第三方錄音軟件退出後,重啓手機,第三方錄音軟件的後臺自動運行,而後會getinput source的動做,這樣後臺會一直佔用input source,也會致使其它AP 沒法獲得底層的錄音資源,即便重啓手機也沒法錄音。進程

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------資源

目前mtk的75,15,77,17平臺硬件上只支持單路錄音,不支持多路錄音,後續89平臺在這塊已經作了改進,多路錄音須要硬件支持,後續更高階的平臺是能夠支持多路錄音的。
PDXXXX是mtk77平臺,硬件上只支持單路錄音,不支持多路錄音。
開發分析是由於使用第三方微信的時候,一直佔用底層的錄音資源,沒有釋放資源形成的。(當問題出現後,把微信進程從後臺服務中殺掉或卸載掉後,重啓手機就會恢復)
建議第三方微信,在不用的時候及時釋放底層錄音資源,使其餘AP及時得到底層錄音資源,能夠正常錄音。
第三方微信被佔用的mtklog以下所示:

第三方微信被佔用的mtklog:
11-29 09:10:52.891   116   346 D AudioRecord: getInput(): fail retry 0
11-29 09:10:52.891   116   346 D AudioYusuPolicyManager: getDeviceForInputSource()input source 1, device 00040000
11-29 09:10:52.891   116   346 D AudioYusuPolicyManager: getInput() inputSource 1, samplingRate 48000, format 1, channelMask c, acoustics 7
11-29 09:10:52.891   116   346 D AudioStreamHandler: +openInputStream devices = 40000 format = 1 channelCount = 12 samplerate = 48000
11-29 09:10:52.891   116   346 D AudioStreamHandler: openInputStream :: no free stream available
11-29 09:10:52.891   116   346 V AudioFlinger: openInput() openInputStream returned input 0x0, SamplingRate 48000, Format 1, Channels c, status 1098266528
11-29 09:10:52.891   116   346 D AudioYusuPolicyManager: getInput() failed opening input: samplingRate 48000, format 1, channelMask 12
11-29 09:10:52.896   116   346 D AudioRecord: getInput(): fail retry 1
11-29 09:10:52.896   116   346 D AudioYusuPolicyManager: getDeviceForInputSource()input source 1, device 00040000
11-29 09:10:52.896   116   346 D AudioYusuPolicyManager: getInput() inputSource 1, samplingRate 48000, format 1, channelMask c, acoustics 7
11-29 09:10:52.896   116   346 D AudioStreamHandler: +openInputStream devices = 40000 format = 1 channelCount = 12 samplerate = 48000
11-29 09:10:52.896   116   346 D AudioStreamHandler: openInputStream :: no free stream available
11-29 09:10:52.896   116   346 V AudioFlinger: openInput() openInputStream returned input 0x0, SamplingRate 48000, Format 1, Channels c, status 1098266528
11-29 09:10:52.896   116   346 D AudioYusuPolicyManager: getInput() failed opening input: samplingRate 48000, format 1, channelMask 12
11-29 09:10:52.901   116   346 D AudioRecord: getInput(): fail retry 2
11-29 09:10:52.901   116   346 D AudioYusuPolicyManager: getDeviceForInputSource()input source 1, device 00040000
11-29 09:10:52.901   116   346 D AudioYusuPolicyManager: getInput() inputSource 1, samplingRate 48000, format 1, channelMask c, acoustics 7
11-29 09:10:52.901   116   346 D AudioStreamHandler: +openInputStream devices = 40000 format = 1 channelCount = 12 samplerate = 48000
11-29 09:10:52.901   116   346 D AudioStreamHandler: openInputStream :: no free stream available
11-29 09:10:52.901   116   346 V AudioFlinger: openInput() openInputStream returned input 0x0, SamplingRate 48000, Format 1, Channels c, status 1098266528
11-29 09:10:52.901   116   346 D AudioYusuPolicyManager: getInput() failed opening input: samplingRate 48000, format 1, channelMask 12
11-29 09:10:52.901   116   346 E AudioRecord: Could not get audio input for record source 1
11-29 09:10:52.901   116   346 E StagefrightRecorder: audio source is not initialized
11-29 09:10:52.901   116   346 D StagefrightRecorder: start done status=-2147483648
11-29 09:10:52.901   612   612 E MediaRecorder: start failed: -2147483648
11-29 09:10:52.902   612   612 E MediaRecorderWrapper: MediaRecorder start errorjava.lang.RuntimeException: start failed.開發

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------get

目前,PDXXXX是Android4.0平臺,對於3gpp格式的錄音文件,其編碼方式是採用16K採樣率,處理數據的比特率128K,雙聲道。3gpp格式的錄音文件,在電腦上播放時,與該播放器的解碼器相關。若是此播放器的解碼器 支持16K採樣率,處理數據的比特率128K,雙聲道,將能夠正常播放,如PotPlayer能夠正常播放。用戶可使用支持此編碼方式的播放器,像PotPlayer播放器進行播放.
而amr格式的錄音文件其編碼方式爲8K採樣率,處理數據的比特率12.2k,單聲道,而電腦上的播放器的解碼器都是支持此編碼方式,因此amr格式的錄音文件在電腦和手機上都是能夠播放的。input

改善方案及臨時措施:建議用戶使用支持3gpp格式的播放器,如PotPlayer進行播放。同時建議:建議將amr格式的錄音文件設置爲默認的錄音文件,他的編碼方式和解碼方式在手機和電腦上都是支持的,廣泛性比較好。
長期改善措施:建議將amr格式的錄音文件設置爲默認的錄音文件,他的編碼方式和解碼方式在手機和電腦上都是支持的,廣泛性比較好。對於3gpp格式的錄音文件,它是專用移動多媒體錄音文件,沒有amr格式的錄音文件通用性強。

目前mtk的75,15,77,17平臺硬件上只支持單路錄音,不支持多路錄音,後續89平臺在這塊已經作了改進,多路錄音須要硬件支持,後續MTK更高階的平臺是能夠支持多路錄音的。開啓語音喚醒後,它會一直佔用底層錄音資源(此狀況已經和作語音喚醒的吳華琛覈實),不釋放的狀況下,若是是單路錄音,則會致使其它AP沒法獲得底層的錄音資源,從而沒法錄音。PD1216B是6589平臺因此1216B無此現象,PD1224T是17平臺因此不能夠。

相關文章
相關標籤/搜索