问题描述
|
我们的要求是开发一种远程声音系统,该系统应支持从WindowsXP开始的所有Windows操作系统。
就像http://www.elusiva.com/products/RemoteSound/
我想在这里更清楚地描述功能性对象...
Microsoft使用虚拟通道在RDP上有3种不同的选择
在这台电脑上播放
不要玩
在远程系统中播放
为此,microft使用RdpendP.dll和虚拟通道来控制这三个差异。选项..
当一个用户选择应该在本地系统而非远程系统中播放的“在远程系统中播放”选项时,我们的情况与Microsoft相反。.使用我们已经注册的虚拟通道。其次,当用户选择“在此计算机上播放”选项时,应在远程系统而不是低延迟的本地系统中播放...
我们的方法:
我们只创建了一个虚拟客户端dll,并在(HCURRENT_USER / Software / Microsoft / Terminal Server Client / Default / Addin)中注册。现在,我们可以使用终端服务器创建虚拟通道了。
问题:
第一个问题是如何将声音从终端服务器重定向到客户端(因此,当一个媒体播放器在终端服务器上播放时,应在客户端系统上播放)。我们尝试使用WASAPIS从终端服务器端点设备扬声器捕获声音并使用WTSVirtualWrite将音频数据写入虚拟通道,然后在客户端使用getbuffer方法编写客户端终结点设备来呈现音频数据,但是我认为这是一种非常糟糕的方法,并且将会出现巨大的延迟。
因此,如果我们将终端服务器端播放的声音重定向到客户端音频设备,而不是捕获和渲染,我们会怎么想呢?这是更好的方法,但是如何使用虚拟通道和终端服务器API或任何其他Windows API来实现这些实现..
为此,应该对注册表进行哪些更改...
第二个问题是如何在音量混合设备扬声器上添加一个虚拟扬声器图标(一个组合框会出现在设备扬声器上,这里我们将有两个带属性的差异扬声器图标,一个是支持HDRealtalk的扬声器,另一个是我们的扬声器,仅限演讲者财产)
注意:此处不编写虚拟音频驱动程序或我们自己的audiodrv,而是如何实现这一点。
第三个问题是如何支持我们自己的编解码器(如verbois)...
(这里我们创建了一个.acm文件,但是如何支持它,我们已经完成了ACMDriverAdd,ACMDrvClose,ACMOpen等ACM功能的比较,但是我们没有实现该功能的想法)...
第四个问题是如何从麦克风捕获和渲染到客户端系统(就像从终端服务器麦克风捕获到本地捕获设备并在其中回放一样)...
我们的要求就像从Window XP开始的所有Windows操作系统都应该支持它。
解决方法
您总是可以为此使用Icecast。只需要一些脚本和edcast,就应该很贴心。
其他选项包括Mumble。