0
点赞
收藏
分享

微信扫一扫

云桌面音频经验分享

一、背景知识

1、RTP协议

有些Citrix的技术文章提到了RTP协议,引用网上对RTP的解释:“RTP只是一个协议框架,它只包含了实时应用的一些共用功能,RTP自己并不对多媒体数据块做任何处理,而只是向应用层提供一些附加信息,让应用层知道应当如何进行处理”。

云桌面音频经验分享_比特率

在Citrix技术文章中我们会看到Audio over RTPAudio over UDP这样的术语,可以认为这两个术语是等同的关系。如果Citrix云桌面通过UDP传输音频 (并非EDT),RTP协议会被使用。有时我们需要调节RTP的音频数据缓冲区(Jitter Buffer)来适应网络抖动情况。

2、云桌面的音频传输协议

在CVAD 2203 LTSR发布之前,Citrix云桌面与客户端之间传输音频数据,有三种传输协议:Audio over UDP/Audio over RTP、EDT和ICA TCP。在容忍网络拥塞和丢包、提供更好音频质量的角度,Citrix研发建议优先启用Audio over UDP,然后才是EDT,最后是ICA TCP:

Audio over UDP 》》EDT 》》ICA TCP

3、音频质量

配置过Citrix Studio音频相关策略的你,应该知道1912 LTSR的音频质量分为以下几档:

高质量:比特率约100kbps,采样频率44100 Hz

中质量:比特率约16kbps,采样频率16000Hz

低质量:比特率约11kbps,采样频率8000Hz

当我们把音频质量设为“中”,云桌面使用的音频编码器是speex;当我们把音频质量设为“高”,云桌面使用的音频编码器是Vorbis。我们可以通过修改VDA的注册表,手工调节speex和Vorbis两种编码的音频质量。

二、CWA客户端版本的选择

无论从功能、性能还是售后支持的角度,我们都建议客户端安装最新的LTSR或CR版本。尤其考虑到售后支持的因素:假如在生产部署中我们发现了Citrix Workspace App客户端的产品缺陷,Citrix产品组只会在CWA最新的LTSR或CR版本上修复缺陷。

因此,如果在生产部署中我们怀疑问题和CWA版本有关,可以在最新的LTSR或CR版本上测试问题是否发生。年初有家用户偶发遇到云桌面无声音、声音质量不佳、插拔耳麦会话无响应等问题,自从把CWA版本从1912 LTSR CU3升级到当时最新的CU7,Helpdesk接到的音频问题大大减少。

截止到写文章时,Windows客户端最新的CR版本是2205,LTSR版本是2203.1

(注:由于CWA 2203 LTSR已发布,CWA 1912 LTSR在今年3月23日开始EOM,即不再发布补丁)

若客户端是Linux CWA,并且通过Citrix Gateway连接云桌面,如果希望启用Audio over UDP,需要Linux CWA 2202或更高版本。

三、音频效果优化(Audio over UDP)

对于没有基于Citrix做过VoIP流量优化的一般软件而言,Citrix官方建议是Audio over UDP的效果要优于EDT和ICA TCP。在网络延迟和抖动情况不理想的客户端网络环境中,Audio over UDP协议能提供更稳定的音频效果。

Audio over UDP如果启用,音频流会从常规的ICA TCP流量中剥离出来,通过UDP/RTP单独承载。Audio over UDP的成功运行,依赖以下环节都配置到位:

VDA、HDX策略、客户端、Citrix Gateway、防火墙端口策略


1)VDA的UDP支持

安装VDA时切记勾上实时音频传输的选项,并配置Windows防火墙自动创建规则放行UDP端口:

云桌面音频经验分享_比特率_02

云桌面音频经验分享_客户端_03

2)HDX策略

Citrix Studio中确认以下四条策略的设置:

通过UDP协议的音频实时传输”:启用

音频质量”:中 - 语音优化

通过UDP协议的音频”:允许 (仅限于多会话VDA)

音频UDP端口范围”:保持默认值不变

其中第二条策略的缺省值是“高-高清晰度音频”,而音频质量为高时,使用的是Vorbis编码,与音频质量为中时使用的Speex编码不同。目前Audio over UDP只支持Speex编码和音频质量设为中。这个设置往往会被用户忽略。


此外,由于EDT协议也会用到UDP传输,为了避免对Audio over UDP产生干扰,或抢占Citrix ADC的DTLS通道,Citrix Studio中将HDX自适应传输关闭:

云桌面音频经验分享_客户端_04

3)客户端

  1. a)加入AD域的终端

通过AD组策略推送如下设置 (需要先导入icaclient.adm管理模板):

云桌面音频经验分享_客户端_05

  1. b)未加入AD域的终端

      如果是Windows终端:

      将icaclient.adm导入本地策略,再做a) 的设置;

      -或者-

修改StoreFront的ICA文件模板 (C:\inetpub\wwwroot\Citrix\<Store Name>\App_Data\default.ica)

云桌面音频经验分享_比特率_06

注:如果修改了default.ica模板,那么连接这个store的所有用户的音频设置都会受影响。

