Schnellstart: serverseitiges Audio-Streaming
Wichtig
Die in diesem Artikel beschriebenen Funktionen befinden sich derzeit in der öffentlichen Vorschauphase. Diese Vorschauversion wird ohne Vereinbarung zum Servicelevel bereitgestellt und ist nicht für Produktionsworkloads vorgesehen. Manche Features werden möglicherweise nicht unterstützt oder sind nur eingeschränkt verwendbar. Weitere Informationen finden Sie unter Zusätzliche Nutzungsbestimmungen für Microsoft Azure-Vorschauen.
Hier finden Sie Informationen zu den ersten Schritten mit Audiostreams über die Audio-Streaming-API von Azure Communication Services. In dieser Schnellstartanleitung wird davon ausgegangen, dass Sie bereits mit Anrufautomatisierungs-APIs vertraut sind, um eine Lösung für die automatisierte Anrufweiterleitung erstellen zu können.
Die in diesem Schnellstart beschriebenen Funktionen befinden sich derzeit in der öffentlichen Vorschauphase.
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Details finden Sie im Artikel zum Erstellen eines kostenlosen Azure-Kontos.
- Eine Azure Communication Services-Ressource. Siehe Schnellstart: Erstellen und Verwalten einer Communication Services-Ressource.
- Eine neue Webdienstanwendung, die mit dem Call Automation SDK erstellt wurde.
- Die aktuelle .NET-Bibliothek für Ihr Betriebssystem
- Ein WebSocket-Server, der Mediendatenströme senden und empfangen kann.
Einrichten eines WebSocket-Servers
Azure Communication Services erfordert die Einrichtung eines WebSocket-Servers für Ihre Serveranwendung, um das Streamen von Audiodaten in Echtzeit zu ermöglichen. WebSocket ist ein standardisiertes Protokoll, das einen Vollduplex-Kommunikationskanal über eine einzelne TCP-Verbindung bereitstellt.
Weitere Informationen zu WebSockets und deren Verwendung finden Sie hier in der Dokumentation.
Empfangen und Senden von Audio-Streamingdaten
Es gibt mehrere Möglichkeiten, den Empfang von Audiodatenstrom zu starten, die mithilfe des Flags startMediaStreaming
im Setup mediaStreamingOptions
konfiguriert werden können. Sie können auch die gewünschte Abtastrate angeben, die zum Empfangen oder Senden von Audiodaten mithilfe des Parameters audioFormat
verwendet wird. Derzeit unterstützte Formate sind PCM 24K Mono und PCM 16K Mono, wobei die Standardeinstellung PCM 16K Mono ist.
Um bidirektionales Audio-Streaming zu aktivieren, bei dem Sie Audiodaten an den Anruf senden, können Sie das Flag EnableBidirectional
aktivieren. Weitere Informationen finden Sie in den API-Spezifikationen.
Starten des Streamens von Audio auf Ihren Webserver zum Zeitpunkt der Anrufantwort
Aktivieren Sie das automatische Audio-Streaming, wenn der Anruf aufgebaut wird, indem Sie das Flag startMediaStreaming: true
festlegen.
Diese Einstellung stellt sicher, dass Audio-Streaming automatisch gestartet wird, sobald der Anruf verbunden ist.
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);
Wenn Azure Communication Services die URL für Ihren WebSocket-Server empfängt, wird eine Verbindung damit hergestellt. Sobald die Verbindung erfolgreich hergestellt wurde, wird Streaming initiiert.
Starten des Streamens von Audio auf Ihren Webserver, während ein Anruf ausgeführt wird
Zum Starten des Medien-Streaming während des Anrufs können Sie die API verwenden. Legen Sie dazu den Parameter startMediaStreaming
auf false
(die Standardeinstellung) fest. Später im Aufruf können Sie die Start-API verwenden, um das Medien-Streaming zu aktivieren.
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();
Beenden des Audiostreamings
Um den Empfang von Audiodatenströmen während eines Anrufs zu beenden, können Sie die API zum Beenden des Streamingsverwenden. Auf diese Weise können Sie das Audio-Streaming an einem beliebigen Punkt im Anruf beenden. Es gibt zwei Möglichkeiten, wie Audio-Streaming gestoppt werden kann;
- Auslösen der API zum Beenden des Streamings: Verwenden Sie die API, um den Empfang von Audio-Streamingdaten zu beenden, während der Aufruf noch aktiv ist.
- Automatisches Beenden bei Trennung des Anrufs: Audio-Streaming wird automatisch beendet, wenn der Anruf getrennt wird.
StopMediaStreamingOptions options = new StopMediaStreamingOptions() {
OperationContext = "stopMediaStreamingContext"
};
await callMedia.StopMediaStreamingAsync();
Verarbeiten von Audiostreams auf Ihrem WebSocket-Server
Im folgenden Beispiel wird veranschaulicht, wie Sie Audiodatenströmen mithilfe Ihres WebSocket-Servers lauschen.
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
}
}
}
}
Das erste empfangene Paket enthält Metadaten zum Datenstrom, einschließlich Audioeinstellungen wie Codierung, Abtastrate und anderen Konfigurationsdetails.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Nach dem Senden des Metadatenpakets beginnt Azure Communication Services (ACS) damit, Audiomedien an Ihren WebSocket-Server zu streamen.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Senden von Audio-Streamingdaten an Azure Communication Services
Wenn bidirektionales Streaming mithilfe des Flag EnableBidirectional
in der Datei MediaStreamingOptions
aktiviert ist, können Sie Audiodaten zurück zu Azure Communication Services streamen, wodurch die Audiowiedergabe im Anruf erfolgt.
Sobald Azure Communication Services mit dem Streamen von Audio auf Ihren WebSocket-Server beginnt, können Sie das Audio an Ihre KI-Dienste weiterleiten. Nachdem Ihr KI-Dienst den Audioinhalt verarbeitet hat, können Sie das Audio zurück zum laufenden Anruf in Azure Communication Services streamen.
Das Beispiel veranschaulicht, wie ein anderer Dienst, z. B. Azure OpenAI oder andere sprachbasierte Large Language Models, die Audiodaten zurück in den Anruf verarbeitet und überträgt.
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);
Sie können auch die Wiedergabe von Audio im Anruf steuern, wenn Sie das Streaming auf Azure Communication Services basierend auf Ihrer Logik oder Ihrem Geschäftsablauf ausführen. Wenn beispielsweise Sprachaktivität erkannt wird und Sie die Audiowarteschlange stoppen möchten, können Sie eine Stoppmeldung über das WebSocket senden, um die Audiowiedergabe im Anruf zu beenden.
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);
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Details finden Sie im Artikel zum Erstellen eines kostenlosen Azure-Kontos.
- Eine Azure Communication Services-Ressource. Siehe Schnellstart: Erstellen und Verwalten einer Communication Services-Ressource.
- Eine neue Webdienstanwendung, die mit dem Call Automation SDK erstellt wurde.
- Java Development Kit Version 17 oder höher.
- Apache Maven.
Einrichten eines WebSocket-Servers
Azure Communication Services erfordert die Einrichtung eines WebSocket-Servers für Ihre Serveranwendung, um das Streamen von Audiodaten in Echtzeit zu ermöglichen. WebSocket ist ein standardisiertes Protokoll, das einen Vollduplex-Kommunikationskanal über eine einzelne TCP-Verbindung bereitstellt.
Weitere Informationen zu WebSockets und deren Verwendung finden Sie hier in der Dokumentation.
Empfangen und Senden von Audio-Streamingdaten
Es gibt mehrere Möglichkeiten, den Empfang von Audiodatenstrom zu starten, die mithilfe des Flags startMediaStreaming
im Setup mediaStreamingOptions
konfiguriert werden können. Sie können auch die gewünschte Abtastrate angeben, die zum Empfangen oder Senden von Audiodaten mithilfe des Parameters audioFormat
verwendet wird. Derzeit unterstützte Formate sind PCM 24K Mono und PCM 16K Mono, wobei die Standardeinstellung PCM 16K Mono ist.
Um bidirektionales Audio-Streaming zu aktivieren, bei dem Sie Audiodaten an den Anruf senden, können Sie das Flag EnableBidirectional
aktivieren. Weitere Informationen finden Sie in den API-Spezifikationen.
Starten des Streamens von Audio auf Ihren Webserver zum Zeitpunkt der Anrufantwort
Aktivieren Sie das automatische Audio-Streaming, wenn der Anruf aufgebaut wird, indem Sie das Flag startMediaStreaming: true
festlegen.
Diese Einstellung stellt sicher, dass Audio-Streaming automatisch gestartet wird, sobald der Anruf verbunden ist.
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);
Wenn Azure Communication Services die URL für Ihren WebSocket-Server empfängt, wird eine Verbindung damit hergestellt. Sobald die Verbindung erfolgreich hergestellt wurde, wird Streaming initiiert.
Starten des Streamens von Audio auf Ihren Webserver, während ein Anruf ausgeführt wird
Zum Starten des Medien-Streaming während des Anrufs können Sie die API verwenden. Legen Sie dazu den Parameter startMediaStreaming
auf false
(die Standardeinstellung) fest. Später im Aufruf können Sie die Start-API verwenden, um das Medien-Streaming zu aktivieren.
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);
Beenden des Audiostreamings
Um den Empfang von Audiodatenströmen während eines Anrufs zu beenden, können Sie die API zum Beenden des Streamingsverwenden. Auf diese Weise können Sie das Audio-Streaming an einem beliebigen Punkt im Anruf beenden. Es gibt zwei Möglichkeiten, wie Audio-Streaming gestoppt werden kann;
- Auslösen der API zum Beenden des Streamings: Verwenden Sie die API, um den Empfang von Audio-Streamingdaten zu beenden, während der Aufruf noch aktiv ist.
- Automatisches Beenden bei Trennung des Anrufs: Audio-Streaming wird automatisch beendet, wenn der Anruf getrennt wird.
StopMediaStreamingOptions stopMediaStreamingOptions = new StopMediaStreamingOptions()
.setOperationContext("stopMediaStreamingContext");
callConnection.getCallMedia().stopMediaStreamingWithResponse(stopMediaStreamingOptions, Context.NONE);
Verarbeiten von Audiostreams auf Ihrem WebSocket-Server
Im folgenden Beispiel wird veranschaulicht, wie Sie Audiodatenströmen mithilfe Ihres WebSocket-Servers lauschen.
@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());
}
}
Das erste empfangene Paket enthält Metadaten zum Datenstrom, einschließlich Audioeinstellungen wie Codierung, Abtastrate und anderen Konfigurationsdetails.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Nach dem Senden des Metadatenpakets beginnt Azure Communication Services (ACS) damit, Audiomedien an Ihren WebSocket-Server zu streamen.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Senden von Audio-Streamingdaten an Azure Communication Services
Wenn bidirektionales Streaming mithilfe des Flag EnableBidirectional
in der Datei MediaStreamingOptions
aktiviert ist, können Sie Audiodaten zurück zu Azure Communication Services streamen, wodurch die Audiowiedergabe im Anruf erfolgt.
Sobald Azure Communication Services mit dem Streamen von Audio auf Ihren WebSocket-Server beginnt, können Sie das Audio an Ihre KI-Dienste weiterleiten. Nachdem Ihr KI-Dienst den Audioinhalt verarbeitet hat, können Sie das Audio zurück zum laufenden Anruf in Azure Communication Services streamen.
Das Beispiel veranschaulicht, wie ein anderer Dienst, z. B. Azure OpenAI oder andere sprachbasierte Large Language Models, die Audiodaten zurück in den Anruf verarbeitet und überträgt.
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();
}
}
}
Sie können auch die Wiedergabe von Audio im Anruf steuern, wenn Sie das Streaming auf Azure Communication Services basierend auf Ihrer Logik oder Ihrem Geschäftsablauf ausführen. Wenn beispielsweise Sprachaktivität erkannt wird und Sie die Audiowarteschlange stoppen möchten, können Sie eine Stoppmeldung über das WebSocket senden, um die Audiowiedergabe im Anruf zu beenden.
private void stopAudio(Session session) {
if (session.isOpen()) {
try {
var serializedData = OutStreamingData.getStopAudioForOutbound();
session.getAsyncRemote().sendText(serializedData);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Details finden Sie im Artikel zum Erstellen eines kostenlosen Azure-Kontos.
- Eine Azure Communication Services-Ressource. Siehe Schnellstart: Erstellen und Verwalten einer Communication Services-Ressource.
- Eine neue Webdienstanwendung, die mit dem Call Automation SDK erstellt wurde.
- Node.js-LTS-Installation
- Ein WebSocket-Server, der Mediendatenströme senden und empfangen kann.
Einrichten eines WebSocket-Servers
Azure Communication Services erfordert die Einrichtung eines WebSocket-Servers für Ihre Serveranwendung, um das Streamen von Audiodaten in Echtzeit zu ermöglichen. WebSocket ist ein standardisiertes Protokoll, das einen Vollduplex-Kommunikationskanal über eine einzelne TCP-Verbindung bereitstellt.
Weitere Informationen zu WebSockets und deren Verwendung finden Sie hier in der Dokumentation.
Empfangen und Senden von Audio-Streamingdaten
Es gibt mehrere Möglichkeiten, den Empfang von Audiodatenstrom zu starten, die mithilfe des Flags startMediaStreaming
im Setup mediaStreamingOptions
konfiguriert werden können. Sie können auch die gewünschte Abtastrate angeben, die zum Empfangen oder Senden von Audiodaten mithilfe des Parameters audioFormat
verwendet wird. Derzeit unterstützte Formate sind PCM 24K Mono und PCM 16K Mono, wobei die Standardeinstellung PCM 16K Mono ist.
Um bidirektionales Audio-Streaming zu aktivieren, bei dem Sie Audiodaten an den Anruf senden, können Sie das Flag EnableBidirectional
aktivieren. Weitere Informationen finden Sie in den API-Spezifikationen.
Starten des Streamens von Audio auf Ihren Webserver zum Zeitpunkt der Anrufantwort
Aktivieren Sie das automatische Audio-Streaming, wenn der Anruf aufgebaut wird, indem Sie das Flag startMediaStreaming: true
festlegen.
Diese Einstellung stellt sicher, dass Audio-Streaming automatisch gestartet wird, sobald der Anruf verbunden ist.
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);
Wenn Azure Communication Services die URL für Ihren WebSocket-Server empfängt, wird eine Verbindung damit hergestellt. Sobald die Verbindung erfolgreich hergestellt wurde, wird Streaming initiiert.
Starten des Streamens von Audio auf Ihren Webserver, während ein Anruf ausgeführt wird
Zum Starten des Medien-Streaming während des Anrufs können Sie die API verwenden. Legen Sie dazu den Parameter startMediaStreaming
auf false
(die Standardeinstellung) fest. Später im Aufruf können Sie die Start-API verwenden, um das Medien-Streaming zu aktivieren.
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);
Beenden des Audiostreamings
Um den Empfang von Audiodatenströmen während eines Anrufs zu beenden, können Sie die API zum Beenden des Streamingsverwenden. Auf diese Weise können Sie das Audio-Streaming an einem beliebigen Punkt im Anruf beenden. Es gibt zwei Möglichkeiten, wie Audio-Streaming gestoppt werden kann;
- Auslösen der API zum Beenden des Streamings: Verwenden Sie die API, um den Empfang von Audio-Streamingdaten zu beenden, während der Aufruf noch aktiv ist.
- Automatisches Beenden bei Trennung des Anrufs: Audio-Streaming wird automatisch beendet, wenn der Anruf getrennt wird.
const stopMediaStreamingOptions: StopMediaStreamingOptions = {
operationContext: "stopMediaStreaming"
}
await answerCallResult.callConnection.getCallMedia().stopMediaStreaming(stopMediaStreamingOptions);
Verarbeiten von Audiostreams auf Ihrem WebSocket-Server
Im folgenden Beispiel wird veranschaulicht, wie Sie Audiodatenströmen mithilfe Ihres WebSocket-Servers lauschen.
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
}
}
Das erste empfangene Paket enthält Metadaten zum Datenstrom, einschließlich Audioeinstellungen wie Codierung, Abtastrate und anderen Konfigurationsdetails.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Nach dem Senden des Metadatenpakets beginnt Azure Communication Services (ACS) damit, Audiomedien an Ihren WebSocket-Server zu streamen.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Senden von Audio-Streamingdaten an Azure Communication Services
Wenn bidirektionales Streaming mithilfe des Flag EnableBidirectional
in der Datei MediaStreamingOptions
aktiviert ist, können Sie Audiodaten zurück zu Azure Communication Services streamen, wodurch die Audiowiedergabe im Anruf erfolgt.
Sobald Azure Communication Services mit dem Streamen von Audio auf Ihren WebSocket-Server beginnt, können Sie das Audio an Ihre KI-Dienste weiterleiten. Nachdem Ihr KI-Dienst den Audioinhalt verarbeitet hat, können Sie das Audio zurück zum laufenden Anruf in Azure Communication Services streamen.
Das Beispiel veranschaulicht, wie ein anderer Dienst, z. B. Azure OpenAI oder andere sprachbasierte Large Language Models, die Audiodaten zurück in den Anruf verarbeitet und überträgt.
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);
}
}
Sie können auch die Wiedergabe von Audio im Anruf steuern, wenn Sie das Streaming auf Azure Communication Services basierend auf Ihrer Logik oder Ihrem Geschäftsablauf ausführen. Wenn beispielsweise Sprachaktivität erkannt wird und Sie die Audiowarteschlange stoppen möchten, können Sie eine Stoppmeldung über das WebSocket senden, um die Audiowiedergabe im Anruf zu beenden.
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);
}
}
Voraussetzungen
- Ein Azure-Konto mit einem aktiven Abonnement. Details finden Sie im Artikel zum Erstellen eines kostenlosen Azure-Kontos.
- Eine Azure Communication Services-Ressource. Siehe Schnellstart: Erstellen und Verwalten einer Communication Services-Ressource.
- Eine neue Webdienstanwendung, die mit dem Call Automation SDK erstellt wurde.
- Python 3.7+.
- Ein WebSocket-Server, der Mediendatenströme senden und empfangen kann.
Einrichten eines WebSocket-Servers
Azure Communication Services erfordert die Einrichtung eines WebSocket-Servers für Ihre Serveranwendung, um das Streamen von Audiodaten in Echtzeit zu ermöglichen. WebSocket ist ein standardisiertes Protokoll, das einen Vollduplex-Kommunikationskanal über eine einzelne TCP-Verbindung bereitstellt.
Weitere Informationen zu WebSockets und deren Verwendung finden Sie hier in der Dokumentation.
Empfangen und Senden von Audio-Streamingdaten
Es gibt mehrere Möglichkeiten, den Empfang von Audiodatenstrom zu starten, die mithilfe des Flags startMediaStreaming
im Setup mediaStreamingOptions
konfiguriert werden können. Sie können auch die gewünschte Abtastrate angeben, die zum Empfangen oder Senden von Audiodaten mithilfe des Parameters audioFormat
verwendet wird. Derzeit unterstützte Formate sind PCM 24K Mono und PCM 16K Mono, wobei die Standardeinstellung PCM 16K Mono ist.
Um bidirektionales Audio-Streaming zu aktivieren, bei dem Sie Audiodaten an den Anruf senden, können Sie das Flag EnableBidirectional
aktivieren. Weitere Informationen finden Sie in den API-Spezifikationen.
Starten des Streamens von Audio auf Ihren Webserver zum Zeitpunkt der Anrufantwort
Aktivieren Sie das automatische Audio-Streaming, wenn der Anruf aufgebaut wird, indem Sie das Flag startMediaStreaming: true
festlegen.
Diese Einstellung stellt sicher, dass Audio-Streaming automatisch gestartet wird, sobald der Anruf verbunden ist.
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,
)
Wenn Azure Communication Services die URL für Ihren WebSocket-Server empfängt, wird eine Verbindung damit hergestellt. Sobald die Verbindung erfolgreich hergestellt wurde, wird Streaming initiiert.
Starten des Streamens von Audio auf Ihren Webserver, während ein Anruf ausgeführt wird
Zum Starten des Medien-Streaming während des Anrufs können Sie die API verwenden. Legen Sie dazu den Parameter startMediaStreaming
auf false
(die Standardeinstellung) fest. Später im Aufruf können Sie die Start-API verwenden, um das Medien-Streaming zu aktivieren.
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"
)
Beenden des Audiostreamings
Um den Empfang von Audiodatenströmen während eines Anrufs zu beenden, können Sie die API zum Beenden des Streamingsverwenden. Auf diese Weise können Sie das Audio-Streaming an einem beliebigen Punkt im Anruf beenden. Es gibt zwei Möglichkeiten, wie Audio-Streaming gestoppt werden kann;
- Auslösen der API zum Beenden des Streamings: Verwenden Sie die API, um den Empfang von Audio-Streamingdaten zu beenden, während der Aufruf noch aktiv ist.
- Automatisches Beenden bei Trennung des Anrufs: Audio-Streaming wird automatisch beendet, wenn der Anruf getrennt wird.
call_automation_client.get_call_connection(call_connection_id).stop_media_streaming(operation_context="stopMediaStreamingContext")
Verarbeiten von Audiostreams auf Ihrem WebSocket-Server
Im folgenden Beispiel wird veranschaulicht, wie Sie Audiodatenströmen mithilfe Ihres WebSocket-Servers lauschen.
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}")
Das erste empfangene Paket enthält Metadaten zum Datenstrom, einschließlich Audioeinstellungen wie Codierung, Abtastrate und anderen Konfigurationsdetails.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Nach dem Senden des Metadatenpakets beginnt Azure Communication Services (ACS) damit, Audiomedien an Ihren WebSocket-Server zu streamen.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Senden von Audio-Streamingdaten an Azure Communication Services
Wenn bidirektionales Streaming mithilfe des Flag EnableBidirectional
in der Datei MediaStreamingOptions
aktiviert ist, können Sie Audiodaten zurück zu Azure Communication Services streamen, wodurch die Audiowiedergabe im Anruf erfolgt.
Sobald Azure Communication Services mit dem Streamen von Audio auf Ihren WebSocket-Server beginnt, können Sie das Audio an Ihre KI-Dienste weiterleiten. Nachdem Ihr KI-Dienst den Audioinhalt verarbeitet hat, können Sie das Audio zurück zum laufenden Anruf in Azure Communication Services streamen.
Das Beispiel veranschaulicht, wie ein anderer Dienst, z. B. Azure OpenAI oder andere sprachbasierte Large Language Models, die Audiodaten zurück in den Anruf verarbeitet und überträgt.
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)
Sie können auch die Wiedergabe von Audio im Anruf steuern, wenn Sie das Streaming auf Azure Communication Services basierend auf Ihrer Logik oder Ihrem Geschäftsablauf ausführen. Wenn beispielsweise Sprachaktivität erkannt wird und Sie die Audiowarteschlange stoppen möchten, können Sie eine Stoppmeldung über das WebSocket senden, um die Audiowiedergabe im Anruf zu beenden.
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)
Bereinigen von Ressourcen
Wenn Sie ein Communication Services-Abonnement bereinigen und entfernen möchten, können Sie die Ressource oder die Ressourcengruppe löschen. Wenn Sie die Ressourcengruppe löschen, werden auch alle anderen Ressourcen gelöscht, die ihr zugeordnet sind. Weitere Informationen zum Bereinigen von Ressourcen finden Sie hier.
Nächste Schritte
- Erfahren Sie mehr über Audio-Streaming.
- Erfahren Sie mehr über die Anrufautomatisierung und ihre Features.
- Erfahren Sie mehr über die Wiedergabeaktion.
- Erfahren Sie mehr über die Aktion „Erkennen“.