Raw New Markdown
Generating updated version of doc...
Rendered New Markdown
Generating updated version of doc...
---
title: Tutorial - Migrate from Twilio Video to Azure Communication Services
titleSuffix: An Azure Communication Services tutorial
description: Learn how to migrate a calling product from Twilio Video to Azure Communication Services.
author: sloanster
services: azure-communication-services
ms.author: micahvivion
ms.date: 01/26/2024
ms.topic: how-to
ms.service: azure-communication-services
ms.subservice: calling
ms.custom: template-how-to
zone_pivot_groups: acs-plat-web-ios-android
---
# Migrate from Twilio Video to Azure Communication Services
This article describes how to migrate an existing Twilio Video implementation to the [Azure Communication Services Calling SDK](../concepts/voice-video-calling/calling-sdk-features.md). Both Twilio Video and Azure Communication Services Calling SDK are cloud-based platforms that enable developers to add voice and video calling features to their web applications.
However, there are some key differences between them that may affect your choice of platform or require some changes to your existing code if you decide to migrate. In this article, we compare the main features and functions of both platforms and provide some guidance on how to migrate an existing Twilio Video implementation to Azure Communication Services Calling SDK.
## Key features available in Azure Communication Services Calling SDK
| **Feature** | **Web (JavaScript)** | **iOS** | **Android** | **Platform neutral** |
|----------------------------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------|
| **Install** | [✔️](../quickstarts/voice-video-calling/getting-started-with-calling.md?tabs=uwp&pivots=platform-web#install-the-package) | [✔️](../quickstarts/voice-video-calling/getting-started-with-calling.md?tabs=uwp&pivots=platform-ios#install-the-package-and-dependencies-with-cocoapods) | [✔️](../quickstarts/voice-video-calling/getting-started-with-calling.md?tabs=uwp&pivots=platform-android#install-the-package) | |
| **Import** | [✔️](../quickstarts/voice-video-calling/getting-started-with-calling.md?tabs=uwp&pivots=platform-web#install-the-package) | [✔️](../quickstarts/voice-video-calling/getting-started-with-calling.md?tabs=uwp&pivots=platform-ios#install-the-package-and-dependencies-with-cocoapods) | [✔️](../quickstarts/voice-video-calling/getting-started-with-calling.md?tabs=uwp&pivots=platform-android#install-the-package) | |
| **Auth** | | | | [✔️](../quickstarts/identity/access-tokens.md?tabs=windows&pivots=platform-azportal) |
| **Join** | [✔️](../how-tos/calling-sdk/manage-calls.md?pivots=platform-web#join-a-room-call) | [✔️](../how-tos/calling-sdk/manage-calls.md?pivots=platform-ios#join-a-room-call) | [✔️](../how-tos/calling-sdk/manage-calls.md?pivots=platform-android#join-a-room-call) | |
| **Start Audio/Speaker** | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-web#device-management) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-ios#manage-devices) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-android#device-management) | |
| **Mute** | [✔️](../how-tos/calling-sdk/manage-calls.md?pivots=platform-web#mute-and-unmute) | [✔️](../how-tos/calling-sdk/manage-calls.md?pivots=platform-ios#mute-and-unmute) | [✔️](../how-tos/calling-sdk/manage-calls.md?pivots=platform-android#mute-and-unmute) | |
| **Unmute** | [✔️](../how-tos/calling-sdk/manage-calls.md?pivots=platform-web#mute-and-unmute) | [✔️](../how-tos/calling-sdk/manage-calls.md?pivots=platform-ios#mute-and-unmute) | [✔️](../how-tos/calling-sdk/manage-calls.md?pivots=platform-android#mute-and-unmute) | |
| **Start Video** | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-web#start-and-stop-sending-local-video-while-on-a-call) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-ios#get-a-local-camera-preview) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-android#start-and-stop-sending-local-video) | |
| **Stop Video** | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-web#start-and-stop-sending-local-video-while-on-a-call) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-ios#get-a-local-camera-preview) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-android#start-and-stop-sending-local-video) | |
| **Virtual Background** | [✔️](../quickstarts/voice-video-calling/get-started-video-effects.md?pivots=platform-web) | [✔️](../quickstarts/voice-video-calling/get-started-video-effects.md?pivots=platform-ios) | [✔️](../quickstarts/voice-video-calling/get-started-video-effects.md?pivots=platform-android) | |
| **Render User Video** | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-web#render-remote-participant-videoscreensharing-streams) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-ios#render-remote-participant-video-streams) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-android#render-remote-participant-video-streams) | |
| **Recording** | | | | [✔️](../concepts/voice-video-calling/call-recording.md) |
| **Network Bandwidth Management** | [✔️](../quickstarts/voice-video-calling/get-started-video-constraints.md?pivots=platform-web) | [✔️](../quickstarts/voice-video-calling/get-started-video-constraints.md?pivots=platform-ios) | [✔️](../quickstarts/voice-video-calling/get-started-video-constraints.md?pivots=platform-android) | |
| **Quality of Service** | | | | [✔️](../concepts/voice-video-calling/manage-call-quality.md) |
| **Data Center Selection** | | | | [✔️](../concepts/detailed-call-flows.md#call-flow-principles) |
| **Preview** | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-web.md#local-camera-preview) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-ios#get-a-local-camera-preview) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-android#start-and-stop-sending-local-video) | |
| **Security** | | | | [✔️](../concepts/detailed-call-flows.md#media-encryption) |
| **Networking** | | | | [✔️](../concepts/voice-video-calling/network-requirements.md) |
| **Screen Share** | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-web#start-and-stop-screen-sharing-while-on-a-call) | | | |
| **Rest APIs** | | | | [✔️](/rest/api/communication/) |
| **Webhooks** | | | | [✔️](/azure/event-grid/communication-services-voice-video-events) |
| **Raw Data** | [✔️](../quickstarts/voice-video-calling/get-started-raw-media-access.md?pivots=platform-web) | [✔️](../quickstarts/voice-video-calling/get-started-raw-media-access.md?pivots=platform-ios) | [✔️](../quickstarts/voice-video-calling/get-started-raw-media-access.md?pivots=platform-android) | |
| **Codecs** | | | | [✔️](../concepts/voice-video-calling/about-call-types.md#supported-video-standards) |
| **WebView** | | [✔️](../quickstarts/voice-video-calling/get-started-webview.md?pivots=platform-ios) | [✔️](../quickstarts/voice-video-calling/get-started-webview.md?pivots=platform-android) | |
| **Video Devices** | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-web#device-management) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-ios#manage-devices) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-android#device-management) | |
| **Speaker Devices** | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-web#set-the-default-devices) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-ios#manage-devices) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-android#device-management) | |
| **Microphone Devices** | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-web#set-the-default-devices) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-ios#manage-devices) | [✔️](../how-tos/calling-sdk/manage-video.md?pivots=platform-android#device-management) | |
| **Data Channel API** | [✔️](../quickstarts/voice-video-calling/get-started-data-channel.md?pivots=platform-web) | [✔️](../quickstarts/voice-video-calling/get-started-data-channel.md?pivots=platform-ios) | [✔️](../quickstarts/voice-video-calling/get-started-data-channel.md?pivots=platform-android) | |
| **Analytics/Video Insights** | | | | [✔️](../concepts/analytics/insights/voice-and-video-insights.md) |
| **Diagnostic Tooling** | | | | [✔️](../concepts/voice-video-calling/call-diagnostics.md) |
| **Reports** | | | | [✔️](../concepts/analytics/enable-logging.md) |
| **CallKit (iOS Only)** | | [✔️](../how-tos/calling-sdk/callkit-integration.md) | | |
| **Picture-in-picture** | | [✔️](../how-tos/ui-library-sdk/picture-in-picture.md?tabs=kotlin&pivots=platform-ios) | [✔️](../how-tos/ui-library-sdk/picture-in-picture.md?tabs=kotlin&pivots=platform-android) | |
::: zone pivot="platform-web"
[!INCLUDE [Migrating to ACS on WebJS SDK](./includes/twilio-to-acs-video-webjs-tutorial.md)]
::: zone-end
::: zone pivot="platform-ios"
[!INCLUDE [Migrating to ACS on iOS SDK](./includes/twilio-to-acs-video-ios-tutorial.md)]
::: zone-end
::: zone pivot="platform-android"
[!INCLUDE [Migrating to ACS on Android SDK](./includes/twilio-to-acs-video-android-tutorial.md)]
::: zone-end