如果是Linux终端,同时不希望修改storefront的default.ica,可以在终端本地的module.ini中修改:

[ClientAudio]

EnableUDPAudio=true

UDPAudioPortLow=16500

UDPAudioPortHigh=16509


[WFClient]

EnableUDPThroughGateway=True


注1:default.ica的设置优先级比终端本地module.ini更高,即会覆盖module.ini的设置。


注2:上面提到的EnableUDPThroughGateway开关,需要Linux CWA 2202或更高版本,因为通过Citrix Gateway的DTLS封装Audio over UDP,是从Linux CWA 2202开始支持的。详见 https://docs.citrix.com/en-us/citrix-workspace-app-for-linux/configure-xenapp.html的“Enabling UDP Audio”一节。

4)Citrix Gateway

如果用户终端是通过Citrix Gateway连接云桌面,音频流量需要封装进DTLS协议传输,因此在Citrix Gateway的VPN Virtual Server上需要将DTLS选项启用:

云桌面音频经验分享_比特率_07

如果使用的Citrix ADC还是老版本,如10.5e,勾选DTLS选项后需要先把VPN Virtual Server上的SSL证书解绑,再重新绑定证书:

​​https://www.citrix.com/blogs/2015/04/03/udp-audio-through-a-netscaler-gateway/​​


主流版本的Citrix ADC不需要解绑和重新绑定证书的操作。

从Citrix Gateway 13.0 build 64.x开始,还可以配置专门的DTLS VPN Virtual Service,实现更高的安全性,如高级的DTLS加密算法:

​​https://docs.citrix.com/en-us/citrix-gateway/current-release/configure-dtls-virtual-server-using-ssl-virtual-server.html​​


为了将音频流量封装进DTLS协议,需要在citrix studio将会话可靠性策略启用:

云桌面音频经验分享_linux_08

5)防火墙端口策略

除了客户端和Citrix Gateway连接VDA的常规网络端口外,Audio over UDP需要放行以下的额外端口:

  1. a)客户端直连Storefront

目标

传输协议

端口

用途

终端设备

VDA

UDP

16500~16509

实时音频


  1. b)客户端通过Citrix Gateway连接


目标

传输协议

端口

用途

Gateway SNIP

VDA

UDP

16500~16509

实时音频

终端设备

Gateway VIP

UDP

443

DTLS

云桌面音频经验分享_比特率_09

6)确认Audio over UDP正常工作

  • 都正确配置后,在VDA端运行HDX Monitor,音频通道的“UDP音频传输”应为“活动“,以下截图说明Audio over UDP未启用 (从音频压缩算法是Vorbis可以推断音频质量被设为了高):
  • 云桌面音频经验分享_客户端_10
  • 还可以在音频通道中查看WMI属性,Component_RTP_Enabled和Component_RTP_InUse都应为True。以下截图来自同一个例子,Audio over UDP未启用:
  • 云桌面音频经验分享_客户端_11
  • :如果在Citrix Director的会话详细信息里看到协议为UDP,并不意味着Audio over UDP已成功启用。这里的协议显示为UDP是由于EDT启用成功了,音频流被封装在EDT协议中,并未单独剥离出来,音频效果通常不如Audio over UDP。
  • 四、其他音频效果优化(其他方法)

1)网络抖动缓冲

通过注册表,启用RTP协议数据包传输的缓冲(Jitter buffer),降低网络抖动对于RTP数据包传输稳定性的影响。

VDA

HKEY_LOCAL_MACHINE\(Wow6432Node)\SOFTWARE\Citrix\Audio

RTPJitterBuffer (REG_DWORD) = 1

客户端

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\ICA  Client\Engine\Configuration\Advanced\Modules\ClientAudio

RTPJitterBuffer  (REG_DWORD) = 1



2)降噪处理

通过注册表,启用speex音频编码的降噪处理 (speex是音频质量设为中的编码方式):

VDA

HKEY_LOCAL_MACHINE\(Wow6432Node)\SOFTWARE\Citrix\Audio

EnableDenoise (REG_DWORD) = 2

客户端

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\ICA  Client\Engine\Configuration\Advanced\Modules\ClientAudio

EnableDenoise  (REG_DWORD) = 2


注:很多使用VoIP的即时通讯和在线会议软件,都自带了降噪功能,如Teams的噪声抑制选项等等。


3)回声抑制

通过注册表,启用客户端的回声抑制功能:

客户端

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\ICA  Client\Engine\Configuration\Advanced\Modules\ClientAudio

EchoCancellation  (REG_SZ) = True


注1:如果使用1912 CU3之前的CWA版本,在音频质量策略设为中的情况下,EchoCancellation注册表会造成wfica32.exe进程异常退出,导致会话断开。此Bug在CWA 1912 CU3得到修复 [CVADHELP-14568]


注2:除了通过注册表激活软件的回声抑制,Citrix也建议用户选择自带硬件回声抑制(AEC)功能的耳麦。硬件的回声抑制效果,通常要比软件的抑制效果更彻底。


