Guia de início rápido: streaming de áudio do lado do servidor
Importante
A funcionalidade descrita neste artigo está atualmente em visualização pública. Esta versão de pré-visualização é fornecida sem um contrato de nível de serviço e não a recomendamos para cargas de trabalho de produção. Algumas funcionalidades poderão não ser suportadas ou poderão ter capacidades limitadas. Para obter mais informações, veja Termos Suplementares de Utilização para Pré-visualizações do Microsoft Azure.
Comece a usar fluxos de áudio por meio da API de Streaming de Áudio dos Serviços de Comunicação do Azure. Este guia de início rápido pressupõe que você já esteja familiarizado com as APIs de automação de chamadas para criar uma solução automatizada de roteamento de chamadas.
A funcionalidade descrita neste início rápido está atualmente em visualização pública.
Pré-requisitos
- Uma conta do Azure com uma subscrição ativa, para obter detalhes, consulte Criar uma conta gratuitamente.
- Um recurso dos Serviços de Comunicação do Azure. Consulte Criar um recurso dos Serviços de Comunicação do Azure.
- Um novo aplicativo de serviço Web criado usando o SDK de automação de chamadas.
- A biblioteca .NET mais recente para o seu sistema operativo.
- Um servidor websocket que pode enviar e receber fluxos de mídia.
Configurar um servidor websocket
Os Serviços de Comunicação do Azure exigem que seu aplicativo de servidor configure um servidor WebSocket para transmitir áudio em tempo real. WebSocket é um protocolo padronizado que fornece um canal de comunicação full-duplex através de uma única conexão TCP.
Você pode revisar a documentação aqui para saber mais sobre WebSockets e como usá-los.
Receber e enviar dados de streaming de áudio
Há várias maneiras de começar a receber fluxo de áudio, que pode ser configurado usando o startMediaStreaming
sinalizador na mediaStreamingOptions
configuração. Você também pode especificar a taxa de amostragem desejada usada para receber ou enviar dados de áudio usando o audioFormat
parâmetro. Atualmente, os formatos suportados são PCM 24K mono e PCM 16K mono, com o padrão sendo PCM 16K mono.
Para habilitar o streaming de áudio bidirecional, onde você está enviando dados de áudio para a chamada, você pode ativar o EnableBidirectional
sinalizador. Para obter mais detalhes, consulte as especificações da API.
Comece a transmitir áudio para o seu servidor web no momento de atender a chamada
Habilite o streaming de áudio automático quando a chamada for estabelecida definindo o sinalizador startMediaStreaming: true
.
Essa configuração garante que o streaming de áudio seja iniciado automaticamente assim que a chamada for conectada.
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);
Quando os Serviços de Comunicação do Azure recebem a URL para seu servidor WebSocket, ele estabelece uma conexão com ele. Uma vez que a conexão é feita com sucesso, o streaming é iniciado.
Comece a transmitir áudio para o seu servidor web enquanto uma chamada está em andamento
Para iniciar o streaming de mídia durante a chamada, você pode usar a API. Para fazer isso, defina o startMediaStreaming
parâmetro como false
(que é o padrão) e, mais tarde na chamada, você pode usar a API de início para habilitar o streaming de mídia.
var mediaStreamingOptions = new MediaStreamingOptions(
new Uri("wss://<YOUR_WEBSOCKET_URL"),
MediaStreamingContent.Audio,
MediaStreamingAudioChannel.Mixed,
startMediaStreaming: false) {
EnableBidirectional = true,
AudioFormat = AudioFormat.Pcm24KMono
}
var options = new AnswerCallOptions(incomingCallContext, callbackUri) {
MediaStreamingOptions = mediaStreamingOptions,
};
AnswerCallResult answerCallResult = await client.AnswerCallAsync(options);
Start media streaming via API call
StartMediaStreamingOptions options = new StartMediaStreamingOptions() {
OperationContext = "startMediaStreamingContext"
};
await callMedia.StartMediaStreamingAsync();
Parar o streaming de áudio
Para parar de receber fluxos de áudio durante uma chamada, você pode usar a API Parar streaming. Isso permite que você pare o streaming de áudio a qualquer momento da chamada. Há duas maneiras de interromper o streaming de áudio;
- Acionando a API Stop streaming: use a API para parar de receber dados de streaming de áudio enquanto a chamada ainda estiver ativa.
- Desconexão automática de parada na chamada: o streaming de áudio para automaticamente quando a chamada é desconectada.
StopMediaStreamingOptions options = new StopMediaStreamingOptions() {
OperationContext = "stopMediaStreamingContext"
};
await callMedia.StopMediaStreamingAsync();
Manipulando fluxos de áudio em seu servidor websocket
Este exemplo demonstra como ouvir fluxos de áudio usando seu servidor websocket.
private async Task StartReceivingFromAcsMediaWebSocket(Websocket websocket) {
while (webSocket.State == WebSocketState.Open || webSocket.State == WebSocketState.Closed) {
byte[] receiveBuffer = new byte[2048];
WebSocketReceiveResult receiveResult = await webSocket.ReceiveAsync(
new ArraySegment < byte > (receiveBuffer));
if (receiveResult.MessageType != WebSocketMessageType.Close) {
string data = Encoding.UTF8.GetString(receiveBuffer).TrimEnd('\0');
var input = StreamingData.Parse(data);
if (input is AudioData audioData) {
// Add your code here to process the received audio chunk
}
}
}
}
O primeiro pacote que você recebe contém metadados sobre o fluxo, incluindo configurações de áudio, como codificação, taxa de amostragem e outros detalhes de configuração.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Depois de enviar o pacote de metadados, os Serviços de Comunicação do Azure (ACS) começarão a transmitir mídia de áudio para seu servidor WebSocket.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Enviar dados de streaming de áudio para os Serviços de Comunicação do Azure
Se o streaming bidirecional estiver habilitado usando o EnableBidirectional
sinalizador no , você poderá transmitir dados de áudio de volta para os MediaStreamingOptions
Serviços de Comunicação do Azure, que reproduzem o áudio na chamada.
Assim que os Serviços de Comunicação do Azure começarem a transmitir áudio para o seu servidor WebSocket, pode retransmitir o áudio para os seus serviços de IA. Depois que seu serviço de IA processar o conteúdo de áudio, você poderá transmitir o áudio de volta para a chamada em andamento nos Serviços de Comunicação do Azure.
O exemplo demonstra como outro serviço, como o Azure OpenAI ou outros modelos de linguagem grande baseados em voz, processa e transmite os dados de áudio de volta para a chamada.
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);
Você também pode controlar a reprodução de áudio na chamada ao transmitir de volta para os Serviços de Comunicação do Azure, com base em sua lógica ou fluxo de negócios. Por exemplo, quando a atividade de voz é detetada e você deseja parar o áudio em fila, você pode enviar uma mensagem de parada através do WebSocket para impedir que o áudio seja reproduzido na chamada.
var stopData = OutStreamingData.GetStopAudioForOutbound();
byte[] jsonBytes = Encoding.UTF8.GetBytes(stopData);
// Write your logic to send stop data to ACS over the WebSocket
// Example of how to send stop data over the WebSocket
await m_webSocket.SendAsync(new ArraySegment < byte > (jsonBytes), WebSocketMessageType.Text, endOfMessage: true, CancellationToken.None);
Pré-requisitos
- Conta do Azure com uma subscrição ativa, para obter detalhes, consulte Criar uma conta gratuitamente.
- Um recurso dos Serviços de Comunicação do Azure. Consulte Criar um recurso dos Serviços de Comunicação do Azure.
- Um novo aplicativo de serviço Web criado usando o SDK de automação de chamadas.
- Java Development Kit versão 17 ou superior.
- Apache Maven.
Configurar um servidor websocket
Os Serviços de Comunicação do Azure exigem que seu aplicativo de servidor configure um servidor WebSocket para transmitir áudio em tempo real. WebSocket é um protocolo padronizado que fornece um canal de comunicação full-duplex através de uma única conexão TCP.
Você pode revisar a documentação aqui para saber mais sobre WebSockets e como usá-los.
Receber e enviar dados de streaming de áudio
Há várias maneiras de começar a receber fluxo de áudio, que pode ser configurado usando o startMediaStreaming
sinalizador na mediaStreamingOptions
configuração. Você também pode especificar a taxa de amostragem desejada usada para receber ou enviar dados de áudio usando o audioFormat
parâmetro. Atualmente, os formatos suportados são PCM 24K mono e PCM 16K mono, com o padrão sendo PCM 16K mono.
Para habilitar o streaming de áudio bidirecional, onde você está enviando dados de áudio para a chamada, você pode ativar o EnableBidirectional
sinalizador. Para obter mais detalhes, consulte as especificações da API.
Comece a transmitir áudio para o seu servidor web no momento de atender a chamada
Habilite o streaming de áudio automático quando a chamada for estabelecida definindo o sinalizador startMediaStreaming: true
.
Essa configuração garante que o streaming de áudio seja iniciado automaticamente assim que a chamada for conectada.
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);
Quando os Serviços de Comunicação do Azure recebem a URL para seu servidor WebSocket, ele estabelece uma conexão com ele. Uma vez que a conexão é feita com sucesso, o streaming é iniciado.
Comece a transmitir áudio para o seu servidor web enquanto uma chamada está em andamento
Para iniciar o streaming de mídia durante a chamada, você pode usar a API. Para fazer isso, defina o startMediaStreaming
parâmetro como false
(que é o padrão) e, mais tarde na chamada, você pode usar a API de início para habilitar o streaming de mídia.
MediaStreamingOptions mediaStreamingOptions = new MediaStreamingOptions(appConfig.getTransportUrl(), MediaStreamingTransport.WEBSOCKET, MediaStreamingContent.AUDIO, MediaStreamingAudioChannel.MIXED, false)
.setEnableBidirectional(true)
.setAudioFormat(AudioFormat.PCM_24K_MONO);
options = new AnswerCallOptions(data.getString(INCOMING_CALL_CONTEXT), callbackUri)
.setCallIntelligenceOptions(callIntelligenceOptions)
.setMediaStreamingOptions(mediaStreamingOptions);
Response answerCallResponse = client.answerCallWithResponse(options, Context.NONE);
StartMediaStreamingOptions startMediaStreamingOptions = new StartMediaStreamingOptions()
.setOperationContext("startMediaStreamingContext");
callConnection.getCallMedia().startMediaStreamingWithResponse(startMediaStreamingOptions, Context.NONE);
Parar o streaming de áudio
Para parar de receber fluxos de áudio durante uma chamada, você pode usar a API Parar streaming. Isso permite que você pare o streaming de áudio a qualquer momento da chamada. Há duas maneiras de interromper o streaming de áudio;
- Acionando a API Stop streaming: use a API para parar de receber dados de streaming de áudio enquanto a chamada ainda estiver ativa.
- Desconexão automática de parada na chamada: o streaming de áudio para automaticamente quando a chamada é desconectada.
StopMediaStreamingOptions stopMediaStreamingOptions = new StopMediaStreamingOptions()
.setOperationContext("stopMediaStreamingContext");
callConnection.getCallMedia().stopMediaStreamingWithResponse(stopMediaStreamingOptions, Context.NONE);
Manipulando fluxos de áudio em seu servidor websocket
Este exemplo demonstra como ouvir fluxos de áudio usando seu servidor websocket.
@OnMessage
public void onMessage(String message, Session session) {
System.out.println("Received message: " + message);
var parsedData = StreamingData.parse(message);
if (parsedData instanceof AudioData) {
var audioData = (AudioData) parsedData;
sendAudioData(session, audioData.getData());
}
}
O primeiro pacote que você recebe contém metadados sobre o fluxo, incluindo configurações de áudio, como codificação, taxa de amostragem e outros detalhes de configuração.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Depois de enviar o pacote de metadados, os Serviços de Comunicação do Azure (ACS) começarão a transmitir mídia de áudio para seu servidor WebSocket.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Enviar dados de streaming de áudio para os Serviços de Comunicação do Azure
Se o streaming bidirecional estiver habilitado usando o EnableBidirectional
sinalizador no , você poderá transmitir dados de áudio de volta para os MediaStreamingOptions
Serviços de Comunicação do Azure, que reproduzem o áudio na chamada.
Assim que os Serviços de Comunicação do Azure começarem a transmitir áudio para o seu servidor WebSocket, pode retransmitir o áudio para os seus serviços de IA. Depois que seu serviço de IA processar o conteúdo de áudio, você poderá transmitir o áudio de volta para a chamada em andamento nos Serviços de Comunicação do Azure.
O exemplo demonstra como outro serviço, como o Azure OpenAI ou outros modelos de linguagem grande baseados em voz, processa e transmite os dados de áudio de volta para a chamada.
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();
}
}
}
Você também pode controlar a reprodução de áudio na chamada ao transmitir de volta para os Serviços de Comunicação do Azure, com base em sua lógica ou fluxo de negócios. Por exemplo, quando a atividade de voz é detetada e você deseja parar o áudio em fila, você pode enviar uma mensagem de parada através do WebSocket para impedir que o áudio seja reproduzido na chamada.
private void stopAudio(Session session) {
if (session.isOpen()) {
try {
var serializedData = OutStreamingData.getStopAudioForOutbound();
session.getAsyncRemote().sendText(serializedData);
} catch (IOException e) {
e.printStackTrace();
}
}
}
Pré-requisitos
- Conta do Azure com uma subscrição ativa, para obter detalhes, consulte Criar uma conta gratuitamente.
- Um recurso dos Serviços de Comunicação do Azure. Consulte Criar um recurso dos Serviços de Comunicação do Azure.
- Um novo aplicativo de serviço Web criado usando o SDK de automação de chamadas.
- Instalação Node.js LTS
- Um servidor websocket que pode enviar e receber fluxos de mídia.
Configurar um servidor websocket
Os Serviços de Comunicação do Azure exigem que seu aplicativo de servidor configure um servidor WebSocket para transmitir áudio em tempo real. WebSocket é um protocolo padronizado que fornece um canal de comunicação full-duplex através de uma única conexão TCP.
Você pode revisar a documentação aqui para saber mais sobre WebSockets e como usá-los.
Receber e enviar dados de streaming de áudio
Há várias maneiras de começar a receber fluxo de áudio, que pode ser configurado usando o startMediaStreaming
sinalizador na mediaStreamingOptions
configuração. Você também pode especificar a taxa de amostragem desejada usada para receber ou enviar dados de áudio usando o audioFormat
parâmetro. Atualmente, os formatos suportados são PCM 24K mono e PCM 16K mono, com o padrão sendo PCM 16K mono.
Para habilitar o streaming de áudio bidirecional, onde você está enviando dados de áudio para a chamada, você pode ativar o EnableBidirectional
sinalizador. Para obter mais detalhes, consulte as especificações da API.
Comece a transmitir áudio para o seu servidor web no momento de atender a chamada
Habilite o streaming de áudio automático quando a chamada for estabelecida definindo o sinalizador startMediaStreaming: true
.
Essa configuração garante que o streaming de áudio seja iniciado automaticamente assim que a chamada for conectada.
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);
Quando os Serviços de Comunicação do Azure recebem a URL para seu servidor WebSocket, ele estabelece uma conexão com ele. Uma vez que a conexão é feita com sucesso, o streaming é iniciado.
Comece a transmitir áudio para o seu servidor web enquanto uma chamada está em andamento
Para iniciar o streaming de mídia durante a chamada, você pode usar a API. Para fazer isso, defina o startMediaStreaming
parâmetro como false
(que é o padrão) e, mais tarde na chamada, você pode usar a API de início para habilitar o streaming de mídia.
const mediaStreamingOptions: MediaStreamingOptions = {
transportUrl: transportUrl,
transportType: "websocket",
contentType: "audio",
audioChannelType: "unmixed",
startMediaStreaming: false,
enableBidirectional: true,
audioFormat: "Pcm24KMono"
}
const answerCallOptions: AnswerCallOptions = {
mediaStreamingOptions: mediaStreamingOptions
};
answerCallResult = await acsClient.answerCall(
incomingCallContext,
callbackUri,
answerCallOptions
);
const startMediaStreamingOptions: StartMediaStreamingOptions = {
operationContext: "startMediaStreaming"
}
await answerCallResult.callConnection.getCallMedia().startMediaStreaming(startMediaStreamingOptions);
Parar o streaming de áudio
Para parar de receber fluxos de áudio durante uma chamada, você pode usar a API Parar streaming. Isso permite que você pare o streaming de áudio a qualquer momento da chamada. Há duas maneiras de interromper o streaming de áudio;
- Acionando a API Stop streaming: use a API para parar de receber dados de streaming de áudio enquanto a chamada ainda estiver ativa.
- Desconexão automática de parada na chamada: o streaming de áudio para automaticamente quando a chamada é desconectada.
const stopMediaStreamingOptions: StopMediaStreamingOptions = {
operationContext: "stopMediaStreaming"
}
await answerCallResult.callConnection.getCallMedia().stopMediaStreaming(stopMediaStreamingOptions);
Manipulando fluxos de áudio em seu servidor websocket
Este exemplo demonstra como ouvir fluxos de áudio usando seu servidor websocket.
wss.on('connection', async (ws: WebSocket) => {
console.log('Client connected');
await initWebsocket(ws);
await startConversation();
ws.on('message', async (packetData: ArrayBuffer) => {
try {
if (ws.readyState === WebSocket.OPEN) {
await processWebsocketMessageAsync(packetData);
} else {
console.warn(`ReadyState: ${ws.readyState}`);
}
} catch (error) {
console.error('Error processing WebSocket message:', error);
}
});
ws.on('close', () => {
console.log('Client disconnected');
});
});
async function processWebsocketMessageAsync(receivedBuffer: ArrayBuffer) {
const result = StreamingData.parse(receivedBuffer);
const kind = StreamingData.getStreamingKind();
// Get the streaming data kind
if (kind === StreamingDataKind.AudioData) {
const audioData = (result as AudioData);
// process your audio data
}
}
O primeiro pacote que você recebe contém metadados sobre o fluxo, incluindo configurações de áudio, como codificação, taxa de amostragem e outros detalhes de configuração.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Depois de enviar o pacote de metadados, os Serviços de Comunicação do Azure (ACS) começarão a transmitir mídia de áudio para seu servidor WebSocket.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Enviar dados de streaming de áudio para os Serviços de Comunicação do Azure
Se o streaming bidirecional estiver habilitado usando o EnableBidirectional
sinalizador no , você poderá transmitir dados de áudio de volta para os MediaStreamingOptions
Serviços de Comunicação do Azure, que reproduzem o áudio na chamada.
Assim que os Serviços de Comunicação do Azure começarem a transmitir áudio para o seu servidor WebSocket, pode retransmitir o áudio para os seus serviços de IA. Depois que seu serviço de IA processar o conteúdo de áudio, você poderá transmitir o áudio de volta para a chamada em andamento nos Serviços de Comunicação do Azure.
O exemplo demonstra como outro serviço, como o Azure OpenAI ou outros modelos de linguagem grande baseados em voz, processa e transmite os dados de áudio de volta para a chamada.
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);
}
}
Você também pode controlar a reprodução de áudio na chamada ao transmitir de volta para os Serviços de Comunicação do Azure, com base em sua lógica ou fluxo de negócios. Por exemplo, quando a atividade de voz é detetada e você deseja parar o áudio em fila, você pode enviar uma mensagem de parada através do WebSocket para impedir que o áudio seja reproduzido na chamada.
async function stopAudio() {
try {
const jsonData = OutStreamingData.getStopAudioForOutbound();
if (ws.readyState === WebSocket.OPEN) {
ws.send(jsonData);
} else {
console.log("socket connection is not open.");
}
} catch (e) {
console.log(e);
}
}
Pré-requisitos
- Conta do Azure com uma subscrição ativa, para obter detalhes, consulte Criar uma conta gratuitamente.
- Um recurso dos Serviços de Comunicação do Azure. Consulte Criar um recurso dos Serviços de Comunicação do Azure.
- Um novo aplicativo de serviço Web criado usando o SDK de automação de chamadas.
- Python 3.7+.
- Um servidor websocket que pode enviar e receber fluxos de mídia.
Configurar um servidor websocket
Os Serviços de Comunicação do Azure exigem que seu aplicativo de servidor configure um servidor WebSocket para transmitir áudio em tempo real. WebSocket é um protocolo padronizado que fornece um canal de comunicação full-duplex através de uma única conexão TCP.
Você pode revisar a documentação aqui para saber mais sobre WebSockets e como usá-los.
Receber e enviar dados de streaming de áudio
Há várias maneiras de começar a receber fluxo de áudio, que pode ser configurado usando o startMediaStreaming
sinalizador na mediaStreamingOptions
configuração. Você também pode especificar a taxa de amostragem desejada usada para receber ou enviar dados de áudio usando o audioFormat
parâmetro. Atualmente, os formatos suportados são PCM 24K mono e PCM 16K mono, com o padrão sendo PCM 16K mono.
Para habilitar o streaming de áudio bidirecional, onde você está enviando dados de áudio para a chamada, você pode ativar o EnableBidirectional
sinalizador. Para obter mais detalhes, consulte as especificações da API.
Comece a transmitir áudio para o seu servidor web no momento de atender a chamada
Habilite o streaming de áudio automático quando a chamada for estabelecida definindo o sinalizador startMediaStreaming: true
.
Essa configuração garante que o streaming de áudio seja iniciado automaticamente assim que a chamada for conectada.
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,
)
Quando os Serviços de Comunicação do Azure recebem a URL para seu servidor WebSocket, ele estabelece uma conexão com ele. Uma vez que a conexão é feita com sucesso, o streaming é iniciado.
Comece a transmitir áudio para o seu servidor web enquanto uma chamada está em andamento
Para iniciar o streaming de mídia durante a chamada, você pode usar a API. Para fazer isso, defina o startMediaStreaming
parâmetro como false
(que é o padrão) e, mais tarde na chamada, você pode usar a API de início para habilitar o streaming de mídia.
media_streaming_configuration = MediaStreamingOptions(
transport_url=TRANSPORT_URL,
transport_type=MediaStreamingTransportType.WEBSOCKET,
content_type=MediaStreamingContentType.AUDIO,
audio_channel_type=MediaStreamingAudioChannelType.MIXED,
start_media_streaming=False,
enable_bidirectional=True,
audio_format=AudioFormat.PCM24_K_MONO
)
answer_call_result = call_automation_client.answer_call(
incoming_call_context=incoming_call_context,
media_streaming=media_streaming_configuration,
callback_url=callback_uri
)
call_automation_client.get_call_connection(call_connection_id).start_media_streaming(
operation_context="startMediaStreamingContext"
)
Parar o streaming de áudio
Para parar de receber fluxos de áudio durante uma chamada, você pode usar a API Parar streaming. Isso permite que você pare o streaming de áudio a qualquer momento da chamada. Há duas maneiras de interromper o streaming de áudio;
- Acionando a API Stop streaming: use a API para parar de receber dados de streaming de áudio enquanto a chamada ainda estiver ativa.
- Desconexão automática de parada na chamada: o streaming de áudio para automaticamente quando a chamada é desconectada.
call_automation_client.get_call_connection(call_connection_id).stop_media_streaming(operation_context="stopMediaStreamingContext")
Manipulando fluxos de áudio em seu servidor websocket
Este exemplo demonstra como ouvir fluxos de áudio usando seu servidor websocket.
async def handle_client(websocket):
print("Client connected")
try:
async for message in websocket:
json_object = json.loads(message)
kind = json_object["kind"]
if kind == "AudioData":
audio_data = json_object["audioData"]["data"]
# process your audio data
except websockets.exceptions.ConnectionClosedOK:
print("Client disconnected")
except websockets.exceptions.ConnectionClosedError as e:
print(f"Connection closed with error: {e}")
except Exception as e:
print(f"Unexpected error: {e}")
O primeiro pacote que você recebe contém metadados sobre o fluxo, incluindo configurações de áudio, como codificação, taxa de amostragem e outros detalhes de configuração.
{
"kind": "AudioMetadata",
"audioMetadata": {
"subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
"encoding": "PCM",
"sampleRate": 16000,
"channels": 1,
"length": 640
}
}
Depois de enviar o pacote de metadados, os Serviços de Comunicação do Azure (ACS) começarão a transmitir mídia de áudio para seu servidor WebSocket.
{
"kind": "AudioData",
"audioData": {
"timestamp": "2024-11-15T19:16:12.925Z",
"participantRawID": "8:acs:3d20e1de-0f28-41c5…",
"data": "5ADwAOMA6AD0A…",
"silent": false
}
}
Enviar dados de streaming de áudio para os Serviços de Comunicação do Azure
Se o streaming bidirecional estiver habilitado usando o EnableBidirectional
sinalizador no , você poderá transmitir dados de áudio de volta para os MediaStreamingOptions
Serviços de Comunicação do Azure, que reproduzem o áudio na chamada.
Assim que os Serviços de Comunicação do Azure começarem a transmitir áudio para o seu servidor WebSocket, pode retransmitir o áudio para os seus serviços de IA. Depois que seu serviço de IA processar o conteúdo de áudio, você poderá transmitir o áudio de volta para a chamada em andamento nos Serviços de Comunicação do Azure.
O exemplo demonstra como outro serviço, como o Azure OpenAI ou outros modelos de linguagem grande baseados em voz, processa e transmite os dados de áudio de volta para a chamada.
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)
Você também pode controlar a reprodução de áudio na chamada ao transmitir de volta para os Serviços de Comunicação do Azure, com base em sua lógica ou fluxo de negócios. Por exemplo, quando a atividade de voz é detetada e você deseja parar o áudio em fila, você pode enviar uma mensagem de parada através do WebSocket para impedir que o áudio seja reproduzido na chamada.
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)
Clean up resources (Limpar recursos)
Se quiser limpar e remover uma assinatura dos Serviços de Comunicação, você pode excluir o recurso ou grupo de recursos. A exclusão do grupo de recursos também exclui quaisquer outros recursos associados a ele. Saiba mais sobre a limpeza de recursos.
Próximos passos
- Saiba mais sobre o streaming de áudio.
- Saiba mais sobre a Automação de Chamadas e seus recursos.
- Saiba mais sobre a ação Jogar.
- Saiba mais sobre a ação Reconhecimento.