【发布时间】:2011-09-02 08:08:59
【问题描述】:
我们的要求是开发远程音响系统,它应该支持从WindowsXP 开始的所有windows 操作系统。 类似于http://www.elusiva.com/products/RemoteSound/
我想在这里更清楚地描述功能......
微软有 3 个使用虚拟通道的 RDP 选项
在这台电脑上玩
不要玩
在远程系统中播放
因为 microft 使用 RdpendP.dll 和 virtual chanel 来控制这三个差异。选项..
当一个用户选择在远程系统中播放选项时,我们的情况正好与微软相反,该选项应该在本地系统而不是远程系统中播放..使用我们自己注册的虚拟频道。其次,当用户选择“在这台计算机上播放”选项时,应该在远程系统上播放而不是在本地系统上播放,延迟低...
我们的方法:
我们刚刚创建了一个虚拟客户端 dll 并在 (HCURRENT_USER/Software/Microsoft/Terminal Server Client/Default/Addin) 注册。现在我们可以使用终端服务器创建一个虚拟通道。
问题:
第一个问题是如何将声音从终端服务器重定向到客户端(这样当一个媒体播放器在终端服务器播放时,它应该在客户端系统播放)。我们尝试使用 WASAPIS 从终端服务器捕获声音端点设备扬声器并使用 WTSVirtualWrite 将音频数据写入虚拟通道,然后在客户端我们使用 getbuffer 方法来渲染它来写入客户端端点设备,但我认为这是非常糟糕的方法,并且会出现巨大的延迟。 因此,如果我们将在终端服务器端播放的声音重定向到客户端音频设备,我们在这里的想法而不是捕获和渲染,这将是更好的方法,但是如何使用虚拟通道和终端服务器 API 或任何其他 Windows API 来执行这些实现.. 应该为此做哪些注册表更改...
第二个问题是如何向音量 Mixture 设备扬声器添加一个虚拟扬声器图标(设备扬声器会出现一个组合框,这里我们将有两个不同的扬声器图标及其属性,一个是支持的 HDRealtalk 和第二个是我们的扬声器,只有一般的扬声器属性)
注意:这里不是编写虚拟音频驱动程序或我们自己的audiodrv,而是如何实现。
第三个问题是如何支持我们自己的编解码器(如verbois)... (这里我们创建了一个 .acm 文件,但如何支持它,我们已经完成了 diff.ACM 功能,如 ACMDriverAdd、ACMDrvClose、ACMOpen,但我们不知道如何实现)...
第四个问题是如何从麦克风捕获和渲染到客户端系统(比如从终端服务器麦克风捕获到本地捕获设备并在那里播放)......
我们的要求是从 Window XP 开始的所有 Windows 操作系统都应该支持它。
【问题讨论】:
-
您绝对需要使用 RDP dll 来制作远程音响系统吗?如果遇到问题,还有其他方法可以实现,例如打开本地声音流并通过网络连接进行流式传输。
-
是的,是的,它不是强制使用 RDP dll。但我需要解释如何在没有 RDP dll 的情况下实现这一点。请告诉我其他方法。我想要一些 Elusiva 产品。elusiva.com/products/RemoteSound跨度>
-
在 C++ 方面有更多经验的人可以为您提供帮助。但正如我所说,这可以通过 1)在声音设备(例如声音输出/microhpone)上打开流 2)连接到网络主机/客户端来完成。 3) 缓冲声音流并通过网络逐位发送。您必须确保声音流畅并设计处理延迟的方法。看看像 Mumble/Murmur 这样的开源软件。它可能会给你一些好主意。