4)提高Citrix Audio Redirection Service的资源优先级

VDA中的Citrix Audio Redirection Service负责管理音频虚拟通道(CTXCAM)。对于独享桌面,可以通过Windows任务管理器、WEM或第三方桌面管理软件将Citrix Audio Redirection Service的资源优先级设为高。在一些项目中,这个调整可以消除语音断断续续的现象:

云桌面音频经验分享_客户端_12

注:如果是基于多会话的共享桌面或虚拟应用,Citrix Audio Redirection Service与其余多个服务共享使用通用的虚拟通道服务CtxSvcHost.exe,而不是单独的进程名。可以先找到对应的CtxSvcHost.exe进程,再手动提升资源优先级。

云桌面音频经验分享_比特率_13

5)调节UDP读取频率

通过注册表,调节客户端发送UDP读请求之前等待的时长,根据环境中不同的效果可以分别把值改为10/15/20/25/30进行测试:

客户端

HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Citrix\ICA  Client\Engine\Configuration\Advanced\Modules\ClientAudio

UDPCapturePeriod  (REG_SZ) = 10 ~ 30

6)调节音频的最大比特率

比特率(BitRate)即每秒传送的比特(bit)数。比特率越高,每秒传输的音频数据就越多,音质就越清晰。前面提到音频质量设为中或高时,音频编码分别为speex和vorbis,可以通过修改VDA的注册表,调节这两种编码的最大比特率:

音频质量:中

HKLM\SOFTWARE\Citrix\Audio

MaxSpeexQuality (REG_DWORD)

Value: 0 to 10  (default is 5)

音频质量:高

HKLM\SOFTWARE\Citrix\Audio

MaxVorbisQuality  (REG_DWORD)

Value: 0 to 10  (default is 2)

不同键值的比特率如下:

注:比特率越大,消耗的流量带宽越高。

五、常见问题处理

  • 1) 云桌面无声(输入或输出)
  • a)先验证客户端本地的声音输入或输出是否正常,可以在Windows终端的控制面板中进入声音设置,测试声音的输入和输出。
  • 云桌面音频经验分享_客户端_14


  1. b)如果用户外接了显示器,系统可能将显示器选为了默认的声音输出设备。
  2. 云桌面音频经验分享_客户端_15



  1. c)Windows终端的麦克风隐私设置

麦克风隐私设置可能不允许Citrix HDX Engine应用访问麦克风。在控制面板中检查。

云桌面音频经验分享_比特率_16

云桌面音频经验分享_linux_17

云桌面音频经验分享_客户端_18

  1. d)如果终端本地的声音输入和输出正常,但云桌面中无法试用麦克风,先检查CWA的麦克风和网络摄像机是否设成了自动连接:
  2. 云桌面音频经验分享_linux_19


  1. e)在云桌面的控制面板中测试声音的输入和输出设备
  2. f)云桌面中打开services.msc,检查Citrix Audio Redirection Service是否正常运行,若此服务已停止,手动启动服务,再断开会话重连。
  3. 云桌面音频经验分享_linux_20


  • 2)插拔耳机 或耳麦导致云桌面窗口无响应

有用户发现拔掉耳机并重连,云桌面仍保留着之前的耳机设备;有用户发现从第一个终端断开会话再用另一终端重连会话后,云桌面内音频设备的排列顺序不正确了。这其实是从XenDesktop 5.x时代遗留下来的问题 [LC9440],可以通过修改VDA的注册表,在会话断开时强制清除音频设备映射:

VDA

HKLM\SOFTWARE\Citrix\Audio

CleanMappingWhenDisconnect  (REG_DWORD) = 1


  • 3)Remote PC的音频设备自动被禁用

 用RemotePC发布物理机,无声。点击云桌面右下角的系统托盘打开声音属性,看到扬声器或麦克风被自动禁用了:

云桌面音频经验分享_客户端_21

可能原因1

给物理机通过命令行安装VDA时,少加了/remotepc参数。解决办法是用命令行重装VDA并加上/remotepc参数,例如:

VDAWorkstationSetup.exe /controllers "xxxxxxx.lab" /quiet /components VDA /disableexperiencemetrics /enable_hdx_ports /enable_hdx_udp_ports /enable_real_time_transport /enable_remote_assistance /remotepc /exclude "Machine Identity Service","Citrix Personalization for App-V - VDA","Citrix Supportability Tools","Citrix Files for Windows","Citrix Files for Outlook","User personalization layer","Citrix WEM Agent","Citrix MCS IODriver","Citrix VDA Upgrade Agent","Citrix Rendezvous V2" /includeadditional "Citrix Profile Management","Citrix Profile Management WMI Plugin"


可能原因2

如果更换其他的VDA版本(如VDA 1912)后,音频设备不会被自动禁用,那很可能是VDA 2203的一个已知问题(CVADHELP-20164)。此问题目前已有临时补丁,可联系Citrix原厂SE或给Citrix Tech Support开CASE获取此临时补丁验证问题。


举报

相关推荐

0 条评论