Encountered this with Windows 10 (1903 and 1909).
Manifestations of the problem:
RDP session updates oddly, distorting audio and video.
RDP session hard-freezes. Client window is responsive, but the content within it is essentially a static image.
Sometimes the RDP session recovers, resuming normal function.
Other times the RDP session seems to hang indefinitely. No error messages seen; client window can be closed and restarted normally.
Speculated causation:
Work-arounds:
No single work-around seems complete. For example, I've had RDP completely freeze even in TCP-only mode. However, TCP-only coupled with trying to improve network connectivity or/and reducing load (such as video and audio) seems to greatly reduce the incident rate.
Partial work-around: Improve network connectivity.
A direct local connection may be relatively reliable.
Partial work-around: Reduce network strain.
Reducing RDP session settings, avoiding audio, and avoiding video seem to help.
Full-ish work-around: Disable UDP.
RDP seems to behave a lot better with TCP than UDP. Switching to TCP-only does seem a bit more laggy, but the lag is more ordered (which is strangely nicer than the erratic lag) and I've yet to encounter an indefinite hang.
Three ways to implement (probably mutually compatible, but probably only need to do one):
On client: Local Group Policy Editor
→ Local Computer Policy
→ Computer Configuration
→ Administrative Templates
→ Windows Components
→ Remote Desktop Services
→ Remote Desktop Connection Client
→ Turn Off UDP On Client
→ Enabled
On server [untested]: Local Group Policy Editor
→ Local Computer Policy
→ Computer Configuration
→ Administrative Templates
→ Windows Components
→ Remote Desktop Services
→ Remote Desktop Session Host
→ Connections
→ Select RDP transport protocols
→ Enabled
→ Use only TCP
Not recommended (tweaking Registry Editor)
Source: @robbiefan's answer.
On client: Registry Editor
→ Computer
→ HKEY_LOCAL_MACHINE
→ SOFTWARE
→ Policies
→ Microsoft
→ Windows NT
→ Terminal Services
→ Client
→ [right-click] → New → DWORD (32-bit) Value
→ Name: fClientDisableUDP
→ Value data: 1
→ Base: Decimal
Note: This seems to have worked for me when I tried it, but can't verify much beyond that. I reverted this solution after trying it, preferring to rely on the Group Policy instead.
Discussion: Background
I'm fuzzy on the details, but in short, I think there was something about some bugs being discovered in the RDP protocol as implemented prior to Windows 10 1903:
CVE-2019-1181 | Remote Desktop Services Remote Code Execution Vulnerability;
CVE-2019-1182 | Remote Desktop Services Remote Code Execution Vulnerability.
Then Windows 10 1903 was meant to fix these, I think.
Apparently the new version of the RDP protocol has some issues, e.g. this one. Disabling UDP (to force TCP) seems to be a decent enough work-around, though the protocol can feel a bit laggier. That said, the older RDP protocol also had some rather obnoxious audio latency problems that seem to be a lot better now, so, personally, I'm happy about that!