Skip to content

Commit 56362f2

Browse files
authored
Merge pull request #310831 from henikaraa/patch-37
Refine media optimization section and clean up text
2 parents 5d18a9c + 1def45f commit 56362f2

2 files changed

Lines changed: 265 additions & 0 deletions

File tree

Lines changed: 263 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,263 @@
1+
---
2+
title: Optimize audio calling from within an azure virtual desktop VDI environment
3+
titleSuffix: An Azure Communication Services article
4+
description: This article describes how to place audio Calls that are hosted and managed on an Azure Virtual Desktop. Environment and use VDI technologies to manage the full call workflow.
5+
author: sloanster
6+
ms.author: micahvivion
7+
services: azure-communication-services
8+
ms.date: 10/30/2025
9+
ms.topic: quickstart
10+
ms.service: azure-communication-services
11+
ms.subservice: calling
12+
ms.custom: mode-other, devx-track-js
13+
---
14+
15+
# Place audio calls from Azure Virtual Desktop
16+
17+
[!INCLUDE [Public Preview Notice](../../includes/public-preview-include.md)]
18+
19+
This document explains how to enable and optimize calling scenarios using Azure Communication Services (ACS) within Virtual Desktop Infrastructure (VDI). It covers setup, workflows, limitations, requirements, and troubleshooting for IT professionals, business leaders, and technical teams.
20+
21+
## What is VDI?
22+
23+
VDI stands for **Virtual Desktop Infrastructure** — a technology that allows users to access a desktop operating system hosted on a centralized server. Instead of running the OS locally on your device, you're essentially streaming a desktop experience from the cloud or a data center.
24+
25+
## What VDI Does
26+
27+
- **Centralizes desktop environments**: All desktops are hosted on virtual machines in a data center.
28+
- **Delivers remote access**: Users connect to their virtual desktops via a client device (PC, tablet, thin client, etc.).
29+
- **Separates hardware from experience**: You can run a powerful Windows desktop on a lightweight device.
30+
31+
## Why Businesses Use VDI
32+
33+
Businesses adopt Virtual Desktop Infrastructure (VDI) for a wide range of strategic and operational benefits. By centralizing desktop environments on secure servers, VDI enhances data protection—user IP addresses are masked, and sensitive information remains within the corporate network, reducing exposure to external threats. It streamlines software deployment and updates, allowing IT teams to roll out applications or patches across hundreds of virtual desktops simultaneously, without needing to touch individual devices. VDI also simplifies compliance with regulatory standards by enabling centralized control over data access, storage, and auditing, which is especially critical in industries like healthcare, finance, and legal services. Moreover, VDI supports scalability and flexibility, making it easy to onboard new employees, support seasonal workloads, or enable remote work without investing in high-end hardware. With built-in disaster recovery options and centralized management, VDI empowers organizations to maintain business continuity while reducing operational complexity and cost
34+
35+
## **Common Use Cases for VDI Calling**
36+
37+
| **Scenario** | **Description** |
38+
|-------------------------------------|--------------------------------------------------------------------------------|
39+
| Contact Centers & Customer Support | Secure access to CRM and call management; centralized analytics and compliance |
40+
| Remote & Hybrid Workforces | Softphone apps (Teams, Zoom, Jabber) from any device; secure call data |
41+
| Healthcare & Telemedicine | Secure video consultations; HIPAA compliance |
42+
| Financial Services & Trading Floors | High-volume calls; multi-monitor setups; secure platforms |
43+
| Legal & Compliance Teams | Confidential calls; centralized call logs and recordings |
44+
| Global Teams & Offshore Ops | Seamless collaboration; unified communications; privacy protection |
45+
46+
## Enabling Calling Experiences on Azure Virtual Desktop
47+
48+
To support real-time calling functionality from an Azure Virtual Desktop (AVD) virtual machine, several components must be installed and configured across both the local endpoint and the virtual desktop environment. The key components required for optimized media redirection and seamless communication include:
49+
50+
### Remote Desktop Client (Windows App)
51+
- Installed on the **local endpoint device**. This is the computer that the local user connects to their AVD instance.
52+
- Establishes the remote session and **redirects local peripherals** (microphone, camera, speakers)
53+
- Enables **optimized media redirection (OMR)** for low-latency, high-quality real-time communication
54+
- To enable Azure Communication Services (ACS) calling from a Virtual Desktop Infrastructure (VDI) environment, the Remote Desktop Client (Windows App) must be properly installed and configured on the local endpoint device — the physical machine used by the end user to connect to their Azure Virtual Desktop (AVD) session.See [here](/windows-app/overview) for more details on the Windows App.
55+
> [!NOTE]
56+
> Calling to an Azure Virtual Desktop using the Azure Communication Services WebJS Calling SDK is only supported on the Windows version of the Windows App. Other platform versions (e.g., macOS, web, mobile) do not support this functionality.
57+
58+
### Media Optimization Host (MMR Host)
59+
- Installed on the **AVD virtual machine**
60+
- Acts as a bridge between the Remote Desktop Client and the browser extension
61+
- Offloads media processing to the local endpoint, reducing **latency** and **CPU usage** on the VM
62+
- **Installing the Media Optimization Host for AVD** To enable media optimization for calling scenarios using Azure Communication Services (ACS) on Azure Virtual Desktop (AVD), you must install the Media Optimization component on the AVD session host. For detailed installation steps and prerequisites, refer to the [installation instructions for multimedia redirection on session hosts](/azure/virtual-desktop/multimedia-redirection-video-playback-calls?tabs=intune&pivots=azure-virtual-desktop#install-multimedia-redirection-on-session-hosts).
63+
64+
### Web Plugin Browser Extension
65+
- Installed in the **browser** (Microsoft Edge or Google Chrome) on the AVD VM.
66+
- Interfaces with the MMR Host to support **device enumeration** and **media routing**
67+
- Required for enabling calling features in browser-based communication platforms
68+
- **Install the Web Plugin Extension on the Azure Virtual Desktop VM** The Web plugin must be installed directly on the AVD VM instance. For complete installation instructions and guidance on managing the browser extension centrally, please refer to the official Microsoft documentation on how to [enable and manage the browser extension centrally](/azure/virtual-desktop/multimedia-redirection-video-playback-calls?tabs=intune&pivots=azure-virtual-desktop#enable-and-manage-the-browser-extension-centrally).
69+
70+
## Supported Features & Limitations
71+
72+
| **Feature** | **Supported in VDI?** | **Notes** |
73+
|--------------------------|-----------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
74+
| Audio Calling | Yes | Advanced audio effects (noise suppression, echo cancellation) supported |
75+
| Video Calling | No | Not currently supported with ACS over VDI |
76+
| Raw Media Stream | No | Real-time volume visualization not available |
77+
| Media Capture/WebRTC API | No | Direct access not supported; affects low-level device control |
78+
79+
> [!IMPORTANT]
80+
> Using Azure Communication Service WebJS to make calls to an Azure Virtual Desktop is in **public preview**. You must use calling versions [1.42.2-beta.1](https://www.npmjs.com/package/@azure/communication-calling/v/1.42.2-beta.1) version or higher.
81+
82+
## VDI Communication Workflow
83+
84+
The following outlines the process of a standard ACS Calling session within a VDI-enabled environment in a step-by-step procedure:
85+
86+
1. **User Launches Remote Desktop Session**
87+
- The user opens the Remote Desktop Client (Windows App) on their local machine.
88+
- A session is initiated with the VM where the ACS Calling application is hosted.
89+
2. **Device Redirection**
90+
- The Remote Desktop Client redirects local audio/video devices (mic, camera, speakers) to the VM.
91+
- These devices become available to the browser inside the VM.
92+
3. **ACS Calling SDK Initialization**
93+
- The user opens a browser on the VM and navigates to the ACS Calling-enabled web app.
94+
- The Web Plugin Extension activates and interfaces with the MMR host.
95+
4. **Call Setup**
96+
- The ACS Calling SDK initiates a call using Azure Communication Services.
97+
5. **Media Optimization**
98+
- The SDK forwards call operations API to the local endpoint via MMR host.
99+
- Audio is rendered locally, reducing latency and improving quality.
100+
6. **In-Call Experience**
101+
- The user experiences real-time communication with minimal delay.
102+
- Device switching and other features are supported via the plugin and MMR host.
103+
7. **Call Termination**
104+
- When ending the call, the SDK cleans up media sessions.
105+
- The MMR host and plugin gracefully disconnect and release resources.
106+
107+
## Audio Effects Support in VDI audio calling scenarios
108+
109+
Azure Communication Services (ACS) supports advanced **audio effects** such as **noise suppression** and **echo cancellation**, which are valuable in **call center environments running on Virtual Desktop Infrastructure (VDI)**. **Deep Noise Suppression**. These enhancements help improve audio quality during calls and recordings, even within the constraints of VDI.
110+
111+
## System & Infrastructure Requirements
112+
113+
- **Operating System:** Windows 11 or later (latest stable release recommended)
114+
- **Virtual Machine:** Hosted on Azure Virtual Desktop (AVD); only supported versions compatible
115+
- **Remote Desktop Client:** Latest supported version required; must allow network access to res.public.onecdn.static.microsoft
116+
- **ACS SDK:** Use supported versions validated for VDI scenarios; update regularly
117+
118+
## How to enable VDI optimization from the VM perspective
119+
120+
**Enable the VDI3**
121+
122+
```javascript
123+
new CallClient({
124+
vdi3: {
125+
enabled: true
126+
}
127+
128+
});
129+
```
130+
The default value is false.
131+
132+
**The call object isn't immediately accessible when the call is created with synchronous functions**
133+
134+
There are two ACS APIs that create a call object but are synchronous functions *startCall* and *join* :
135+
```javascript
136+
startCall(participants: (CommunicationUserIdentifier \| PhoneNumberIdentifier \| MicrosoftTeamsAppIdentifier \| UnknownIdentifier)[], options?: StartCallOptions): Call;
137+
startCall(participants: (CommunicationIdentifier)[], options?: StartCallOptions): Call;
138+
join(groupLocator: GroupLocator, options?: JoinCallOptions): Call;
139+
join(groupChatCallLocator: GroupChatCallLocator, options?: JoinCallOptions): Call;
140+
join(meetingLocator: TeamsMeetingLinkLocator, options?: JoinCallOptions): Call;
141+
join(meetingLocator: TeamsMeetingIdLocator, options?: JoinCallOptions): Call;
142+
join(meetingLocator: MeetingLocator, options?: JoinCallOptions): Call;
143+
join(roomLocator: RoomLocator, options?: JoinCallOptions): Call;
144+
```
145+
These two APIs return a call object. However, due to the asynchronous nature of VDI remoting, some of the properties in the call object aren't available when the function call returns.
146+
147+
To address this issue, the ACS Calling SDK blocks the operation by throwing an error until the call object is fully initialized.
148+
```javascript
149+
"CALL_INITIALIZING": {
150+
message": "The call object is initializing",
151+
"code": 400,
152+
"subCode": 46604,
153+
"resultCategories": [
154+
"ExpectedError"
155+
]
156+
}
157+
```
158+
The app should subscribe to callsUpdated event.
159+
In VDI3 scenario, when the call is initiated, the SDK fires callsUpdated event and put the call object in the added argument.
160+
```javascript
161+
callAgent.on('callsUpdated', e => {
162+
e.added.forEach(call => {
163+
// call object has been initialized
164+
});
165+
});
166+
//...
167+
// join() returns a call object, but don't use the call object now
168+
169+
callAgent.join({ groupId: this.destinationGroup.value }, callOptions);
170+
171+
**The callAgent cannot be used after the RDP recovers from disconnection**
172+
```
173+
Currently, the MMR doesn't keep the state after RDP connection has dropped. The states between the thin client and VM aren't synchronized in this case.
174+
If the RDP is disconnected during an ACS call, the SDK fires stateChanged event and marks the call as disconnected.
175+
The code/subcode is 0/4521
176+
```javascript
177+
{
178+
callControllerCode: 0,
179+
callControllerSubCode: 4521,
180+
phrase: 'call ended due to RDP disconnection',
181+
resultCategories: [skype.calling.ResultCategory.ExpectedError]
182+
}
183+
```
184+
185+
Any operation on the Call/CallAgent/DeviceManager object results in an error.
186+
```javascript
187+
"REMOTE_STACK_TERMINATED": {
188+
message": "The remote stack has been terminated. Re-initialize the CallClient",
189+
"code": 500,
190+
"subCode": 46605,
191+
"resultCategories": [
192+
"UnexpectedClientError"
193+
]
194+
}
195+
```
196+
197+
The application has to create a new CallClient and a CallAgent.
198+
199+
## FAQ
200+
201+
### Error: **The MMR extension isn't loaded** (Browser Debug Console)
202+
203+
This error indicates that the Microsoft Multimedia Redirection (MMR) extension is either not installed, not enabled, or not properly configured.
204+
205+
1. **Verify Extension Installation**
206+
- Ensure the MMR browser extension is installed and enabled in your browser (Chrome or Edge).
207+
- You can find installation links in the FAQ section for missing extensions.
208+
209+
2. **Enable Call Redirection**
210+
- Confirm that the **"Enable call redirection for all sites"** setting is turned on.
211+
212+
3. **Check Registry Key (Thin Clients)**
213+
- If the call redirection option is missing, verify that the required registry key is set on the thin client.
214+
215+
- For detailed instructions, refer to the official documentation:
216+
[Multimedia redirection for video playback and calls in a remote session – Microsoft Learn](/azure/virtual-desktop/multimedia-redirection-video-playback-calls?tabs=intune&pivots=azure-virtual-desktop#enable-call-redirection-for-all-sites-for-testing)
217+
218+
4. **Restart Browser or Restart the Remote Desktop Client app**
219+
- If you update registry key, you need to close existing Remote Desktop Client app and reopen it
220+
- If you update the browser extension or extension configuration, you need to restart the browser.
221+
222+
### **MsMMRHostInstaller_...msi installation failed**
223+
This error isn't expected and typically indicates an issue during the installation process. To help us diagnose the problem, collect and share the relevant log files.
224+
Where to Find the Logs. The default location to navigate to:
225+
C:\Users\<your-username>\AppData\Local\Temp
226+
- Look for files with the prefix MSI (example MSI37700.LOG)
227+
- Sort the folder by timestamp to locate the most recent logs related to the failed installation.
228+
- Additionally, check for the presence of:
229+
MsRDCMMRHostInstall.log
230+
- If this file exists, include it as well—it contains detailed information about the host installer process.
231+
232+
Once you've gathered the logs, share them with your support contact or engineering team for further analysis. These files are essential for identifying the root cause and determining the appropriate fix
233+
234+
### **The MMR extension isn't installed**
235+
The Microsoft Multimedia Redirection (MMR) browser extension is required for proper functionality and should be installed automatically when running the `MsMMRHostInstaller`.
236+
237+
1. **Ensure Browsers Are Closed During Installation**
238+
- Before running `MsMMRHostInstaller`, make sure all browser windows (Chrome, Edge, etc.) are closed.
239+
- Open browsers can prevent the extension from being installed correctly.
240+
2. **Manual Installation (if automatic install fails)**
241+
- If the extension is still missing after installation, you can install it manually from the appropriate browser store:
242+
243+
- **Chrome**:
244+
[Microsoft Multimedia Redirection – Chrome Web Store](https://chromewebstore.google.com/detail/microsoft-multimedia-redi/lfmemoeeciijgkjkgbgikoonlkabmlno)
245+
246+
- **Edge**:
247+
[Microsoft Multimedia Redirection – Edge Add-ons](https://microsoftedge.microsoft.com/addons/detail/microsoft-multimedia-redi/joeclbldhdmoijbaagobkhlpfjglcihd)
248+
249+
3. **Verify Installation**
250+
- After installation, restart your browser and confirm the extension appears in your browser’s extension list.
251+
252+
### **Errors thrown after Remote Desktop has been disconnected and reconnected**
253+
You may encounter errors after reconnecting to a Remote Desktop session. This behavior is **expected** due to how the Azure Communication Services (ACS) SDK handles connection timeouts.
254+
255+
- When a Remote Desktop session is disconnected or ACS messages time out (typically after 30 seconds), the SDK triggers a **call disconnect event**.
256+
- After this event, any further operations on the existing `CallClient` or `CallAgent` will fail.
257+
258+
To recover from this state:
259+
260+
1. Create a new instance of `CallClient`.
261+
2. Use the new `CallClient` to create a fresh `CallAgent`.
262+
263+
This guarantees that your application reestablishes communication seamlessly after a Remote Desktop reconnection.

articles/communication-services/toc.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -510,6 +510,8 @@ items:
510510
href: concepts/detailed-call-flows.md
511511
- name: Integrate with Azure ExpressRoute
512512
href: tutorials/integrate-express-route.md
513+
- name: Use VDI to make audio calls from Azure Virtual Desktop
514+
href: quickstarts/voice-video-calling/calling-from-virtual-desktop-infrastructure.md
513515
- name: Advanced audio and video features
514516
items:
515517
- name: Music mode

0 commit comments

Comments
 (0)