2012-12-28 150 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

非常感谢您提供的信息,但是您可以像在应用程序中复制数据流一样将其发送到不同的输出设备上吗? –

相关问题