VMware Horizon

Real-Time Audio-Video (RTAV) For Horizon View, Part 2

By Peter Brown, Senior R&D Manager, VMware

For information about what’s new with Horizon Real-Time Audio-Video, read this 2023 blog.

In my last Real-Time Audio-Video (RTAV) blog, I talked about the support we added for webcams and microphone devices in VMware Horizon View Feature Pack 2. Feature packs are installed alongside the View Agent on the virtual desktops in the datacenter, and View Clients are installed on the devices used to interact with those desktops. Horizon View 5.3, Horizon View 5.3 Feature Pack 1, and the Horizon View Clients version 2.2 have just been released, and with these come support for RTAV in Linux Clients, and also a new Windows Client. I want to take this opportunity to provide some details about RTAV with respect to these new client and feature pack releases.

Linux Support for RTAV

In Linux Clients versions 2.2 or later, we now have support for RTAV. RTAV in the new Linux Clients works with Horizon 5.2 Feature Pack 2 or Horizon View 5.3 Feature Pack 1 on the View Agent side. Functionally, we have tried to keep things as similar to the existing Windows implementation as possible. By default, providing you are using PCoIP, then RTAV “should just work.”  The following sections give a brief overview of the differences in the new Linux Client, and also details about how to configure RTAV if you want to adjust any parameters from the default settings.

Supported Linux Distributions

We have run tests for RTAV on Linux on the following platforms:

  • Ubuntu 10.04
  • Ubuntu 12.04
  • SLED 11 SP3
  • RHEL 6.4

Other Linux platforms may work, too, but we have not explicitly tested them.

RTAV has a dependency on:

  • libv4l
  • libv4lconvert
  • Video4Linux2

These libraries are used to interact with the webcam devices in order for Horizon View to capture the webcam images.

USB Filtering

On previous Linux Clients, because there is no user menu to select which USB devices to forward, the Linux Client was configured to automatically forward all devices. As such, if you had a USB headset and webcam connected, then these were automatically forwarded to the guest. In doing so, RTAV would not have worked. So in Linux Client v2.2 and later, we now automatically block video and audio devices from being forwarded to the guest. This means that RTAV will work as expected, and the audio and video devices will be left local to the client from which the audio and video can be encoded.

If, however, you do need to forward an audio or video device (and do not want to use the RTAV functionality), then you need to update the Horizon View Client configuration file to permit it.

To do so, you can either explicitly include the vid/pid of the device you want to forward, or unblock the device family (or families). The configuration file on Linux should be saved in  /etc/vmware  and is called config. Create it if it doesn’t already exist.

For example, to explicitly permit a specific headset device based on its USB vid/pid:

/etc/vmware/config:

viewusb.IncludeVidPid = “Vid-047f_Pid-aa01”

Or to re-allow automatic forwarding of the audio and video devices, add the following to your configuration file (in /etc/vmware):

/etc/vmware/config:

viewusb.AllowAudioIn = “True”

viewusb.AllowVideo = “True”

NOTE: The audio and video devices are filtered by default in Linux v2.2 Clients, even if you are connecting to an old Agent version that does not support RTAV.

Linux RTAV Configuration

The defaults on Linux are the same as with Windows. Images are captured from a video device (automatically selected) at 320×240 pixels, 15fps. Audio is captured from the default system audio in the device.

On Windows, the RTAV configuration is performed in the registry. The same “key names” are used on Linux; however, the configuration is done in a config flat file:

/etc/vmware/config

If the file does not exist, then you can manually create it.

Configuration is done in the form:

rtav.<key> = “<value>”

The following shows the possible key names and some example values:

rtav.IsDisabled=”0″

rtav.srcAudioInId=”VF0415 Live! Cam Vid. IM Ultra Analogue Mono”

rtav.srcWCamFrameRate=”10″

rtav.srcWCamFrameWidth=”640″

rtav.srcWCamFrameHeight=”480″

rtav.srcWCamId=”LifeCam HD-6000″

Log files which include the RTAV information are saved here:

/tmp/vmware-<username>/vmware-mks-<pid>.log

Audio Device Selection

On Windows, the audio-in device selection is done from the Windows Sound Recording dialog. On Linux, a similar method can be used. For example, on Ubuntu, the System > Preferences > Sound dialog can be used to select the default audio-in device.

vmware-horizon-view-real-time-audio-video-sound

vmware-horizon-view-real-time-audio-video-sound-preferences

As with Windows, it is possible to also configure a preferred audio device, independent of the default audio-in device specified in Sound preferences.

