Snabbstart: Ljuduppspelning på serversidan
Viktigt!
Funktioner som beskrivs i den här artikeln är för närvarande i offentlig förhandsversion. Den här förhandsversionen tillhandahålls utan ett serviceavtal och vi rekommenderar det inte för produktionsarbetsbelastningar. Vissa funktioner kanske inte stöds eller kan vara begränsade. Mer information finns i Kompletterande villkor för användning av Microsoft Azure-förhandsversioner.
Kom igång med att använda ljudströmmar via Api för ljudströmning i Azure Communication Services. Den här snabbstarten förutsätter att du redan är bekant med API:er för samtalsautomatisering för att skapa en automatiserad lösning för samtalsroutning.
Funktioner som beskrivs i den här snabbstarten finns för närvarande i offentlig förhandsversion.
Förutsättningar
- Ett Azure-konto med en aktiv prenumeration finns i Skapa ett konto kostnadsfritt.
- En Azure Communication Services-resurs. Se Skapa en Azure Communication Services-resurs.
- Ett nytt webbtjänstprogram som skapats med hjälp av Call Automation SDK.
- Det senaste .NET-biblioteket för operativsystemet.
- En websocket-server som kan skicka och ta emot medieströmmar.
Konfigurera en websocket-server
Azure Communication Services kräver att serverprogrammet konfigurerar en WebSocket-server för att strömma ljud i realtid. WebSocket är ett standardiserat protokoll som tillhandahåller en kommunikationskanal med full duplex över en enda TCP-anslutning.
Du kan läsa dokumentationen här om du vill veta mer om WebSockets och hur du använder dem.
Ta emot och skicka ljuduppspelningsdata
Det finns flera sätt att börja ta emot ljudström, som kan konfigureras med hjälp av startMediaStreaming
flaggan i mediaStreamingOptions
installationen. Du kan också ange önskad exempelfrekvens som används för att ta emot eller skicka ljuddata med hjälp av parametern audioFormat
. Format som stöds för närvarande är PCM 24K mono och PCM 16K mono, där standardvärdet är PCM 16K mono.
Om du vill aktivera dubbelriktad ljudströmning, där du skickar ljuddata till samtalet, kan du aktivera EnableBidirectional
flaggan. Mer information finns i API-specifikationerna.
Starta strömmande ljud till webbservern när du svarar på samtalet
Aktivera automatisk ljuduppspelning när anropet upprättas genom att ange flaggan startMediaStreaming: true
.
Den här inställningen säkerställer att ljuduppspelningen startas automatiskt så snart samtalet är anslutet.
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);
När Azure Communication Services tar emot URL:en för webSocket-servern upprättas en anslutning till den. När anslutningen har upprättats initieras direktuppspelning.
Starta strömmande ljud till webbservern medan ett anrop pågår
Om du vill starta medieströmning under anropet kan du använda API:et. Om du vill göra det anger du parametern startMediaStreaming
till false
(vilket är standard) och senare i anropet kan du använda start-API:et för att aktivera medieströmning.
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();
Stoppa ljuduppspelning
Om du vill sluta ta emot ljudströmmar under ett anrop kan du använda API:et Stoppa direktuppspelning. På så sätt kan du stoppa ljuduppspelningen när som helst i samtalet. Det finns två sätt att stoppa ljuduppspelning.
- Utlöser API:et Stoppa direktuppspelning: Använd API:et för att sluta ta emot strömmande ljuddata medan anropet fortfarande är aktivt.
- Automatisk frånkoppling av samtal: Ljuduppspelningen stoppas automatiskt när samtalet kopplas från.
StopMediaStreamingOptions options = new StopMediaStreamingOptions() {
OperationContext = "stopMediaStreamingContext"
};
await callMedia.StopMediaStreamingAsync();
Hantera ljudströmmar på din websocket-server
Det här exemplet visar hur du lyssnar på ljudströmmar med hjälp av din websocket-server.
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
}
}
}
}
Det första paketet som du får innehåller metadata om strömmen, inklusive ljudinställningar som kodning, exempelfrekvens och annan konfigurationsinformation.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
När metadatapaketet har skickats börjar Azure Communication Services (ACS) strömma ljudmedier till WebSocket-servern.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Skicka ljuduppspelningsdata till Azure Communication Services
Om dubbelriktad direktuppspelning är aktiverat med hjälp av EnableBidirectional
flaggan i MediaStreamingOptions
kan du strömma ljuddata tillbaka till Azure Communication Services, som spelar upp ljudet i samtalet.
När Azure Communication Services börjar strömma ljud till din WebSocket-server kan du vidarebefordra ljudet till dina AI-tjänster. När AI-tjänsten har bearbetat ljudinnehållet kan du strömma tillbaka ljudet till det pågående samtalet i Azure Communication Services.
Exemplet visar hur en annan tjänst, till exempel Azure OpenAI eller andra röstbaserade modeller för stora språk, bearbetar och överför ljuddata tillbaka till samtalet.
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);
Du kan också styra uppspelningen av ljud i samtalet när du strömmar tillbaka till Azure Communication Services, baserat på din logik eller ditt affärsflöde. När röstaktiviteten till exempel identifieras och du vill stoppa det i köade ljudet kan du skicka ett stoppmeddelande via WebSocket för att stoppa ljudet från att spelas upp i samtalet.
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);
Förutsättningar
- Azure-konto med en aktiv prenumeration finns i Skapa ett konto kostnadsfritt.
- En Azure Communication Services-resurs. Se Skapa en Azure Communication Services-resurs.
- Ett nytt webbtjänstprogram som skapats med hjälp av Call Automation SDK.
- Java Development Kit version 17 eller senare.
- Apache Maven.
Konfigurera en websocket-server
Azure Communication Services kräver att serverprogrammet konfigurerar en WebSocket-server för att strömma ljud i realtid. WebSocket är ett standardiserat protokoll som tillhandahåller en kommunikationskanal med full duplex över en enda TCP-anslutning.
Du kan läsa dokumentationen här om du vill veta mer om WebSockets och hur du använder dem.
Ta emot och skicka ljuduppspelningsdata
Det finns flera sätt att börja ta emot ljudström, som kan konfigureras med hjälp av startMediaStreaming
flaggan i mediaStreamingOptions
installationen. Du kan också ange önskad exempelfrekvens som används för att ta emot eller skicka ljuddata med hjälp av parametern audioFormat
. Format som stöds för närvarande är PCM 24K mono och PCM 16K mono, där standardvärdet är PCM 16K mono.
Om du vill aktivera dubbelriktad ljudströmning, där du skickar ljuddata till samtalet, kan du aktivera EnableBidirectional
flaggan. Mer information finns i API-specifikationerna.
Starta strömmande ljud till webbservern när du svarar på samtalet
Aktivera automatisk ljuduppspelning när anropet upprättas genom att ange flaggan startMediaStreaming: true
.
Den här inställningen säkerställer att ljuduppspelningen startas automatiskt så snart samtalet är anslutet.
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);
När Azure Communication Services tar emot URL:en för webSocket-servern upprättas en anslutning till den. När anslutningen har upprättats initieras direktuppspelning.
Starta strömmande ljud till webbservern medan ett anrop pågår
Om du vill starta medieströmning under anropet kan du använda API:et. Om du vill göra det anger du parametern startMediaStreaming
till false
(vilket är standard) och senare i anropet kan du använda start-API:et för att aktivera medieströmning.
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);
Stoppa ljuduppspelning
Om du vill sluta ta emot ljudströmmar under ett anrop kan du använda API:et Stoppa direktuppspelning. På så sätt kan du stoppa ljuduppspelningen när som helst i samtalet. Det finns två sätt att stoppa ljuduppspelning.
- Utlöser API:et Stoppa direktuppspelning: Använd API:et för att sluta ta emot strömmande ljuddata medan anropet fortfarande är aktivt.
- Automatisk frånkoppling av samtal: Ljuduppspelningen stoppas automatiskt när samtalet kopplas från.
StopMediaStreamingOptions stopMediaStreamingOptions = new StopMediaStreamingOptions()
.setOperationContext("stopMediaStreamingContext");
callConnection.getCallMedia().stopMediaStreamingWithResponse(stopMediaStreamingOptions, Context.NONE);
Hantera ljudströmmar på din websocket-server
Det här exemplet visar hur du lyssnar på ljudströmmar med hjälp av din websocket-server.
@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());
}
}
Det första paketet som du får innehåller metadata om strömmen, inklusive ljudinställningar som kodning, exempelfrekvens och annan konfigurationsinformation.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
När metadatapaketet har skickats börjar Azure Communication Services (ACS) strömma ljudmedier till WebSocket-servern.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Skicka ljuduppspelningsdata till Azure Communication Services
Om dubbelriktad direktuppspelning är aktiverat med hjälp av EnableBidirectional
flaggan i MediaStreamingOptions
kan du strömma ljuddata tillbaka till Azure Communication Services, som spelar upp ljudet i samtalet.
När Azure Communication Services börjar strömma ljud till din WebSocket-server kan du vidarebefordra ljudet till dina AI-tjänster. När AI-tjänsten har bearbetat ljudinnehållet kan du strömma tillbaka ljudet till det pågående samtalet i Azure Communication Services.
Exemplet visar hur en annan tjänst, till exempel Azure OpenAI eller andra röstbaserade modeller för stora språk, bearbetar och överför ljuddata tillbaka till samtalet.
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();
}
}
}
Du kan också styra uppspelningen av ljud i samtalet när du strömmar tillbaka till Azure Communication Services, baserat på din logik eller ditt affärsflöde. När röstaktiviteten till exempel identifieras och du vill stoppa det i köade ljudet kan du skicka ett stoppmeddelande via WebSocket för att stoppa ljudet från att spelas upp i samtalet.
private void stopAudio(Session session) {
if (session.isOpen()) {
try {
var serializedData = OutStreamingData.getStopAudioForOutbound();
session.getAsyncRemote().sendText(serializedData);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Förutsättningar
- Azure-konto med en aktiv prenumeration finns i Skapa ett konto kostnadsfritt.
- En Azure Communication Services-resurs. Se Skapa en Azure Communication Services-resurs.
- Ett nytt webbtjänstprogram som skapats med hjälp av Call Automation SDK.
- Node.js LTS-installation
- En websocket-server som kan skicka och ta emot medieströmmar.
Konfigurera en websocket-server
Azure Communication Services kräver att serverprogrammet konfigurerar en WebSocket-server för att strömma ljud i realtid. WebSocket är ett standardiserat protokoll som tillhandahåller en kommunikationskanal med full duplex över en enda TCP-anslutning.
Du kan läsa dokumentationen här om du vill veta mer om WebSockets och hur du använder dem.
Ta emot och skicka ljuduppspelningsdata
Det finns flera sätt att börja ta emot ljudström, som kan konfigureras med hjälp av startMediaStreaming
flaggan i mediaStreamingOptions
installationen. Du kan också ange önskad exempelfrekvens som används för att ta emot eller skicka ljuddata med hjälp av parametern audioFormat
. Format som stöds för närvarande är PCM 24K mono och PCM 16K mono, där standardvärdet är PCM 16K mono.
Om du vill aktivera dubbelriktad ljudströmning, där du skickar ljuddata till samtalet, kan du aktivera EnableBidirectional
flaggan. Mer information finns i API-specifikationerna.
Starta strömmande ljud till webbservern när du svarar på samtalet
Aktivera automatisk ljuduppspelning när anropet upprättas genom att ange flaggan startMediaStreaming: true
.
Den här inställningen säkerställer att ljuduppspelningen startas automatiskt så snart samtalet är anslutet.
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);
När Azure Communication Services tar emot URL:en för webSocket-servern upprättas en anslutning till den. När anslutningen har upprättats initieras direktuppspelning.
Starta strömmande ljud till webbservern medan ett anrop pågår
Om du vill starta medieströmning under anropet kan du använda API:et. Om du vill göra det anger du parametern startMediaStreaming
till false
(vilket är standard) och senare i anropet kan du använda start-API:et för att aktivera medieströmning.
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);
Stoppa ljuduppspelning
Om du vill sluta ta emot ljudströmmar under ett anrop kan du använda API:et Stoppa direktuppspelning. På så sätt kan du stoppa ljuduppspelningen när som helst i samtalet. Det finns två sätt att stoppa ljuduppspelning.
- Utlöser API:et Stoppa direktuppspelning: Använd API:et för att sluta ta emot strömmande ljuddata medan anropet fortfarande är aktivt.
- Automatisk frånkoppling av samtal: Ljuduppspelningen stoppas automatiskt när samtalet kopplas från.
const stopMediaStreamingOptions: StopMediaStreamingOptions = {
operationContext: "stopMediaStreaming"
}
await answerCallResult.callConnection.getCallMedia().stopMediaStreaming(stopMediaStreamingOptions);
Hantera ljudströmmar på din websocket-server
Det här exemplet visar hur du lyssnar på ljudströmmar med hjälp av din websocket-server.
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
}
}
Det första paketet som du får innehåller metadata om strömmen, inklusive ljudinställningar som kodning, exempelfrekvens och annan konfigurationsinformation.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
När metadatapaketet har skickats börjar Azure Communication Services (ACS) strömma ljudmedier till WebSocket-servern.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Skicka ljuduppspelningsdata till Azure Communication Services
Om dubbelriktad direktuppspelning är aktiverat med hjälp av EnableBidirectional
flaggan i MediaStreamingOptions
kan du strömma ljuddata tillbaka till Azure Communication Services, som spelar upp ljudet i samtalet.
När Azure Communication Services börjar strömma ljud till din WebSocket-server kan du vidarebefordra ljudet till dina AI-tjänster. När AI-tjänsten har bearbetat ljudinnehållet kan du strömma tillbaka ljudet till det pågående samtalet i Azure Communication Services.
Exemplet visar hur en annan tjänst, till exempel Azure OpenAI eller andra röstbaserade modeller för stora språk, bearbetar och överför ljuddata tillbaka till samtalet.
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);
}
}
Du kan också styra uppspelningen av ljud i samtalet när du strömmar tillbaka till Azure Communication Services, baserat på din logik eller ditt affärsflöde. När röstaktiviteten till exempel identifieras och du vill stoppa det i köade ljudet kan du skicka ett stoppmeddelande via WebSocket för att stoppa ljudet från att spelas upp i samtalet.
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);
}
}
Förutsättningar
- Azure-konto med en aktiv prenumeration finns i Skapa ett konto kostnadsfritt.
- En Azure Communication Services-resurs. Se Skapa en Azure Communication Services-resurs.
- Ett nytt webbtjänstprogram som skapats med hjälp av Call Automation SDK.
- Python 3.7+.
- En websocket-server som kan skicka och ta emot medieströmmar.
Konfigurera en websocket-server
Azure Communication Services kräver att serverprogrammet konfigurerar en WebSocket-server för att strömma ljud i realtid. WebSocket är ett standardiserat protokoll som tillhandahåller en kommunikationskanal med full duplex över en enda TCP-anslutning.
Du kan läsa dokumentationen här om du vill veta mer om WebSockets och hur du använder dem.
Ta emot och skicka ljuduppspelningsdata
Det finns flera sätt att börja ta emot ljudström, som kan konfigureras med hjälp av startMediaStreaming
flaggan i mediaStreamingOptions
installationen. Du kan också ange önskad exempelfrekvens som används för att ta emot eller skicka ljuddata med hjälp av parametern audioFormat
. Format som stöds för närvarande är PCM 24K mono och PCM 16K mono, där standardvärdet är PCM 16K mono.
Om du vill aktivera dubbelriktad ljudströmning, där du skickar ljuddata till samtalet, kan du aktivera EnableBidirectional
flaggan. Mer information finns i API-specifikationerna.
Starta strömmande ljud till webbservern när du svarar på samtalet
Aktivera automatisk ljuduppspelning när anropet upprättas genom att ange flaggan startMediaStreaming: true
.
Den här inställningen säkerställer att ljuduppspelningen startas automatiskt så snart samtalet är anslutet.
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,
)
När Azure Communication Services tar emot URL:en för webSocket-servern upprättas en anslutning till den. När anslutningen har upprättats initieras direktuppspelning.
Starta strömmande ljud till webbservern medan ett anrop pågår
Om du vill starta medieströmning under anropet kan du använda API:et. Om du vill göra det anger du parametern startMediaStreaming
till false
(vilket är standard) och senare i anropet kan du använda start-API:et för att aktivera medieströmning.
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"
)
Stoppa ljuduppspelning
Om du vill sluta ta emot ljudströmmar under ett anrop kan du använda API:et Stoppa direktuppspelning. På så sätt kan du stoppa ljuduppspelningen när som helst i samtalet. Det finns två sätt att stoppa ljuduppspelning.
- Utlöser API:et Stoppa direktuppspelning: Använd API:et för att sluta ta emot strömmande ljuddata medan anropet fortfarande är aktivt.
- Automatisk frånkoppling av samtal: Ljuduppspelningen stoppas automatiskt när samtalet kopplas från.
call_automation_client.get_call_connection(call_connection_id).stop_media_streaming(operation_context="stopMediaStreamingContext")
Hantera ljudströmmar på din websocket-server
Det här exemplet visar hur du lyssnar på ljudströmmar med hjälp av din websocket-server.
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}")
Det första paketet som du får innehåller metadata om strömmen, inklusive ljudinställningar som kodning, exempelfrekvens och annan konfigurationsinformation.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
När metadatapaketet har skickats börjar Azure Communication Services (ACS) strömma ljudmedier till WebSocket-servern.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Skicka ljuduppspelningsdata till Azure Communication Services
Om dubbelriktad direktuppspelning är aktiverat med hjälp av EnableBidirectional
flaggan i MediaStreamingOptions
kan du strömma ljuddata tillbaka till Azure Communication Services, som spelar upp ljudet i samtalet.
När Azure Communication Services börjar strömma ljud till din WebSocket-server kan du vidarebefordra ljudet till dina AI-tjänster. När AI-tjänsten har bearbetat ljudinnehållet kan du strömma tillbaka ljudet till det pågående samtalet i Azure Communication Services.
Exemplet visar hur en annan tjänst, till exempel Azure OpenAI eller andra röstbaserade modeller för stora språk, bearbetar och överför ljuddata tillbaka till samtalet.
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)
Du kan också styra uppspelningen av ljud i samtalet när du strömmar tillbaka till Azure Communication Services, baserat på din logik eller ditt affärsflöde. När röstaktiviteten till exempel identifieras och du vill stoppa det i köade ljudet kan du skicka ett stoppmeddelande via WebSocket för att stoppa ljudet från att spelas upp i samtalet.
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)
Rensa resurser
Om du vill rensa och ta bort en Communication Services-prenumeration kan du ta bort resursen eller resursgruppen. Om du tar bort resursgruppen tas även alla andra resurser som är associerade med den bort. Läs mer om att rensa resurser.
Nästa steg
- Läs mer om ljuduppspelning.
- Läs mer om Samtalsautomation och dess funktioner.
- Läs mer om Play-åtgärder.
- Läs mer om åtgärden Identifiera.