本節主要分享視頻通話中android和ios上操作音頻設備的方式,如調解音量大小,啟用揚聲器(本系列文章轉載請說明出處,博客園RTC.Blacker).
先看看webrtc中處理音頻設備代碼的目錄結構:
第一種方式就是直接調用Android或ObjectC的API,代碼如下(WebRtcAudioTrack.java):
通過調用Android提供的AudioManager類來操作音頻設備(webrtc是用C++寫的,通過JNI來調用這些JAVA方法).
下面是IOS中操作音頻設備的方式(audio_device_impl.mm).
2,在介紹另外一種方式前我們可以先想想既然WebRTC是用C++來實現的,可以用JNI來調用Android的API,那能不能不通過JNI調用JAVA,而是直接調用他底層的實現類庫呢?帶着這個疑問我們直接看音頻設備初始化方法(audio_device_impl.cc):
通過編譯指令WEBRTC_ANDROID_OPENSLES來控制操作音頻設備的方式,如果啟用則直接調用OpenSles,OpenSles說明如下:
OpenSL ES 提供了可通過C++調用的C語言接口,這些接口功能基本類似於Android中通過JAVA調用的接口:
對於Android NDK開發來說,通過JNI調用OpenSL ES 提供的API,您即可實現大部分音頻操作需要而不用在通過Java來操作.
opensles_input.h內容如下:
opensles_output.h截圖如下:
以上,如有錯誤或遺漏,請糾正或補充,謝謝!