First, list all the available audio devices using:

pacmd list-sources | grep device.description

then in the Horizon View Client config file (/etc/vmware/config) add:

rtav.srcAudioInId=”<pacmd list sources, properties device.description field>”

For example:

rtav.srcAudioInId=”VF0415 Live! Cam Vid. IM Ultra Analogue Mono”

One thing to watch out for with Linux is that sometimes the audio-In devices are muted by the client OS. Obviously, if the microphone is muted, then RTAV does not “hear” anything that it can send to the guest OS. So do make sure that your audio-in devices have a reasonable audio-in level set. It is worth noting that the client-side logs indicate if the audio is muted, which can help in troubleshooting audio problems. For example:

RTAV: static void AudioCaptureLin::PulseAudioSourceInfoCB(pa_context*, const pa_source_info*, int, void*) – Note, selected device channel is muted

Selecting a Webcam Device

RTAV selects a video device to use automatically. Normally this works okay; however, if you have multiple video devices on the machine, and you want to ensure a specific device is used, then you need to configure this preferred device manually.

First, you need to identify the available video devices in the log files. The RTAV log file can be found here:

/tmp/vmware-<username>/vmware-mks-<pid>.log

Search for VideoInputBase::LogDevEnum().

The following is an example of what you might see:

main| I120: RTAV: static void VideoInputBase::LogDevEnum() – 3 Device(s) found

main| I120: RTAV: static void VideoInputBase::LogDevEnum() – Name=UVC Camera (046d:0819)   UserId=UVC Camera (046d:0819)#/sys/devices/pci0000:00/0000:00:1a.7/usb1/1-3/1-3.4/1-3.4.5   SystemId=/dev/video1

main| I120: RTAV: static void VideoInputBase::LogDevEnum() – Name=gspca main driver   UserId=gspca main driver#/sys/devices/pci0000:00/0000:00:1a.7/usb1/1-3/1-3.4/1-3.4.7   SystemId=/dev/video2

main| I120: RTAV: static void VideoInputBase::LogDevEnum() – Name=Microsoft® LifeCam HD-6000 for Notebooks   UserId=Microsoft® LifeCam HD-6000 for Notebooks#/sys/devices/pci0000:00/0000:00:1a.7/usb1/1-3/1-3.6   SystemId=/dev/video0

main| W110: RTAV: static bool AudioCaptureLin::EnumCaptureDevices(MMDev::DeviceList&) – enumeration data unavailable

Let’s say you want to make sure the Microsoft LifeCam is used, then you can configure this by adding the following line to the Horizon View config file:

rtav.srcWCamId=”Microsoft® LifeCam HD-6000 for Notebooks”

Note that partial matching is used when parsing the log file, so the following would also work:

rtav.srcWCamId=”LifeCam”      or     rtav.srcWCamId=”Microsoft”

New Windows Client

The previous Windows Client was version 5.4. In the Q4 2013 release, we are shipping a new Windows Client. This is based on a more common code base with the other clients. Slightly confusing, however, is that the version of the client releases this time is v2.2. So, actually, the Windows Client has gone from v5.4 to v2.2, but v2.2 is a more recent client release. Slightly confusing, yes–but it does mean that the version numbers for all the clients are now aligned, which will allow for easier support going forward.

Functionality-wise, however, there is little different with this Windows Client release with respect to RTAV. RTAV will work in just the same way as it did with the older version 5.4 of the Windows Client. Configuration and logging are the same.

Updated Feature Pack 1 for Horizon View 5.3

On the View Agent side, Feature Pack 1 for Horizon View 5.3 carries a slightly updated virtual webcam driver and RTAV component. However, this is not a significant change from Feature Pack 2. RTAV continues to work with an older client and newer feature pack, or with a new client and older feature pack–so there is no specific need to upgrade to View 5.3 Feature Pack 1 specifically for RTAV. You may however like to do so in order to take advantage of some of the other new functionality available.

Sounds Great!–Where Can I Download This From?

The View Clients are available for download here.

You specifically need the v2.2 Linux View Client or later for PCoIP and RTAV in Linux. Linux View Clients are typically distributed by third-party vendors as part of their thin clients.

The Feature Packs can be downloaded here:

View 5.2  (and 5.2 Feature Pack 2)

View 5.3 (and 5.3 Feature Pack 1)

Well, that’s it from me for this time. I’ll write again in the future when we have further improvements and enhancements to report. Do please provide feedback or send questions about RTAV either at the bottom of this blog, or via the VMware Horizon View Community site.