我必须在 Flex 视频会议应用程序中实现 AEC。我知道它不能直接在 Flash 中完成。我正在考虑编写一个在 Flex 之外执行 AEC 的本机应用程序或库。
据我所知,Adobe Connect Pro 正在使用一些执行 AEC 的外部库。我想按照这个方向做一些类似的事情。
在我的脑海里有两种可能:
1) 独立定制AEC过滤器。
自定义 AEC 过滤器将在后台运行,并将处理来自麦克风和声卡的所有数据并执行 AEC。回声信号将是要播放但在临时缓冲区中延迟的数据,如下所示:aec(input, delay_input, output)。
我不知道它是否有效,因为 Flash 麦克风输入不知道我的自定义输入,扬声器也是如此。但是在系统级别具有 AEC 的 WinXP/Vista 中是如何完成的呢?
2) AEC 过滤器与 Flex 的 NativeProcess 交互。
过滤器将由 NativeProcess 运行。Flex 应用程序会将麦克风声音、接收到的远程语音传递给过滤器并返回去除回声的语音,然后 Flex 会将其输出到扬声器。会正确吗?
如果 2) 方法没问题,那么我有以下问题:
- 我将从 Speex 的 AEC 开始,那么从 Flex 传递的数据应该采用什么格式?如果我选择 Flex Speex 编解码器进行声音压缩,我可以将它直接传递到 speex 库吗?
- 表现会好吗?我认为每个声音帧缓冲区调用 NativeProcess 库可能会很耗时。
- 为什么 AS3 中没有可以直接从 Flash 使用的 AEC 实现?据我所知,要进行 AEC,您必须拥有回声数据和麦克风数据(在 Flash 10 中,可以直接访问麦克风)。肯定有一些事情正在停止这样做,但我还不知道它是什么:)
- 除了 Speex 之外,我可以使用一些免费的 AEC 实现或 DSP 库吗?
PS 我现在是 Flash/Flex 专家,对于一些愚蠢的问题,我深表歉意 :)
在此先感谢您的帮助, ternyk