从 HDMI IN 端口捕获音频帧
Posted
技术标签:
【中文标题】从 HDMI IN 端口捕获音频帧【英文标题】:Capturing audio frames from HDMI IN port 【发布时间】:2013-03-10 04:11:40 【问题描述】:我有一个根深蒂固的 HiSense GoogleTV,它有 HDMI IN 和 OUT 端口。
我想做的是从 HDMI IN(来自机顶盒)录制大约 10 秒的音频。我是新手,所以请多多包涵。
这可以在有根设备上执行此操作吗?
HDMI 数据是否在 HDMI IN 之后被解密(由于 HDCP)并在通过 HDMI 输出路由出去之前重新加密?
如果我要尝试在普通 Linux 机器上捕获音频帧,我应该怎么做?我应该查看哪些组件?我找不到任何描述低级架构和 HDMI IN 信号如何路由到 HDMI OUT 的详细信息的文档。
您能否指出实际执行从 HDMI 输入到输出的路由的 android 框架代码?基本上,想了解音频信号在从 HDMI IN 到 OUT 的传输过程中发生的情况。
我不确定我的问题是否有意义,但我希望你能给我一些建议,告诉我应该从哪里开始。
【问题讨论】:
***.com/questions/11222963/port-alsa-to-android 【参考方案1】:简短回答:不可能。直通通过可信视频路径 SOC 与 android 完全隔离。您需要成为经过认证的 SOC 供应商才能接近信号。
【讨论】:
【参考方案2】:HDMI 输入设备应该标识为 AUDIO_DEVICE_IN_AUX_DIGITAL
(请参阅 audio.h),但我从未遇到过具有 HDMI 输入的 Android 设备,因此无法验证。
音频路由由AudioPolicyManager
处理。 libhardware_legacy 中有一个AudioPolicyManagerBase
,然后通常有一个特定于平台的AudioPolicyManager
实现,它重载了一些基类的方法。找到此实现的位置取决于平台。在 Qualcomm 平台上,它通常位于源代码树的 hardware/qcom/audio 下的某个位置。AudioPolicyManager
执行高级路由(例如将流类型和音频源映射到音频设备),然后使用 AudioHardware
实现和可能的其他特定于平台的类来执行低级路由(在硬件级别、加载声学调整参数、与设备驱动程序的接口等)。
任何与 HDMI 输入相关的功能都可能是特定于供应商的,因此如果您希望能够使用,可能需要您的 Google TV 设备的完整源代码(即包括供应商在普通 Android 之上应用的所有补丁)查看处理 HDMI 音频输入的代码。
【讨论】:
【参考方案3】:由于 Google TV 实施了 HDCP,您将无法访问视频或音频输入。改变这一点的唯一方法,即使是在有根设备上,也就是改变谷歌电视代码,可能还有 SOC HDMI 驱动程序,这两个驱动程序都没有被谷歌开源。
【讨论】:
非常感谢您的回答。 HDCP认证完成后,HDMI流不是解密了吗?假设我在 Android 上移植了 Pulseaudio 堆栈。在具有 PulseAUdio 的 Linux 机器上,我可以有多个接收器,因此如果我正在播放声音,我将能够访问音频帧。但我不明白的是,当您有 HDMI 输入和输出端口时,HDMI 音频信号是否只是从输入路由到输出,还是它仍然对声卡有任何作用?您能否指出任何解释 SOC hdmi 驱动程序以及实现我的用例需要做什么的文档。以上是关于从 HDMI IN 端口捕获音频帧的主要内容,如果未能解决你的问题,请参考以下文章