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 capable de 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 éventuellement utiliser les services Azure WebApps qui vous permettent de créer une application pour recevoir des flux audio sur une connexion WebSocket. Suivez ce guide de démarrage rapide.
Établir un appel
Établir un appel et fournir les détails de la diffusion en continu
MediaStreamingOptions mediaStreamingOptions = new MediaStreamingOptions(
new Uri("<WEBSOCKET URL>"),
MediaStreamingContent.Audio,
MediaStreamingAudioChannel.Mixed,
MediaStreamingTransport.Websocket,
false);
var createCallOptions = new CreateCallOptions(callInvite, callbackUri)
{
CallIntelligenceOptions = new CallIntelligenceOptions() { CognitiveServicesEndpoint = new Uri(cognitiveServiceEndpoint) },
MediaStreamingOptions = mediaStreamingOptions,
};
CreateCallResult createCallResult = await callAutomationClient.CreateCallAsync(createCallOptions);
Démarrer la diffusion audio
Comment démarrer la diffusion audio :
StartMediaStreamingOptions options = new StartMediaStreamingOptions()
{
OperationCallbackUri = new Uri(callbackUriHost),
OperationContext = "startMediaStreamingContext"
};
await callMedia.StartMediaStreamingAsync(options);
Quand Azure Communication Services reçoit l’URL pour votre serveur WebSocket, une connexion au serveur est établie. Une fois que Azure Communication Services se connecte à votre serveur WebSocket et que la diffusion en continu démarre, Communication Services envoie le premier paquet de données, qui contient des métadonnées sur les paquets multimédias entrants.
Le paquet de métadonnées se présente comme suit :
{
"kind": <string> // What kind of data this is, e.g. AudioMetadata, AudioData.
"audioMetadata": {
"subscriptionId": <string>, // unique identifier for a subscription request
"encoding":<string>, // PCM only supported
"sampleRate": <int>, // 16000 default
"channels": <int>, // 1 default
"length": <int> // 640 default
}
}
Arrêter le streaming audio
Comment arrêter la diffusion audio
StopMediaStreamingOptions stopOptions = new StopMediaStreamingOptions()
{
OperationCallbackUri = new Uri(callbackUriHost)
};
await callMedia.StopMediaStreamingAsync(stopOptions);
Gestion des flux audio sur votre serveur WebSocket
L’exemple ci-dessous montre comment écouter des flux audio à l’aide de votre serveur WebSocket.
HttpListener httpListener = new HttpListener();
httpListener.Prefixes.Add("http://localhost:80/");
httpListener.Start();
while (true)
{
HttpListenerContext httpListenerContext = await httpListener.GetContextAsync();
if (httpListenerContext.Request.IsWebSocketRequest)
{
WebSocketContext websocketContext;
try
{
websocketContext = await httpListenerContext.AcceptWebSocketAsync(subProtocol: null);
}
catch (Exception ex)
{
return;
}
WebSocket webSocket = websocketContext.WebSocket;
try
{
while (webSocket.State == WebSocketState.Open || webSocket.State == WebSocketState.CloseSent)
{
byte[] receiveBuffer = new byte[2048];
var cancellationToken = new CancellationTokenSource(TimeSpan.FromSeconds(60)).Token;
WebSocketReceiveResult receiveResult = await webSocket.ReceiveAsync(new ArraySegment<byte>(receiveBuffer), cancellationToken);
if (receiveResult.MessageType != WebSocketMessageType.Close)
{
var data = Encoding.UTF8.GetString(receiveBuffer).TrimEnd('\0');
try
{
var eventData = JsonConvert.DeserializeObject<AudioBaseClass>(data);
if (eventData != null)
{
if(eventData.kind == "AudioMetadata")
{
//Process audio metadata
}
else if(eventData.kind == "AudioData")
{
//Process audio data
var byteArray = eventData.audioData.data;
//use audio byteArray as you want
}
}
}
catch { }
}
}
}
catch (Exception ex) { }
}
}
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 8 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 éventuellement utiliser les services Azure WebApps qui vous permettent de créer une application pour recevoir des flux audio sur une connexion WebSocket. Suivez ce guide de démarrage rapide.
Établir un appel
Établir un appel et fournir les détails de la diffusion en continu
CallInvite callInvite = new CallInvite(target, caller);
CallIntelligenceOptions callIntelligenceOptions = new CallIntelligenceOptions().setCognitiveServicesEndpoint(appConfig.getCognitiveServiceEndpoint());
MediaStreamingOptions mediaStreamingOptions = new MediaStreamingOptions(appConfig.getWebSocketUrl(), MediaStreamingTransport.WEBSOCKET, MediaStreamingContentType.AUDIO, MediaStreamingAudioChannel.UNMIXED);
mediaStreamingOptions.setStartMediaStreaming(false);
CreateCallOptions createCallOptions = new CreateCallOptions(callInvite, appConfig.getCallBackUri());
createCallOptions.setCallIntelligenceOptions(callIntelligenceOptions);
createCallOptions.setMediaStreamingOptions(mediaStreamingOptions);
Response<CreateCallResult> result = client.createCallWithResponse(createCallOptions, Context.NONE);
return result.getValue().getCallConnectionProperties().getCallConnectionId();
Démarrer la diffusion audio
Comment démarrer la diffusion audio :
StartMediaStreamingOptions startOptions = new StartMediaStreamingOptions()
.setOperationContext("startMediaStreamingContext")
.setOperationCallbackUrl(appConfig.getBasecallbackuri());
client.getCallConnection(callConnectionId)
.getCallMedia()
.startMediaStreamingWithResponse(startOptions, Context.NONE);
Quand Azure Communication Services reçoit l’URL pour votre serveur WebSocket, une connexion au serveur est établie. Une fois que Azure Communication Services se connecte à votre serveur WebSocket et que la diffusion en continu démarre, Communication Services envoie le premier paquet de données, qui contient des métadonnées sur les paquets multimédias entrants.
Le paquet de métadonnées se présente comme suit :
{
"kind": <string> // What kind of data this is, e.g. AudioMetadata, AudioData.
"audioMetadata": {
"subscriptionId": <string>, // unique identifier for a subscription request
"encoding":<string>, // PCM only supported
"sampleRate": <int>, // 16000 default
"channels": <int>, // 1 default
"length": <int> // 640 default
}
}
Arrêter le streaming audio
Comment arrêter la diffusion audio
StopMediaStreamingOptions stopOptions = new StopMediaStreamingOptions()
.setOperationCallbackUrl(appConfig.getBasecallbackuri());
client.getCallConnection(callConnectionId)
.getCallMedia()
.stopMediaStreamingWithResponse(stopOptions, Context.NONE);
Gestion des flux multimédias sur votre serveur WebSocket
L’exemple ci-dessous montre comment écouter le flux multimédia à l’aide de votre serveur WebSocket. Deux fichiers doivent être exécutés : App.java et WebSocketServer.java
package com.example;
import org.glassfish.tyrus.server.Server;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class App {
public static void main(String[] args) {
Server server = new Server("localhost", 8081, "/ws", null, WebSocketServer.class);
try {
server.start();
System.out.println("Web socket running on port 8081...");
System.out.println("wss://localhost:8081/ws/server");
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
reader.readLine();
} catch (Exception e) {
e.printStackTrace();
} finally {
server.stop();
}
}
}
package com.example;
import javax.websocket.OnMessage;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import com.azure.communication.callautomation.models.streaming.StreamingData;
import com.azure.communication.callautomation.models.streaming.StreamingDataParser;
import com.azure.communication.callautomation.models.streaming.media.AudioData;
import com.azure.communication.callautomation.models.streaming.media.AudioMetadata;
@ServerEndpoint("/server")
public class WebSocketServer {
@OnMessage
public void onMessage(String message, Session session) {
// System.out.println("Received message: " + message);
StreamingData data = StreamingDataParser.parse(message);
if (data instanceof AudioMetadata) {
AudioMetadata audioMetaData = (AudioMetadata) data;
System.out.println("----------------------------------------------------------------");
System.out.println("SUBSCRIPTION ID:-->" + audioMetaData.getMediaSubscriptionId());
System.out.println("ENCODING:-->" + audioMetaData.getEncoding());
System.out.println("SAMPLE RATE:-->" + audioMetaData.getSampleRate());
System.out.println("CHANNELS:-->" + audioMetaData.getChannels());
System.out.println("LENGTH:-->" + audioMetaData.getLength());
System.out.println("----------------------------------------------------------------");
}
if (data instanceof AudioData) {
System.out.println("----------------------------------------------------------------");
AudioData audioData = (AudioData) data;
System.out.println("DATA:-->" + audioData.getData());
System.out.println("TIMESTAMP:-->" + audioData.getTimestamp());
// System.out.println("PARTICIPANT:-->" + audioData.getParticipant().getRawId()
// != null
// ? audioData.getParticipant().getRawId()
// : "");
System.out.println("IS SILENT:-->" + audioData.isSilent());
System.out.println("----------------------------------------------------------------");
}
}
}
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 capable de 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 éventuellement utiliser les services Azure WebApps qui vous permettent de créer une application pour recevoir des flux audio sur une connexion WebSocket. Suivez ce guide de démarrage rapide.
Établir un appel
Établir un appel et fournir les détails de la diffusion en continu
const mediaStreamingOptions: MediaStreamingOptions = {
transportUrl: "<WEBSOCKET URL>",
transportType: "websocket",
contentType: "audio",
audioChannelType: "unmixed",
startMediaStreaming: false
}
const options: CreateCallOptions = {
callIntelligenceOptions: { cognitiveServicesEndpoint: process.env.COGNITIVE_SERVICES_ENDPOINT },
mediaStreamingOptions: mediaStreamingOptions
};
Démarrer la diffusion audio
Comment démarrer la diffusion audio :
const streamingOptions: StartMediaStreamingOptions = {
operationContext: "startMediaStreamingContext",
operationCallbackUrl: process.env.CALLBACK_URI + "/api/callbacks"
}
await callMedia.startMediaStreaming(streamingOptions);
Quand Azure Communication Services reçoit l’URL pour votre serveur WebSocket, une connexion au serveur est établie. Une fois que Azure Communication Services se connecte à votre serveur WebSocket et que la diffusion en continu démarre, Communication Services envoie le premier paquet de données, qui contient des métadonnées sur les paquets multimédias entrants.
Le paquet de métadonnées se présente comme suit :
{
"kind": <string> // What kind of data this is, e.g. AudioMetadata, AudioData.
"audioMetadata": {
"subscriptionId": <string>, // unique identifier for a subscription request
"encoding":<string>, // PCM only supported
"sampleRate": <int>, // 16000 default
"channels": <int>, // 1 default
"length": <int> // 640 default
}
}
Arrêter le streaming audio
Comment arrêter la diffusion audio
const stopMediaStreamingOptions: StopMediaStreamingOptions = {
operationCallbackUrl: process.env.CALLBACK_URI + "/api/callbacks"
}
await callMedia.stopMediaStreaming(stopMediaStreamingOptions);
Gestion des flux audio sur votre serveur WebSocket
L’exemple ci-dessous montre comment écouter des flux audio à l’aide de votre serveur WebSocket.
import WebSocket from 'ws';
import { streamingData } from '@azure/communication-call-automation/src/utli/streamingDataParser'
const wss = new WebSocket.Server({ port: 8081 });
wss.on('connection', (ws: WebSocket) => {
console.log('Client connected');
ws.on('message', (packetData: ArrayBuffer) => {
const decoder = new TextDecoder();
const stringJson = decoder.decode(packetData);
console.log("STRING JSON=>--" + stringJson)
//var response = streamingData(stringJson);
var response = streamingData(packetData);
if ('locale' in response) {
console.log("Transcription Metadata")
console.log(response.callConnectionId);
console.log(response.correlationId);
console.log(response.locale);
console.log(response.subscriptionId);
}
if ('text' in response) {
console.log("Transcription Data")
console.log(response.text);
console.log(response.format);
console.log(response.confidence);
console.log(response.offset);
console.log(response.duration);
console.log(response.resultStatus);
if ('phoneNumber' in response.participant) {
console.log(response.participant.phoneNumber);
}
response.words.forEach(element => {
console.log(element.text)
console.log(element.duration)
console.log(element.offset)
});
}
});
ws.on('close', () => {
console.log('Client disconnected');
});
});
// function processData(data: ArrayBuffer) {
// const byteArray = new Uint8Array(data);
// }
console.log('WebSocket server running on port 8081');
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 capable de 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 éventuellement utiliser les services Azure WebApps qui vous permettent de créer une application pour recevoir des flux audio sur une connexion WebSocket. Suivez ce guide de démarrage rapide.
Établir un appel
Établir un appel et fournir les détails de la diffusion en continu
media_streaming_options = MediaStreamingOptions(
transport_url="wss://e063-2409-40c2-4004-eced-9487-4dfb-b0e4-10fb.ngrok-free.app",
transport_type=MediaStreamingTransportType.WEBSOCKET,
content_type=MediaStreamingContentType.AUDIO,
audio_channel_type=MediaStreamingAudioChannelType.UNMIXED,
start_media_streaming=False
)
call_connection_properties = call_automation_client.create_call(target_participant,
CALLBACK_EVENTS_URI,
cognitive_services_endpoint=COGNITIVE_SERVICES_ENDPOINT,
source_caller_id_number=source_caller,
media_streaming=media_streaming_options
)
Démarrer la diffusion audio
Comment démarrer la diffusion audio :
call_connection_client.start_media_streaming()
Quand Azure Communication Services reçoit l’URL pour votre serveur WebSocket, une connexion au serveur est établie. Une fois que Azure Communication Services se connecte à votre serveur WebSocket et que la diffusion en continu démarre, Communication Services envoie le premier paquet de données, qui contient des métadonnées sur les paquets multimédias entrants.
Le paquet de métadonnées se présente comme suit :
{
"kind": <string> // What kind of data this is, e.g. AudioMetadata, AudioData.
"audioMetadata": {
"subscriptionId": <string>, // unique identifier for a subscription request
"encoding":<string>, // PCM only supported
"sampleRate": <int>, // 16000 default
"channels": <int>, // 1 default
"length": <int> // 640 default
}
}
Arrêter le streaming audio
Comment arrêter la diffusion audio
call_connection_client.stop_media_streaming()
Gestion des flux audio sur votre serveur WebSocket
L’exemple ci-dessous montre comment écouter des flux audio à l’aide de votre serveur WebSocket.
import asyncio
import json
import websockets
async def handle_client(websocket, path):
print("Client connected")
try:
async for message in websocket:
print(message)
packet_data = json.loads(message)
packet_data = message.encode('utf-8')
print("Packet DATA:-->",packet_data)
except websockets.exceptions.ConnectionClosedOK:
print("Client disconnected")
start_server = websockets.serve(handle_client, "localhost", 8081)
print('WebSocket server running on port 8081')
asyncio.get_event_loop().run_until_complete(start_server)
asyncio.get_event_loop().run_forever()
Schéma de streaming audio
Après l’envoi du paquet de métadonnées, Azure Communication Services commence la diffusion en continu du média audio sur votre serveur WebSocket. Vous trouverez ci-dessous un exemple d’objet multimédia que votre serveur va recevoir.
{
"kind": <string>, // What kind of data this is, e.g. AudioMetadata, AudioData.
"audioData":{
"data": <string>, // Base64 Encoded audio buffer data
"timestamp": <string>, // In ISO 8601 format (yyyy-mm-ddThh:mm:ssZ)
"participantRawID": <string>,
"silent": <boolean> // Indicates if the received audio buffer contains only silence.
}
}
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.