Démarrage rapide : diffusion audio côté serveur
Important
Les fonctionnalités décrites dans cet article sont actuellement en préversion publique. Cette préversion est fournie sans contrat de niveau de service et n’est pas recommandée pour les charges de travail de production. Certaines fonctionnalités peuvent être limitées ou non prises en charge. Pour plus d’informations, consultez Conditions d’Utilisation Supplémentaires relatives aux Évaluations Microsoft Azure.
Commencez à utiliser des flux audio par le biais de l’API de diffusion audio Azure Communication Services. Ce guide de démarrage rapide part du principe que vous connaissez déjà les API d’automatisation des appels pour créer une solution de routage des appels automatisé.
Les fonctionnalités décrites dans ce guide de démarrage rapide sont actuellement en préversion publique.
Prérequis
- Un compte Azure avec un abonnement actif. Pour plus de détails, consultez Créez un compte gratuitement.
- Une ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services.
- Une nouvelle application de service web créée à l’aide du Kit de développement logiciel (SDK) Automatisation des appels.
- Dernière version de la bibliothèque .NET pour votre système d’exploitation.
- Serveur websocket qui peut envoyer et recevoir des flux multimédias.
Configurer un serveur WebSocket
Azure Communication Services nécessite que votre application serveur configure un serveur WebSocket pour diffuser de l’audio en temps réel. WebSocket est un protocole normalisé qui fournit un canal de communication en duplex intégral sur une seule connexion TCP.
Vous pouvez consulter la documentation ici pour en savoir plus sur les WebSockets et leur utilisation.
Réception et envoi de données de streaming audio
Il existe plusieurs façons de commencer à recevoir le flux audio, qui peut être configuré à l’aide de l’indicateur de startMediaStreaming
dans la configuration de mediaStreamingOptions
. Vous pouvez également spécifier le taux d’échantillonnage souhaité utilisé pour recevoir ou envoyer des données audio à l’aide du paramètre audioFormat
. Actuellement, les formats pris en charge sont PCM 24K mono et PCM 16K mono, avec la valeur par défaut PCM 16K mono.
Pour activer le streaming audio bidirectionnel, où vous envoyez des données audio dans l’appel, vous pouvez activer l’indicateur de EnableBidirectional
. Pour plus d’informations, reportez-vous aux spécifications de l’API.
Démarrez la diffusion audio en continu vers votre serveur web au moment de répondre à l’appel
Activez la diffusion audio automatique lorsque l’appel est établi en définissant l’indicateur startMediaStreaming: true
.
Ce paramètre garantit que le streaming audio démarre automatiquement dès que l’appel est connecté.
var mediaStreamingOptions = new MediaStreamingOptions(
new Uri("wss://YOUR_WEBSOCKET_URL"),
MediaStreamingContent.Audio,
MediaStreamingAudioChannel.Mixed,
startMediaStreaming: true) {
EnableBidirectional = true,
AudioFormat = AudioFormat.Pcm24KMono
}
var options = new AnswerCallOptions(incomingCallContext, callbackUri) {
MediaStreamingOptions = mediaStreamingOptions,
};
AnswerCallResult answerCallResult = await client.AnswerCallAsync(options);
Quand Azure Communication Services reçoit l’URL de votre serveur WebSocket, elle établit une connexion à celle-ci. Une fois la connexion établie, la diffusion en continu est lancée.
Démarrez la diffusion audio en continu vers votre serveur web pendant qu’un appel est en cours
Pour démarrer la diffusion multimédia en continu pendant l’appel, vous pouvez utiliser l’API. Pour ce faire, définissez le paramètre startMediaStreaming
sur false
(qui est la valeur par défaut) et ultérieurement dans l’appel, vous pouvez utiliser l’API de démarrage pour activer le streaming multimédia.
var mediaStreamingOptions = new MediaStreamingOptions(
new Uri("wss://<YOUR_WEBSOCKET_URL"),
MediaStreamingContent.Audio,
MediaStreamingAudioChannel.Mixed,
startMediaStreaming: false) {
EnableBidirectional = true,
AudioFormat = AudioFormat.Pcm24KMono
}
var options = new AnswerCallOptions(incomingCallContext, callbackUri) {
MediaStreamingOptions = mediaStreamingOptions,
};
AnswerCallResult answerCallResult = await client.AnswerCallAsync(options);
Start media streaming via API call
StartMediaStreamingOptions options = new StartMediaStreamingOptions() {
OperationContext = "startMediaStreamingContext"
};
await callMedia.StartMediaStreamingAsync();
Arrêter le streaming audio
Pour arrêter la réception de flux audio pendant un appel, vous pouvez utiliser l’API Arrêter la diffusion en continu. Cela vous permet d’arrêter la diffusion audio à tout moment dans l’appel. Il existe deux façons d’arrêter la diffusion audio ;
- Déclenchement de l’API Arrêter la diffusion en continu : Utilisez l’API pour arrêter la réception de données de diffusion audio pendant que l’appel est toujours actif.
- Arrêt automatique lors de la déconnexion des appels : la diffusion audio s’arrête automatiquement lorsque l’appel est déconnecté.
StopMediaStreamingOptions options = new StopMediaStreamingOptions() {
OperationContext = "stopMediaStreamingContext"
};
await callMedia.StopMediaStreamingAsync();
Gestion des flux audio sur votre serveur WebSocket
Cet exemple montre comment écouter des flux audio à l’aide de votre serveur websocket.
private async Task StartReceivingFromAcsMediaWebSocket(Websocket websocket) {
while (webSocket.State == WebSocketState.Open || webSocket.State == WebSocketState.Closed) {
byte[] receiveBuffer = new byte[2048];
WebSocketReceiveResult receiveResult = await webSocket.ReceiveAsync(
new ArraySegment < byte > (receiveBuffer));
if (receiveResult.MessageType != WebSocketMessageType.Close) {
string data = Encoding.UTF8.GetString(receiveBuffer).TrimEnd('\0');
var input = StreamingData.Parse(data);
if (input is AudioData audioData) {
// Add your code here to process the received audio chunk
}
}
}
}
Le premier paquet que vous recevez contient des métadonnées sur le flux, y compris les paramètres audio tels que l’encodage, le taux d’échantillonnage et d’autres détails de configuration.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Après avoir envoyé le paquet de métadonnées, Azure Communication Services (ACS) commence à diffuser en continu le média audio sur votre serveur WebSocket.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Envoi de données de diffusion audio à Azure Communication Services
Si la diffusion en continu bidirectionnelle est activée à l’aide de l’indicateur de EnableBidirectional
dans le MediaStreamingOptions
, vous pouvez diffuser en continu des données audio vers Azure Communication Services, qui lit l’audio dans l’appel.
Une fois qu’Azure Communication Services commence à diffuser du contenu audio en continu sur votre serveur WebSocket, vous pouvez relayer l’audio à vos services IA. Une fois que votre service IA traite le contenu audio, vous pouvez diffuser l’audio vers l’appel en cours dans Azure Communication Services.
L’exemple montre comment un autre service, tel qu’Azure OpenAI ou d’autres modèles de langage volumineux basés sur la voix, traite et transmet les données audio dans l’appel.
var audioData = OutStreamingData.GetAudioDataForOutbound(audioData)),
byte[] jsonBytes = Encoding.UTF8.GetBytes(audioData);
// Write your logic to send the PCM audio chunk over the WebSocket
// Example of how to send audio data over the WebSocket
await m_webSocket.SendAsync(new ArraySegment < byte > (jsonBytes), WebSocketMessageType.Text, endOfMessage: true, CancellationToken.None);
Vous pouvez également contrôler la lecture de l’audio dans l’appel lors de la diffusion en continu vers Azure Communication Services, en fonction de votre logique ou de votre flux métier. Par exemple, lorsque l’activité vocale est détectée et que vous souhaitez arrêter l’audio mis en file d’attente, vous pouvez envoyer un message d’arrêt via WebSocket pour empêcher la lecture de l’audio dans l’appel.
var stopData = OutStreamingData.GetStopAudioForOutbound();
byte[] jsonBytes = Encoding.UTF8.GetBytes(stopData);
// Write your logic to send stop data to ACS over the WebSocket
// Example of how to send stop data over the WebSocket
await m_webSocket.SendAsync(new ArraySegment < byte > (jsonBytes), WebSocketMessageType.Text, endOfMessage: true, CancellationToken.None);
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement.
- Une ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services.
- Une nouvelle application de service web créée à l’aide du Kit de développement logiciel (SDK) Automatisation des appels.
- Kit de développement Java version 17 ou ultérieure.
- Apache Maven.
Configurer un serveur WebSocket
Azure Communication Services nécessite que votre application serveur configure un serveur WebSocket pour diffuser de l’audio en temps réel. WebSocket est un protocole normalisé qui fournit un canal de communication en duplex intégral sur une seule connexion TCP.
Vous pouvez consulter la documentation ici pour en savoir plus sur les WebSockets et leur utilisation.
Réception et envoi de données de streaming audio
Il existe plusieurs façons de commencer à recevoir le flux audio, qui peut être configuré à l’aide de l’indicateur de startMediaStreaming
dans la configuration de mediaStreamingOptions
. Vous pouvez également spécifier le taux d’échantillonnage souhaité utilisé pour recevoir ou envoyer des données audio à l’aide du paramètre audioFormat
. Actuellement, les formats pris en charge sont PCM 24K mono et PCM 16K mono, avec la valeur par défaut PCM 16K mono.
Pour activer le streaming audio bidirectionnel, où vous envoyez des données audio dans l’appel, vous pouvez activer l’indicateur de EnableBidirectional
. Pour plus d’informations, reportez-vous aux spécifications de l’API.
Démarrez la diffusion audio en continu vers votre serveur web au moment de répondre à l’appel
Activez la diffusion audio automatique lorsque l’appel est établi en définissant l’indicateur startMediaStreaming: true
.
Ce paramètre garantit que le streaming audio démarre automatiquement dès que l’appel est connecté.
MediaStreamingOptions mediaStreamingOptions = new MediaStreamingOptions(appConfig.getTransportUrl(), MediaStreamingTransport.WEBSOCKET, MediaStreamingContent.AUDIO, MediaStreamingAudioChannel.MIXED, true).setEnableBidirectional(true).setAudioFormat(AudioFormat.PCM_24K_MONO);
options = new AnswerCallOptions(data.getString(INCOMING_CALL_CONTEXT), callbackUri).setCallIntelligenceOptions(callIntelligenceOptions).setMediaStreamingOptions(mediaStreamingOptions);
Response answerCallResponse = client.answerCallWithResponse(options, Context.NONE);
Quand Azure Communication Services reçoit l’URL de votre serveur WebSocket, elle établit une connexion à celle-ci. Une fois la connexion établie, la diffusion en continu est lancée.
Démarrez la diffusion audio en continu vers votre serveur web pendant qu’un appel est en cours
Pour démarrer la diffusion multimédia en continu pendant l’appel, vous pouvez utiliser l’API. Pour ce faire, définissez le paramètre startMediaStreaming
sur false
(qui est la valeur par défaut) et ultérieurement dans l’appel, vous pouvez utiliser l’API de démarrage pour activer le streaming multimédia.
MediaStreamingOptions mediaStreamingOptions = new MediaStreamingOptions(appConfig.getTransportUrl(), MediaStreamingTransport.WEBSOCKET, MediaStreamingContent.AUDIO, MediaStreamingAudioChannel.MIXED, false)
.setEnableBidirectional(true)
.setAudioFormat(AudioFormat.PCM_24K_MONO);
options = new AnswerCallOptions(data.getString(INCOMING_CALL_CONTEXT), callbackUri)
.setCallIntelligenceOptions(callIntelligenceOptions)
.setMediaStreamingOptions(mediaStreamingOptions);
Response answerCallResponse = client.answerCallWithResponse(options, Context.NONE);
StartMediaStreamingOptions startMediaStreamingOptions = new StartMediaStreamingOptions()
.setOperationContext("startMediaStreamingContext");
callConnection.getCallMedia().startMediaStreamingWithResponse(startMediaStreamingOptions, Context.NONE);
Arrêter le streaming audio
Pour arrêter la réception de flux audio pendant un appel, vous pouvez utiliser l’API Arrêter la diffusion en continu. Cela vous permet d’arrêter la diffusion audio à tout moment dans l’appel. Il existe deux façons d’arrêter la diffusion audio ;
- Déclenchement de l’API Arrêter la diffusion en continu : Utilisez l’API pour arrêter la réception de données de diffusion audio pendant que l’appel est toujours actif.
- Arrêt automatique lors de la déconnexion des appels : la diffusion audio s’arrête automatiquement lorsque l’appel est déconnecté.
StopMediaStreamingOptions stopMediaStreamingOptions = new StopMediaStreamingOptions()
.setOperationContext("stopMediaStreamingContext");
callConnection.getCallMedia().stopMediaStreamingWithResponse(stopMediaStreamingOptions, Context.NONE);
Gestion des flux audio sur votre serveur WebSocket
Cet exemple montre comment écouter des flux audio à l’aide de votre serveur websocket.
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("Received message: " + message);
var parsedData = StreamingData.parse(message);
if (parsedData instanceof AudioData) {
var audioData = (AudioData) parsedData;
sendAudioData(session, audioData.getData());
}
}
Le premier paquet que vous recevez contient des métadonnées sur le flux, y compris les paramètres audio tels que l’encodage, le taux d’échantillonnage et d’autres détails de configuration.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Après avoir envoyé le paquet de métadonnées, Azure Communication Services (ACS) commence à diffuser en continu le média audio sur votre serveur WebSocket.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Envoi de données de diffusion audio à Azure Communication Services
Si la diffusion en continu bidirectionnelle est activée à l’aide de l’indicateur de EnableBidirectional
dans le MediaStreamingOptions
, vous pouvez diffuser en continu des données audio vers Azure Communication Services, qui lit l’audio dans l’appel.
Une fois qu’Azure Communication Services commence à diffuser du contenu audio en continu sur votre serveur WebSocket, vous pouvez relayer l’audio à vos services IA. Une fois que votre service IA traite le contenu audio, vous pouvez diffuser l’audio vers l’appel en cours dans Azure Communication Services.
L’exemple montre comment un autre service, tel qu’Azure OpenAI ou d’autres modèles de langage volumineux basés sur la voix, traite et transmet les données audio dans l’appel.
private void sendAudioData(Session session, byte[] binaryData) {
System.out.println("Data buffer---> " + binaryData.getClass().getName());
if (session.isOpen()) {
try {
var serializedData = OutStreamingData.getStreamingDataForOutbound(binaryData);
session.getAsyncRemote().sendText(serializedData);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Vous pouvez également contrôler la lecture de l’audio dans l’appel lors de la diffusion en continu vers Azure Communication Services, en fonction de votre logique ou de votre flux métier. Par exemple, lorsque l’activité vocale est détectée et que vous souhaitez arrêter l’audio mis en file d’attente, vous pouvez envoyer un message d’arrêt via WebSocket pour empêcher la lecture de l’audio dans l’appel.
private void stopAudio(Session session) {
if (session.isOpen()) {
try {
var serializedData = OutStreamingData.getStopAudioForOutbound();
session.getAsyncRemote().sendText(serializedData);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement.
- Une ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services.
- Une nouvelle application de service web créée à l’aide du Kit de développement logiciel (SDK) Automatisation des appels.
- Installation du LTS de Node.js
- Serveur websocket qui peut envoyer et recevoir des flux multimédias.
Configurer un serveur WebSocket
Azure Communication Services nécessite que votre application serveur configure un serveur WebSocket pour diffuser de l’audio en temps réel. WebSocket est un protocole normalisé qui fournit un canal de communication en duplex intégral sur une seule connexion TCP.
Vous pouvez consulter la documentation ici pour en savoir plus sur les WebSockets et leur utilisation.
Réception et envoi de données de streaming audio
Il existe plusieurs façons de commencer à recevoir le flux audio, qui peut être configuré à l’aide de l’indicateur de startMediaStreaming
dans la configuration de mediaStreamingOptions
. Vous pouvez également spécifier le taux d’échantillonnage souhaité utilisé pour recevoir ou envoyer des données audio à l’aide du paramètre audioFormat
. Actuellement, les formats pris en charge sont PCM 24K mono et PCM 16K mono, avec la valeur par défaut PCM 16K mono.
Pour activer le streaming audio bidirectionnel, où vous envoyez des données audio dans l’appel, vous pouvez activer l’indicateur de EnableBidirectional
. Pour plus d’informations, reportez-vous aux spécifications de l’API.
Démarrez la diffusion audio en continu vers votre serveur web au moment de répondre à l’appel
Activez la diffusion audio automatique lorsque l’appel est établi en définissant l’indicateur startMediaStreaming: true
.
Ce paramètre garantit que le streaming audio démarre automatiquement dès que l’appel est connecté.
var mediaStreamingOptions = new MediaStreamingOptions(
new Uri("wss://YOUR_WEBSOCKET_URL"),
MediaStreamingContent.Audio,
MediaStreamingAudioChannel.Mixed,
startMediaStreaming: true)
{
EnableBidirectional = true,
AudioFormat = AudioFormat.Pcm24KMono
}
var options = new AnswerCallOptions(incomingCallContext, callbackUri)
{
MediaStreamingOptions = mediaStreamingOptions,
};
AnswerCallResult answerCallResult = await client.AnswerCallAsync(options);
Quand Azure Communication Services reçoit l’URL de votre serveur WebSocket, elle établit une connexion à celle-ci. Une fois la connexion établie, la diffusion en continu est lancée.
Démarrez la diffusion audio en continu vers votre serveur web pendant qu’un appel est en cours
Pour démarrer la diffusion multimédia en continu pendant l’appel, vous pouvez utiliser l’API. Pour ce faire, définissez le paramètre startMediaStreaming
sur false
(qui est la valeur par défaut) et ultérieurement dans l’appel, vous pouvez utiliser l’API de démarrage pour activer le streaming multimédia.
const mediaStreamingOptions: MediaStreamingOptions = {
transportUrl: transportUrl,
transportType: "websocket",
contentType: "audio",
audioChannelType: "unmixed",
startMediaStreaming: false,
enableBidirectional: true,
audioFormat: "Pcm24KMono"
}
const answerCallOptions: AnswerCallOptions = {
mediaStreamingOptions: mediaStreamingOptions
};
answerCallResult = await acsClient.answerCall(
incomingCallContext,
callbackUri,
answerCallOptions
);
const startMediaStreamingOptions: StartMediaStreamingOptions = {
operationContext: "startMediaStreaming"
}
await answerCallResult.callConnection.getCallMedia().startMediaStreaming(startMediaStreamingOptions);
Arrêter le streaming audio
Pour arrêter la réception de flux audio pendant un appel, vous pouvez utiliser l’API Arrêter la diffusion en continu. Cela vous permet d’arrêter la diffusion audio à tout moment dans l’appel. Il existe deux façons d’arrêter la diffusion audio ;
- Déclenchement de l’API Arrêter la diffusion en continu : Utilisez l’API pour arrêter la réception de données de diffusion audio pendant que l’appel est toujours actif.
- Arrêt automatique lors de la déconnexion des appels : la diffusion audio s’arrête automatiquement lorsque l’appel est déconnecté.
const stopMediaStreamingOptions: StopMediaStreamingOptions = {
operationContext: "stopMediaStreaming"
}
await answerCallResult.callConnection.getCallMedia().stopMediaStreaming(stopMediaStreamingOptions);
Gestion des flux audio sur votre serveur WebSocket
Cet exemple montre comment écouter des flux audio à l’aide de votre serveur websocket.
wss.on('connection', async (ws: WebSocket) => {
console.log('Client connected');
await initWebsocket(ws);
await startConversation();
ws.on('message', async (packetData: ArrayBuffer) => {
try {
if (ws.readyState === WebSocket.OPEN) {
await processWebsocketMessageAsync(packetData);
} else {
console.warn(`ReadyState: ${ws.readyState}`);
}
} catch (error) {
console.error('Error processing WebSocket message:', error);
}
});
ws.on('close', () => {
console.log('Client disconnected');
});
});
async function processWebsocketMessageAsync(receivedBuffer: ArrayBuffer) {
const result = StreamingData.parse(receivedBuffer);
const kind = StreamingData.getStreamingKind();
// Get the streaming data kind
if (kind === StreamingDataKind.AudioData) {
const audioData = (result as AudioData);
// process your audio data
}
}
Le premier paquet que vous recevez contient des métadonnées sur le flux, y compris les paramètres audio tels que l’encodage, le taux d’échantillonnage et d’autres détails de configuration.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Après avoir envoyé le paquet de métadonnées, Azure Communication Services (ACS) commence à diffuser en continu le média audio sur votre serveur WebSocket.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Envoi de données de diffusion audio à Azure Communication Services
Si la diffusion en continu bidirectionnelle est activée à l’aide de l’indicateur de EnableBidirectional
dans le MediaStreamingOptions
, vous pouvez diffuser en continu des données audio vers Azure Communication Services, qui lit l’audio dans l’appel.
Une fois qu’Azure Communication Services commence à diffuser du contenu audio en continu sur votre serveur WebSocket, vous pouvez relayer l’audio à vos services IA. Une fois que votre service IA traite le contenu audio, vous pouvez diffuser l’audio vers l’appel en cours dans Azure Communication Services.
L’exemple montre comment un autre service, tel qu’Azure OpenAI ou d’autres modèles de langage volumineux basés sur la voix, traite et transmet les données audio dans l’appel.
async function receiveAudioForOutbound(data: string) {
try {
const jsonData = OutStreamingData.getStreamingDataForOutbound(data);
if (ws.readyState === WebSocket.OPEN) {
ws.send(jsonData);
} else {
console.log("socket connection is not open.");
}
} catch (e) {
console.log(e);
}
}
Vous pouvez également contrôler la lecture de l’audio dans l’appel lors de la diffusion en continu vers Azure Communication Services, en fonction de votre logique ou de votre flux métier. Par exemple, lorsque l’activité vocale est détectée et que vous souhaitez arrêter l’audio mis en file d’attente, vous pouvez envoyer un message d’arrêt via WebSocket pour empêcher la lecture de l’audio dans l’appel.
async function stopAudio() {
try {
const jsonData = OutStreamingData.getStopAudioForOutbound();
if (ws.readyState === WebSocket.OPEN) {
ws.send(jsonData);
} else {
console.log("socket connection is not open.");
}
} catch (e) {
console.log(e);
}
}
Prérequis
- Compte Azure avec un abonnement actif. Pour plus d’informations, consultez Créez un compte gratuitement.
- Une ressource Azure Communication Services. Consultez Créer une ressource Azure Communication Services.
- Une nouvelle application de service web créée à l’aide du Kit de développement logiciel (SDK) Automatisation des appels.
- Python 3.7+.
- Serveur websocket qui peut envoyer et recevoir des flux multimédias.
Configurer un serveur WebSocket
Azure Communication Services nécessite que votre application serveur configure un serveur WebSocket pour diffuser de l’audio en temps réel. WebSocket est un protocole normalisé qui fournit un canal de communication en duplex intégral sur une seule connexion TCP.
Vous pouvez consulter la documentation ici pour en savoir plus sur les WebSockets et leur utilisation.
Réception et envoi de données de streaming audio
Il existe plusieurs façons de commencer à recevoir le flux audio, qui peut être configuré à l’aide de l’indicateur de startMediaStreaming
dans la configuration de mediaStreamingOptions
. Vous pouvez également spécifier le taux d’échantillonnage souhaité utilisé pour recevoir ou envoyer des données audio à l’aide du paramètre audioFormat
. Actuellement, les formats pris en charge sont PCM 24K mono et PCM 16K mono, avec la valeur par défaut PCM 16K mono.
Pour activer le streaming audio bidirectionnel, où vous envoyez des données audio dans l’appel, vous pouvez activer l’indicateur de EnableBidirectional
. Pour plus d’informations, reportez-vous aux spécifications de l’API.
Démarrez la diffusion audio en continu vers votre serveur web au moment de répondre à l’appel
Activez la diffusion audio automatique lorsque l’appel est établi en définissant l’indicateur startMediaStreaming: true
.
Ce paramètre garantit que le streaming audio démarre automatiquement dès que l’appel est connecté.
media_streaming_configuration = MediaStreamingOptions(
transport_url=TRANSPORT_URL,
transport_type=MediaStreamingTransportType.WEBSOCKET,
content_type=MediaStreamingContentType.AUDIO,
audio_channel_type=MediaStreamingAudioChannelType.MIXED,
start_media_streaming=True,
enable_bidirectional=True,
audio_format=AudioFormat.PCM24_K_MONO,
)
answer_call_result = call_automation_client.answer_call(
incoming_call_context=incoming_call_context,
media_streaming=media_streaming_configuration,
callback_url=callback_uri,
)
Quand Azure Communication Services reçoit l’URL de votre serveur WebSocket, elle établit une connexion à celle-ci. Une fois la connexion établie, la diffusion en continu est lancée.
Démarrez la diffusion audio en continu vers votre serveur web pendant qu’un appel est en cours
Pour démarrer la diffusion multimédia en continu pendant l’appel, vous pouvez utiliser l’API. Pour ce faire, définissez le paramètre startMediaStreaming
sur false
(qui est la valeur par défaut) et ultérieurement dans l’appel, vous pouvez utiliser l’API de démarrage pour activer le streaming multimédia.
media_streaming_configuration = MediaStreamingOptions(
transport_url=TRANSPORT_URL,
transport_type=MediaStreamingTransportType.WEBSOCKET,
content_type=MediaStreamingContentType.AUDIO,
audio_channel_type=MediaStreamingAudioChannelType.MIXED,
start_media_streaming=False,
enable_bidirectional=True,
audio_format=AudioFormat.PCM24_K_MONO
)
answer_call_result = call_automation_client.answer_call(
incoming_call_context=incoming_call_context,
media_streaming=media_streaming_configuration,
callback_url=callback_uri
)
call_automation_client.get_call_connection(call_connection_id).start_media_streaming(
operation_context="startMediaStreamingContext"
)
Arrêter le streaming audio
Pour arrêter la réception de flux audio pendant un appel, vous pouvez utiliser l’API Arrêter la diffusion en continu. Cela vous permet d’arrêter la diffusion audio à tout moment dans l’appel. Il existe deux façons d’arrêter la diffusion audio ;
- Déclenchement de l’API Arrêter la diffusion en continu : Utilisez l’API pour arrêter la réception de données de diffusion audio pendant que l’appel est toujours actif.
- Arrêt automatique lors de la déconnexion des appels : la diffusion audio s’arrête automatiquement lorsque l’appel est déconnecté.
call_automation_client.get_call_connection(call_connection_id).stop_media_streaming(operation_context="stopMediaStreamingContext")
Gestion des flux audio sur votre serveur WebSocket
Cet exemple montre comment écouter des flux audio à l’aide de votre serveur websocket.
async def handle_client(websocket):
print("Client connected")
try:
async for message in websocket:
json_object = json.loads(message)
kind = json_object["kind"]
if kind == "AudioData":
audio_data = json_object["audioData"]["data"]
# process your audio data
except websockets.exceptions.ConnectionClosedOK:
print("Client disconnected")
except websockets.exceptions.ConnectionClosedError as e:
print(f"Connection closed with error: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
Le premier paquet que vous recevez contient des métadonnées sur le flux, y compris les paramètres audio tels que l’encodage, le taux d’échantillonnage et d’autres détails de configuration.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Après avoir envoyé le paquet de métadonnées, Azure Communication Services (ACS) commence à diffuser en continu le média audio sur votre serveur WebSocket.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Envoi de données de diffusion audio à Azure Communication Services
Si la diffusion en continu bidirectionnelle est activée à l’aide de l’indicateur de EnableBidirectional
dans le MediaStreamingOptions
, vous pouvez diffuser en continu des données audio vers Azure Communication Services, qui lit l’audio dans l’appel.
Une fois qu’Azure Communication Services commence à diffuser du contenu audio en continu sur votre serveur WebSocket, vous pouvez relayer l’audio à vos services IA. Une fois que votre service IA traite le contenu audio, vous pouvez diffuser l’audio vers l’appel en cours dans Azure Communication Services.
L’exemple montre comment un autre service, tel qu’Azure OpenAI ou d’autres modèles de langage volumineux basés sur la voix, traite et transmet les données audio dans l’appel.
async def send_data(websocket, buffer):
if websocket.open:
data = {
"Kind": "AudioData",
"AudioData": {
"Data": buffer
},
"StopAudio": None
}
# Serialize the server streaming data
serialized_data = json.dumps(data)
print(f"Out Streaming Data ---> {serialized_data}")
# Send the chunk over the WebSocket
await websocket.send(serialized_data)
Vous pouvez également contrôler la lecture de l’audio dans l’appel lors de la diffusion en continu vers Azure Communication Services, en fonction de votre logique ou de votre flux métier. Par exemple, lorsque l’activité vocale est détectée et que vous souhaitez arrêter l’audio mis en file d’attente, vous pouvez envoyer un message d’arrêt via WebSocket pour empêcher la lecture de l’audio dans l’appel.
async def stop_audio(websocket):
if websocket.open:
data = {
"Kind": "StopAudio",
"AudioData": None,
"StopAudio": {}
}
# Serialize the server streaming data
serialized_data = json.dumps(data)
print(f"Out Streaming Data ---> {serialized_data}")
# Send the chunk over the WebSocket
await websocket.send(serialized_data)
Nettoyer les ressources
Si vous voulez nettoyer et supprimer un abonnement Communication Services, vous pouvez supprimer la ressource ou le groupe de ressources. La suppression du groupe de ressources efface également les autres ressources qui y sont associées. Apprenez-en davantage sur le nettoyage des ressources.
Étapes suivantes
- Apprenez-en plus sur la diffusion audio.
- En savoir plus sur l’automatisation des appels et ses fonctionnalités.
- En savoir plus sur l’action de lecture.
- En savoir plus sur l’action Recognize.