I’m experimenting with the new video capabilities in Server 2012 provided by RemoteFX and the RDP 8.0 protocol. I have an HP Z220 workstation with a Xeon E3-1245 3.40GHz CPU and an nVidia Quadro 4000 GPU, this is running Windows Server 2012 with the Remote Desktop Session Host role, and the Desktop Experience feature enabled. This “server” is connected via dual 1Gbps links into a Cisco 6513 switch, and the ports are teamed using LACP/802.3ad (using Windows Server 2012 teaming). I’m using Vimeo as my source for high quality videos for testing.
RemoteFX analyses the RDP desktop and areas that are identified as containing video content are transcoded on the fly into the H.264 video standard, which is then sent to the RDP client. This technique therefore works irrespective of the actual video codec being used by the player within the RDP session, and is thus rather clever.
My initial client testing was done on my PC, Windows 7 64-bit, Intel Core2 Quad Q6600 2.40GHz CPU and nVidia GeForce 9400 GT GPU, the 6.2.9200 RDP client, and a 1Gbps connection into the same 6513 switch as the server. Video playback quality is really rather good. Full screen (on a 1280×1024 monitor) video playback is perfectly watchable. The RemoteFX Graphics Performance Monitor (perfmon) counters, viewed on the server, of Input Frames/sec and Output Frames/sec for my RDP connection each show an average of 25. Graphics Compression Rate is averaging about 95, Frame Quality jumps between 65 and 100, averaging about 85. In the RemoteFX Network, FEC Rate (Forward Error Correction) is averaging 0.8, Retransmission Rate is zero. UDP Sent Rate seems to be averaging about 40Mbps for full screen video (ok so there are black bars at the top and bottom as all the videos I’m watching are widescreen and my monitor is 4:3). Current UDP Bandwitdth is constant at 277,549 (bps), Current UDP RTT (round trip time, in ms) is basically zero, it occasionally pops up to 1 or 2. The CPU use on my PC for the Remote Desktop Connection client process (mstsc.exe) was about 20%.
I then tried a Windows 8 PC, on a 100Mbps connection via a stack of Cisco 3750 switches, with a 1Gbps link into the 6513. The RDP client version was the same, 6.2.9200. The CPU is an Intel Core2 Duo E6550 2.33GHz, the GPU is an onboard Intel Express Q35. On this PC the video playback is initially very jerky, but then after maybe ten seconds becomes smooth but the video is badly broken up, I’m not an expert when it comes to video codec stuff but I think it looks like a lot of keyframes and other data is being lost. Here’s a photo of the broken up image:
You can see how the top half of the image looks mostly ok. This is from a surfing video “Sincerely Suburbia”, the scene had just changed from one showing the sea with a large wave and you can see remnants of this in the bottom right. For this RDP connection, perfmon on the server shows roughly the same average Input Frames per second (24) but Output Frames per second starts at 24 but eventually drops to 13. Graphics Compression Rate averages about 98, Frame Quality jumps around between about 40 and 100, averaging 85. FEC Rate during the intial few seconds of “jerky” video is low at around 1-5 but jumps to around 10 when the video starts to break up. Retransmission rate is zero, Loss Rate is averaging 7.4 (%), Current UDP Bandwidth is fairly stable at about 14,000, Current UDP RTT is averaging about 7 (min 1, max 25). CPU use on the client PC is about 50%.
On a Windows 7 PC on a 100Mbps connection the video remains “jerky” and never starts to break up.
I’ve tried the Windows 8 PC connected to the server via a small 8 port 100Mbps switch, and the video is fine, albeit it at slightly lower quality. I’ve also forced the RemoteFX data to use TCP rather than UDP by setting the “Select RDP Transport Protocols” computer group policy to “TCP Only”. This makes the video playback better even going via the 3750 switch stack, albeit not quite as smooth as on my 1Gbps PC.
I’m currently working with my network experts to try and work out what’s going with the UDP data. Will update this post if we find anything.