2012-12-28 225 views
8

我正在嘗試創建雙屏幕設置。 Android平板電腦(Nexus 10)使用HDMI連接到另一個屏幕。同時在耳機和揚聲器上輸出音頻

在平板電腦上播放影片時(使用VLC或其他應用程序),它將在兩個屏幕上正確顯示。
但是,音頻信號只能通過HDMI傳輸。使用,我們設法在耳機或HDMI上獲得音頻輸出。

我看不到一個函數來同時爲兩個設備設置音頻輸出。 我試着用音頻管理器設置它,但它只適用於一個頻道。

AudioManager am = (AudioManager) getSystemService(Context.AUDIO_SERVICE); 

am.setSpeakerphoneOn(true); 
am.setWiredHeadsetOn(true); 

我注意到的另一件事是setParameters API然後將變量傳遞到平臺音頻系統。這可能是ALSA,或許解決方案在那裏?

回答

2

無法保證在所有Android設備上都能正常工作。這裏的問題是平臺通常缺少任何類型的HDMI +揚聲器或HDMI +耳機組合設備(即描述用於到HDMI和某個其他目的地的單個輸出流的低級路由的音頻設備)。並不是說硬件有任何限制,但它不是一般你想使用的路由,因此它沒有被添加。

我從來沒有遇到過爲任何流類型選擇HDMI和有線耳機的平臺。在某些平臺上可以選擇HDMI +揚聲器用於RING和ALARM流類型,但是如果平臺缺少組合設備來實現路由決策,您仍然只能獲得 HDMI或揚聲器的音頻。
看看at this code看看我的意思。這就是使用高通平臺的OEM大量使用他們的代碼。而這段代碼所做的是爲特定的流選擇低級輸出路由。在你的情況下,它會看到HDMI(AUX_DIGITAL)可用,所以它會選擇HDMI「用例」(對應於like this)並立即返回。

+0

Thx&有道理。檢查我的理解:一個定製的Android系統(比如說,我是一個OEM,可以分發我自己的版本)可以包含一個修改過的'ALSADevice.cpp',然後同時爲HDMI和揚聲器設置路由。唯一值得關注的是'getUCMDevice'函數可能只返回一個音頻設備 - 或者這對於路由意味着什麼?所以我應該先添加一條路線,然後返回路線ID /名稱,對嗎? –

+0

您必須確保AudioPolicyManager實際爲您正在使用的流類型(或至少對於_some_流類型)選擇HDMI +揚聲器。然後,ALSADevice需要選擇一個組合UCM設備(例如'SND_USE_CASE_DEV_HDMI_SPEAKER'),最後你必須更新UCM文件(snd_soc_msm_blabla)以添加新添加的實際設置(我稱之爲低級路由) UCM設備。 ..當然,平臺必須實際支持這樣做。 – Michael

+0

非常感謝您提供的信息,但是您可以像在應用程序中複製數據流一樣將其發送到不同的輸出設備上嗎? –

相關問題