Quickstart: Audiostreaming aan serverzijde
Belangrijk
De functionaliteit die in dit artikel wordt beschreven, is momenteel beschikbaar als openbare preview. Deze preview-versie wordt geleverd zonder een service level agreement en we raden deze niet aan voor productieworkloads. Misschien worden bepaalde functies niet ondersteund of zijn de mogelijkheden ervan beperkt. Zie Aanvullende gebruiksvoorwaarden voor Microsoft Azure-previews voor meer informatie.
Aan de slag met het gebruik van audiostreams via de Audio Streaming-API van Azure Communication Services. In deze quickstart wordt ervan uitgegaan dat u al bekend bent met Call Automation-API's om een geautomatiseerde oplossing voor oproeproutering te bouwen.
De functionaliteit die in deze quickstart wordt beschreven, is momenteel beschikbaar als openbare preview.
Vereisten
- Een Azure-account met een actief abonnement, zie Gratis een account maken.
- Een Azure Communication Services-resource. Zie Een Azure Communication Services-resource maken.
- Een nieuwe webservicetoepassing die is gemaakt met behulp van de Call Automation SDK.
- De nieuwste .NET-bibliotheek voor uw besturingssysteem.
- Een websocket-server die mediastreams kan verzenden en ontvangen.
Een websocket-server instellen
Voor Azure Communication Services moet uw servertoepassing een WebSocket-server instellen om audio in realtime te streamen. WebSocket is een gestandaardiseerd protocol dat een full-duplex communicatiekanaal biedt via één TCP-verbinding.
U kunt hier documentatie raadplegen voor meer informatie over WebSockets en hoe u deze kunt gebruiken.
Audiostreaminggegevens ontvangen en verzenden
Er zijn meerdere manieren om te beginnen met het ontvangen van audiostreams, die kunnen worden geconfigureerd met behulp van de startMediaStreaming
vlag in de mediaStreamingOptions
installatie. U kunt ook de gewenste samplefrequentie opgeven die wordt gebruikt voor het ontvangen of verzenden van audiogegevens met behulp van de audioFormat
parameter. Momenteel ondersteunde indelingen zijn PCM 24K mono en PCM 16K mono, waarbij de standaard PCM 16K mono is.
Als u bidirectionele audiostreaming wilt inschakelen, waar u audiogegevens naar het gesprek verzendt, kunt u de EnableBidirectional
vlag inschakelen. Raadpleeg de API-specificaties voor meer informatie.
Start het streamen van audio naar uw webserver op het moment van het beantwoorden van het gesprek
Schakel automatische audiostreaming in wanneer het gesprek tot stand is gebracht door de vlag startMediaStreaming: true
in te stellen.
Deze instelling zorgt ervoor dat audiostreaming automatisch wordt gestart zodra het gesprek is verbonden.
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);
Wanneer Azure Communication Services de URL voor uw WebSocket-server ontvangt, wordt er een verbinding met de server tot stand gebracht. Zodra de verbinding tot stand is gebracht, wordt streaming gestart.
Start het streamen van audio naar uw webserver terwijl er een gesprek wordt uitgevoerd
Als u mediastreaming wilt starten tijdens de aanroep, kunt u de API gebruiken. Hiervoor stelt u de startMediaStreaming
parameter false
in op (dit is de standaardinstelling) en later in de aanroep kunt u de start-API gebruiken om mediastreaming in te schakelen.
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();
Audiostreaming stoppen
Als u geen audiostreams meer wilt ontvangen tijdens een aanroep, kunt u de streaming-API stoppen. Hierdoor kunt u het streamen van audio op elk moment in het gesprek stoppen. Er zijn twee manieren waarop audiostreaming kan worden gestopt;
- De streaming-API stoppen activeren: gebruik de API om het ontvangen van audiostreaminggegevens te stoppen terwijl de aanroep nog actief is.
- Automatische stop bij het verbreken van de oproep: audiostreaming stopt automatisch wanneer de oproep wordt verbroken.
StopMediaStreamingOptions options = new StopMediaStreamingOptions() {
OperationContext = "stopMediaStreamingContext"
};
await callMedia.StopMediaStreamingAsync();
Audiostreams verwerken in uw websocket-server
In dit voorbeeld ziet u hoe u audiostreams kunt beluisteren met behulp van uw 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
}
}
}
}
Het eerste pakket dat u ontvangt, bevat metagegevens over de stream, waaronder audio-instellingen zoals codering, samplefrequentie en andere configuratiedetails.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Nadat het metagegevenspakket is verzonden, begint Azure Communication Services (ACS) met het streamen van audiomedia naar uw WebSocket-server.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Audiostreaminggegevens verzenden naar Azure Communication Services
Als bidirectionele streaming is ingeschakeld met behulp van de EnableBidirectional
vlag in de MediaStreamingOptions
vlag, kunt u audiogegevens terug streamen naar Azure Communication Services, waarmee de audio in het gesprek wordt afgespeeld.
Zodra Azure Communication Services audio gaat streamen naar uw WebSocket-server, kunt u de audio doorsturen naar uw AI-services. Nadat uw AI-service de audio-inhoud heeft verwerkt, kunt u de audio terug streamen naar het lopende gesprek in Azure Communication Services.
In het voorbeeld ziet u hoe een andere service, zoals Azure OpenAI of andere op spraak gebaseerde grote taalmodellen, de audiogegevens weer naar het gesprek verzendt.
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);
U kunt ook het afspelen van audio in het gesprek beheren wanneer u terug streamt naar Azure Communication Services, op basis van uw logica of bedrijfsstroom. Wanneer bijvoorbeeld spraakactiviteit wordt gedetecteerd en u de audio in de wachtrij wilt stoppen, kunt u een stopbericht verzenden via de WebSocket om te voorkomen dat het geluid in het gesprek wordt afgespeeld.
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);
Vereisten
- Azure-account met een actief abonnement, zie Gratis een account maken voor meer informatie .
- Een Azure Communication Services-resource. Zie Een Azure Communication Services-resource maken.
- Een nieuwe webservicetoepassing die is gemaakt met behulp van de Call Automation SDK.
- Java Development Kit versie 17 of hoger.
- Apache Maven.
Een websocket-server instellen
Voor Azure Communication Services moet uw servertoepassing een WebSocket-server instellen om audio in realtime te streamen. WebSocket is een gestandaardiseerd protocol dat een full-duplex communicatiekanaal biedt via één TCP-verbinding.
U kunt hier documentatie raadplegen voor meer informatie over WebSockets en hoe u deze kunt gebruiken.
Audiostreaminggegevens ontvangen en verzenden
Er zijn meerdere manieren om te beginnen met het ontvangen van audiostreams, die kunnen worden geconfigureerd met behulp van de startMediaStreaming
vlag in de mediaStreamingOptions
installatie. U kunt ook de gewenste samplefrequentie opgeven die wordt gebruikt voor het ontvangen of verzenden van audiogegevens met behulp van de audioFormat
parameter. Momenteel ondersteunde indelingen zijn PCM 24K mono en PCM 16K mono, waarbij de standaard PCM 16K mono is.
Als u bidirectionele audiostreaming wilt inschakelen, waar u audiogegevens naar het gesprek verzendt, kunt u de EnableBidirectional
vlag inschakelen. Raadpleeg de API-specificaties voor meer informatie.
Start het streamen van audio naar uw webserver op het moment van het beantwoorden van het gesprek
Schakel automatische audiostreaming in wanneer het gesprek tot stand is gebracht door de vlag startMediaStreaming: true
in te stellen.
Deze instelling zorgt ervoor dat audiostreaming automatisch wordt gestart zodra het gesprek is verbonden.
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);
Wanneer Azure Communication Services de URL voor uw WebSocket-server ontvangt, wordt er een verbinding met de server tot stand gebracht. Zodra de verbinding tot stand is gebracht, wordt streaming gestart.
Start het streamen van audio naar uw webserver terwijl er een gesprek wordt uitgevoerd
Als u mediastreaming wilt starten tijdens de aanroep, kunt u de API gebruiken. Hiervoor stelt u de startMediaStreaming
parameter false
in op (dit is de standaardinstelling) en later in de aanroep kunt u de start-API gebruiken om mediastreaming in te schakelen.
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);
Audiostreaming stoppen
Als u geen audiostreams meer wilt ontvangen tijdens een aanroep, kunt u de streaming-API stoppen. Hierdoor kunt u het streamen van audio op elk moment in het gesprek stoppen. Er zijn twee manieren waarop audiostreaming kan worden gestopt;
- De streaming-API stoppen activeren: gebruik de API om het ontvangen van audiostreaminggegevens te stoppen terwijl de aanroep nog actief is.
- Automatische stop bij het verbreken van de oproep: audiostreaming stopt automatisch wanneer de oproep wordt verbroken.
StopMediaStreamingOptions stopMediaStreamingOptions = new StopMediaStreamingOptions()
.setOperationContext("stopMediaStreamingContext");
callConnection.getCallMedia().stopMediaStreamingWithResponse(stopMediaStreamingOptions, Context.NONE);
Audiostreams verwerken in uw websocket-server
In dit voorbeeld ziet u hoe u audiostreams kunt beluisteren met behulp van uw 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());
}
}
Het eerste pakket dat u ontvangt, bevat metagegevens over de stream, waaronder audio-instellingen zoals codering, samplefrequentie en andere configuratiedetails.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Nadat het metagegevenspakket is verzonden, begint Azure Communication Services (ACS) met het streamen van audiomedia naar uw WebSocket-server.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Audiostreaminggegevens verzenden naar Azure Communication Services
Als bidirectionele streaming is ingeschakeld met behulp van de EnableBidirectional
vlag in de MediaStreamingOptions
vlag, kunt u audiogegevens terug streamen naar Azure Communication Services, waarmee de audio in het gesprek wordt afgespeeld.
Zodra Azure Communication Services audio gaat streamen naar uw WebSocket-server, kunt u de audio doorsturen naar uw AI-services. Nadat uw AI-service de audio-inhoud heeft verwerkt, kunt u de audio terug streamen naar het lopende gesprek in Azure Communication Services.
In het voorbeeld ziet u hoe een andere service, zoals Azure OpenAI of andere op spraak gebaseerde grote taalmodellen, de audiogegevens weer naar het gesprek verzendt.
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();
}
}
}
U kunt ook het afspelen van audio in het gesprek beheren wanneer u terug streamt naar Azure Communication Services, op basis van uw logica of bedrijfsstroom. Wanneer bijvoorbeeld spraakactiviteit wordt gedetecteerd en u de audio in de wachtrij wilt stoppen, kunt u een stopbericht verzenden via de WebSocket om te voorkomen dat het geluid in het gesprek wordt afgespeeld.
private void stopAudio(Session session) {
if (session.isOpen()) {
try {
var serializedData = OutStreamingData.getStopAudioForOutbound();
session.getAsyncRemote().sendText(serializedData);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Vereisten
- Azure-account met een actief abonnement, zie Gratis een account maken voor meer informatie .
- Een Azure Communication Services-resource. Zie Een Azure Communication Services-resource maken.
- Een nieuwe webservicetoepassing die is gemaakt met behulp van de Call Automation SDK.
- Node.js LTS-installatie
- Een websocket-server die mediastreams kan verzenden en ontvangen.
Een websocket-server instellen
Voor Azure Communication Services moet uw servertoepassing een WebSocket-server instellen om audio in realtime te streamen. WebSocket is een gestandaardiseerd protocol dat een full-duplex communicatiekanaal biedt via één TCP-verbinding.
U kunt hier documentatie raadplegen voor meer informatie over WebSockets en hoe u deze kunt gebruiken.
Audiostreaminggegevens ontvangen en verzenden
Er zijn meerdere manieren om te beginnen met het ontvangen van audiostreams, die kunnen worden geconfigureerd met behulp van de startMediaStreaming
vlag in de mediaStreamingOptions
installatie. U kunt ook de gewenste samplefrequentie opgeven die wordt gebruikt voor het ontvangen of verzenden van audiogegevens met behulp van de audioFormat
parameter. Momenteel ondersteunde indelingen zijn PCM 24K mono en PCM 16K mono, waarbij de standaard PCM 16K mono is.
Als u bidirectionele audiostreaming wilt inschakelen, waar u audiogegevens naar het gesprek verzendt, kunt u de EnableBidirectional
vlag inschakelen. Raadpleeg de API-specificaties voor meer informatie.
Start het streamen van audio naar uw webserver op het moment van het beantwoorden van het gesprek
Schakel automatische audiostreaming in wanneer het gesprek tot stand is gebracht door de vlag startMediaStreaming: true
in te stellen.
Deze instelling zorgt ervoor dat audiostreaming automatisch wordt gestart zodra het gesprek is verbonden.
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);
Wanneer Azure Communication Services de URL voor uw WebSocket-server ontvangt, wordt er een verbinding met de server tot stand gebracht. Zodra de verbinding tot stand is gebracht, wordt streaming gestart.
Start het streamen van audio naar uw webserver terwijl er een gesprek wordt uitgevoerd
Als u mediastreaming wilt starten tijdens de aanroep, kunt u de API gebruiken. Hiervoor stelt u de startMediaStreaming
parameter false
in op (dit is de standaardinstelling) en later in de aanroep kunt u de start-API gebruiken om mediastreaming in te schakelen.
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);
Audiostreaming stoppen
Als u geen audiostreams meer wilt ontvangen tijdens een aanroep, kunt u de streaming-API stoppen. Hierdoor kunt u het streamen van audio op elk moment in het gesprek stoppen. Er zijn twee manieren waarop audiostreaming kan worden gestopt;
- De streaming-API stoppen activeren: gebruik de API om het ontvangen van audiostreaminggegevens te stoppen terwijl de aanroep nog actief is.
- Automatische stop bij het verbreken van de oproep: audiostreaming stopt automatisch wanneer de oproep wordt verbroken.
const stopMediaStreamingOptions: StopMediaStreamingOptions = {
operationContext: "stopMediaStreaming"
}
await answerCallResult.callConnection.getCallMedia().stopMediaStreaming(stopMediaStreamingOptions);
Audiostreams verwerken in uw websocket-server
In dit voorbeeld ziet u hoe u audiostreams kunt beluisteren met behulp van uw 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
}
}
Het eerste pakket dat u ontvangt, bevat metagegevens over de stream, waaronder audio-instellingen zoals codering, samplefrequentie en andere configuratiedetails.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Nadat het metagegevenspakket is verzonden, begint Azure Communication Services (ACS) met het streamen van audiomedia naar uw WebSocket-server.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Audiostreaminggegevens verzenden naar Azure Communication Services
Als bidirectionele streaming is ingeschakeld met behulp van de EnableBidirectional
vlag in de MediaStreamingOptions
vlag, kunt u audiogegevens terug streamen naar Azure Communication Services, waarmee de audio in het gesprek wordt afgespeeld.
Zodra Azure Communication Services audio gaat streamen naar uw WebSocket-server, kunt u de audio doorsturen naar uw AI-services. Nadat uw AI-service de audio-inhoud heeft verwerkt, kunt u de audio terug streamen naar het lopende gesprek in Azure Communication Services.
In het voorbeeld ziet u hoe een andere service, zoals Azure OpenAI of andere op spraak gebaseerde grote taalmodellen, de audiogegevens weer naar het gesprek verzendt.
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);
}
}
U kunt ook het afspelen van audio in het gesprek beheren wanneer u terug streamt naar Azure Communication Services, op basis van uw logica of bedrijfsstroom. Wanneer bijvoorbeeld spraakactiviteit wordt gedetecteerd en u de audio in de wachtrij wilt stoppen, kunt u een stopbericht verzenden via de WebSocket om te voorkomen dat het geluid in het gesprek wordt afgespeeld.
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);
}
}
Vereisten
- Azure-account met een actief abonnement, zie Gratis een account maken voor meer informatie .
- Een Azure Communication Services-resource. Zie Een Azure Communication Services-resource maken.
- Een nieuwe webservicetoepassing die is gemaakt met behulp van de Call Automation SDK.
- Python 3.7+.
- Een websocket-server die mediastreams kan verzenden en ontvangen.
Een websocket-server instellen
Voor Azure Communication Services moet uw servertoepassing een WebSocket-server instellen om audio in realtime te streamen. WebSocket is een gestandaardiseerd protocol dat een full-duplex communicatiekanaal biedt via één TCP-verbinding.
U kunt hier documentatie raadplegen voor meer informatie over WebSockets en hoe u deze kunt gebruiken.
Audiostreaminggegevens ontvangen en verzenden
Er zijn meerdere manieren om te beginnen met het ontvangen van audiostreams, die kunnen worden geconfigureerd met behulp van de startMediaStreaming
vlag in de mediaStreamingOptions
installatie. U kunt ook de gewenste samplefrequentie opgeven die wordt gebruikt voor het ontvangen of verzenden van audiogegevens met behulp van de audioFormat
parameter. Momenteel ondersteunde indelingen zijn PCM 24K mono en PCM 16K mono, waarbij de standaard PCM 16K mono is.
Als u bidirectionele audiostreaming wilt inschakelen, waar u audiogegevens naar het gesprek verzendt, kunt u de EnableBidirectional
vlag inschakelen. Raadpleeg de API-specificaties voor meer informatie.
Start het streamen van audio naar uw webserver op het moment van het beantwoorden van het gesprek
Schakel automatische audiostreaming in wanneer het gesprek tot stand is gebracht door de vlag startMediaStreaming: true
in te stellen.
Deze instelling zorgt ervoor dat audiostreaming automatisch wordt gestart zodra het gesprek is verbonden.
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,
)
Wanneer Azure Communication Services de URL voor uw WebSocket-server ontvangt, wordt er een verbinding met de server tot stand gebracht. Zodra de verbinding tot stand is gebracht, wordt streaming gestart.
Start het streamen van audio naar uw webserver terwijl er een gesprek wordt uitgevoerd
Als u mediastreaming wilt starten tijdens de aanroep, kunt u de API gebruiken. Hiervoor stelt u de startMediaStreaming
parameter false
in op (dit is de standaardinstelling) en later in de aanroep kunt u de start-API gebruiken om mediastreaming in te schakelen.
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"
)
Audiostreaming stoppen
Als u geen audiostreams meer wilt ontvangen tijdens een aanroep, kunt u de streaming-API stoppen. Hierdoor kunt u het streamen van audio op elk moment in het gesprek stoppen. Er zijn twee manieren waarop audiostreaming kan worden gestopt;
- De streaming-API stoppen activeren: gebruik de API om het ontvangen van audiostreaminggegevens te stoppen terwijl de aanroep nog actief is.
- Automatische stop bij het verbreken van de oproep: audiostreaming stopt automatisch wanneer de oproep wordt verbroken.
call_automation_client.get_call_connection(call_connection_id).stop_media_streaming(operation_context="stopMediaStreamingContext")
Audiostreams verwerken in uw websocket-server
In dit voorbeeld ziet u hoe u audiostreams kunt beluisteren met behulp van uw 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}")
Het eerste pakket dat u ontvangt, bevat metagegevens over de stream, waaronder audio-instellingen zoals codering, samplefrequentie en andere configuratiedetails.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Nadat het metagegevenspakket is verzonden, begint Azure Communication Services (ACS) met het streamen van audiomedia naar uw WebSocket-server.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Audiostreaminggegevens verzenden naar Azure Communication Services
Als bidirectionele streaming is ingeschakeld met behulp van de EnableBidirectional
vlag in de MediaStreamingOptions
vlag, kunt u audiogegevens terug streamen naar Azure Communication Services, waarmee de audio in het gesprek wordt afgespeeld.
Zodra Azure Communication Services audio gaat streamen naar uw WebSocket-server, kunt u de audio doorsturen naar uw AI-services. Nadat uw AI-service de audio-inhoud heeft verwerkt, kunt u de audio terug streamen naar het lopende gesprek in Azure Communication Services.
In het voorbeeld ziet u hoe een andere service, zoals Azure OpenAI of andere op spraak gebaseerde grote taalmodellen, de audiogegevens weer naar het gesprek verzendt.
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)
U kunt ook het afspelen van audio in het gesprek beheren wanneer u terug streamt naar Azure Communication Services, op basis van uw logica of bedrijfsstroom. Wanneer bijvoorbeeld spraakactiviteit wordt gedetecteerd en u de audio in de wachtrij wilt stoppen, kunt u een stopbericht verzenden via de WebSocket om te voorkomen dat het geluid in het gesprek wordt afgespeeld.
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)
Resources opschonen
Als u een Communication Services-abonnement wilt opschonen en verwijderen, kunt u de resource of resourcegroep verwijderen. Als u de resourcegroep verwijdert, worden ook alle bijbehorende resources verwijderd. Meer informatie over het opschonen van resources.
Volgende stappen
- Meer informatie over audiostreaming.
- Meer informatie over Gespreksautomatisering en de bijbehorende functies.
- Meer informatie over actie Afspelen.
- Meer informatie over de actie Herkennen.