Sdílet prostřednictvím


Rychlý start: Streamování zvuku na straně serveru

Důležité

Funkce popsané v tomto článku jsou aktuálně ve verzi Public Preview. Tato verze Preview je poskytována bez smlouvy o úrovni služeb a nedoporučujeme ji pro produkční úlohy. Některé funkce se nemusí podporovat nebo mohou mít omezené možnosti. Další informace najdete v dodatečných podmínkách použití pro verze Preview v Microsoft Azure.

Začínáme s používáním zvukových streamů prostřednictvím rozhraní API pro streamování zvuku ve službě Azure Communication Services V tomto rychlém startu se předpokládá, že už znáte rozhraní API pro automatizaci volání k vytvoření řešení automatizovaného směrování volání.

Funkce popsané v tomto rychlém startu jsou aktuálně ve verzi Public Preview.

Požadavky

  • Podrobnosti o účtu Azure s aktivním předplatným najdete v tématu Vytvoření účtu zdarma.
  • Prostředek Azure Communication Services. Viz Vytvoření prostředku Azure Communication Services.
  • Nová aplikace webové služby vytvořená pomocí sady SDK pro automatizaci volání
  • Nejnovější knihovna .NET pro váš operační systém.
  • Server websocket, který může odesílat a přijímat datové proudy médií.

Nastavení serveru websocket

Služba Azure Communication Services vyžaduje, aby serverová aplikace nastavila server WebSocket pro streamování zvuku v reálném čase. WebSocket je standardizovaný protokol, který poskytuje plně duplexní komunikační kanál přes jedno připojení TCP.

Další informace o webSocketech a jejich používání najdete v dokumentaci.

Příjem a odesílání streamovaných dat zvuku

Existuje několik způsobů, jak začít přijímat zvukový stream, který lze nakonfigurovat pomocí startMediaStreaming příznaku mediaStreamingOptions v nastavení. Můžete také určit požadovanou vzorkovací frekvenci použitou pro příjem nebo odesílání zvukových dat pomocí parametru audioFormat . Aktuálně podporované formáty jsou PCM 24K mono a PCM 16K mono s výchozím pcM 16K mono.

Pokud chcete povolit obousměrné streamování zvuku, do kterého do hovoru odesíláte zvuková data, můžete příznak povolit EnableBidirectional . Další podrobnosti najdete v specifikacích rozhraní API.

Zahájení streamování zvuku do webového serveru při odpovídání na hovor

Povolit automatické streamování zvuku při vytvoření volání nastavením příznaku startMediaStreaming: true.

Toto nastavení zajistí, že se streamování zvuku spustí automaticky, jakmile se hovor připojí.

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);

Když služba Azure Communication Services obdrží adresu URL vašeho serveru WebSocket, vytvoří k němu připojení. Po úspěšném vytvoření připojení se zahájí streamování.

Spuštění streamování zvuku do webového serveru během probíhajícího hovoru

Pokud chcete spustit streamování médií během volání, můžete použít rozhraní API. Uděláte to tak, že nastavíte startMediaStreaming parametr ( false což je výchozí) a později ve volání povolíte streamování médií pomocí počátečního rozhraní API.

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();

Zastavení streamování zvuku

K zastavení příjmu zvukových streamů během volání můžete použít rozhraní API pro zastavení streamování. To vám umožní zastavit streamování zvuku v libovolném bodě hovoru. Existují dva způsoby, jak je možné zastavit streamování zvuku;

  • Aktivace rozhraní API pro zastavení streamování: Pomocí rozhraní API zastavte příjem streamovaných dat zvuku, zatímco volání je stále aktivní.
  • Automatické zastavení při odpojení hovoru: Streamování zvuku se automaticky zastaví, když se hovor odpojí.
StopMediaStreamingOptions options = new StopMediaStreamingOptions() {
  OperationContext = "stopMediaStreamingContext"
};

await callMedia.StopMediaStreamingAsync();

Zpracování zvukových streamů na serveru websocket

Tato ukázka ukazuje, jak naslouchat zvukovým streamům pomocí serveru 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
      }
    }
  }
}

První paket, který obdržíte, obsahuje metadata o datovém proudu, včetně nastavení zvuku, jako je kódování, vzorkovací frekvence a další podrobnosti o konfiguraci.

{
  "kind": "AudioMetadata",
  "audioMetadata": {
    "subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
    "encoding": "PCM",
    "sampleRate": 16000,
    "channels": 1,
    "length": 640
  }
}

Po odeslání paketu metadat služba Azure Communication Services (ACS) začne streamovat zvukové médium na server WebSocket.

{
  "kind": "AudioData",
  "audioData": {
    "timestamp": "2024-11-15T19:16:12.925Z",
    "participantRawID": "8:acs:3d20e1de-0f28-41c5…",
    "data": "5ADwAOMA6AD0A…",
    "silent": false
  }
}

Odesílání streamovaných dat zvuku do Azure Communication Services

Pokud je zapnuté obousměrné streamování pomocí EnableBidirectional příznaku MediaStreamingOptions, můžete streamovat zvuková data zpět do služby Azure Communication Services, která přehrává zvuk do hovoru.

Jakmile Služba Azure Communication Services začne streamovat zvuk na server WebSocket, můžete zvuk předat svým službám AI. Jakmile služba AI zpracuje zvukový obsah, můžete zvuk streamovat zpět do probíhajícího volání ve službě Azure Communication Services.

Příklad ukazuje, jak jiná služba, jako je Azure OpenAI nebo jiné hlasové velké jazykové modely, zpracovává a přenáší zvuková data zpět do volání.

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);

Přehrávání zvuku v hovoru můžete řídit také při streamování zpět do azure Communication Services na základě vaší logiky nebo obchodního toku. Když se například zjistí hlasová aktivita a chcete zastavit zvuk zařazený do fronty, můžete přes webSocket odeslat zprávu stop, která zastaví přehrávání zvuku v hovoru.

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);

Požadavky

Nastavení serveru websocket

Služba Azure Communication Services vyžaduje, aby serverová aplikace nastavila server WebSocket pro streamování zvuku v reálném čase. WebSocket je standardizovaný protokol, který poskytuje plně duplexní komunikační kanál přes jedno připojení TCP.

Další informace o webSocketech a jejich používání najdete v dokumentaci.

Příjem a odesílání streamovaných dat zvuku

Existuje několik způsobů, jak začít přijímat zvukový stream, který lze nakonfigurovat pomocí startMediaStreaming příznaku mediaStreamingOptions v nastavení. Můžete také určit požadovanou vzorkovací frekvenci použitou pro příjem nebo odesílání zvukových dat pomocí parametru audioFormat . Aktuálně podporované formáty jsou PCM 24K mono a PCM 16K mono s výchozím pcM 16K mono.

Pokud chcete povolit obousměrné streamování zvuku, do kterého do hovoru odesíláte zvuková data, můžete příznak povolit EnableBidirectional . Další podrobnosti najdete v specifikacích rozhraní API.

Zahájení streamování zvuku do webového serveru při odpovídání na hovor

Povolit automatické streamování zvuku při vytvoření volání nastavením příznaku startMediaStreaming: true.

Toto nastavení zajistí, že se streamování zvuku spustí automaticky, jakmile se hovor připojí.

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);

Když služba Azure Communication Services obdrží adresu URL vašeho serveru WebSocket, vytvoří k němu připojení. Po úspěšném vytvoření připojení se zahájí streamování.

Spuštění streamování zvuku do webového serveru během probíhajícího hovoru

Pokud chcete spustit streamování médií během volání, můžete použít rozhraní API. Uděláte to tak, že nastavíte startMediaStreaming parametr ( false což je výchozí) a později ve volání povolíte streamování médií pomocí počátečního rozhraní API.

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);     

Zastavení streamování zvuku

K zastavení příjmu zvukových streamů během volání můžete použít rozhraní API pro zastavení streamování. To vám umožní zastavit streamování zvuku v libovolném bodě hovoru. Existují dva způsoby, jak je možné zastavit streamování zvuku;

  • Aktivace rozhraní API pro zastavení streamování: Pomocí rozhraní API zastavte příjem streamovaných dat zvuku, zatímco volání je stále aktivní.
  • Automatické zastavení při odpojení hovoru: Streamování zvuku se automaticky zastaví, když se hovor odpojí.
StopMediaStreamingOptions stopMediaStreamingOptions = new StopMediaStreamingOptions()
    .setOperationContext("stopMediaStreamingContext");
callConnection.getCallMedia().stopMediaStreamingWithResponse(stopMediaStreamingOptions, Context.NONE);

Zpracování zvukových streamů na serveru websocket

Tato ukázka ukazuje, jak naslouchat zvukovým streamům pomocí serveru 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());
  }
}

První paket, který obdržíte, obsahuje metadata o datovém proudu, včetně nastavení zvuku, jako je kódování, vzorkovací frekvence a další podrobnosti o konfiguraci.

{
  "kind": "AudioMetadata",
  "audioMetadata": {
    "subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
    "encoding": "PCM",
    "sampleRate": 16000,
    "channels": 1,
    "length": 640
  }
}

Po odeslání paketu metadat služba Azure Communication Services (ACS) začne streamovat zvukové médium na server WebSocket.

{
  "kind": "AudioData",
  "audioData": {
    "timestamp": "2024-11-15T19:16:12.925Z",
    "participantRawID": "8:acs:3d20e1de-0f28-41c5…",
    "data": "5ADwAOMA6AD0A…",
    "silent": false
  }
}

Odesílání streamovaných dat zvuku do Azure Communication Services

Pokud je zapnuté obousměrné streamování pomocí EnableBidirectional příznaku MediaStreamingOptions, můžete streamovat zvuková data zpět do služby Azure Communication Services, která přehrává zvuk do hovoru.

Jakmile Služba Azure Communication Services začne streamovat zvuk na server WebSocket, můžete zvuk předat svým službám AI. Jakmile služba AI zpracuje zvukový obsah, můžete zvuk streamovat zpět do probíhajícího volání ve službě Azure Communication Services.

Příklad ukazuje, jak jiná služba, jako je Azure OpenAI nebo jiné hlasové velké jazykové modely, zpracovává a přenáší zvuková data zpět do volání.

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();
        }
    }
}

Přehrávání zvuku v hovoru můžete řídit také při streamování zpět do azure Communication Services na základě vaší logiky nebo obchodního toku. Když se například zjistí hlasová aktivita a chcete zastavit zvuk zařazený do fronty, můžete přes webSocket odeslat zprávu stop, která zastaví přehrávání zvuku v hovoru.

private void stopAudio(Session session) {
    if (session.isOpen()) {
        try {
            var serializedData = OutStreamingData.getStopAudioForOutbound();
            session.getAsyncRemote().sendText(serializedData);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

Požadavky

  • Podrobnosti o účtu Azure s aktivním předplatným najdete v tématu Vytvoření účtu zdarma.
  • Prostředek Azure Communication Services. Viz Vytvoření prostředku Azure Communication Services.
  • Nová aplikace webové služby vytvořená pomocí sady SDK pro automatizaci volání
  • instalace Node.js LTS
  • Server websocket, který může odesílat a přijímat datové proudy médií.

Nastavení serveru websocket

Služba Azure Communication Services vyžaduje, aby serverová aplikace nastavila server WebSocket pro streamování zvuku v reálném čase. WebSocket je standardizovaný protokol, který poskytuje plně duplexní komunikační kanál přes jedno připojení TCP.

Další informace o webSocketech a jejich používání najdete v dokumentaci.

Příjem a odesílání streamovaných dat zvuku

Existuje několik způsobů, jak začít přijímat zvukový stream, který lze nakonfigurovat pomocí startMediaStreaming příznaku mediaStreamingOptions v nastavení. Můžete také určit požadovanou vzorkovací frekvenci použitou pro příjem nebo odesílání zvukových dat pomocí parametru audioFormat . Aktuálně podporované formáty jsou PCM 24K mono a PCM 16K mono s výchozím pcM 16K mono.

Pokud chcete povolit obousměrné streamování zvuku, do kterého do hovoru odesíláte zvuková data, můžete příznak povolit EnableBidirectional . Další podrobnosti najdete v specifikacích rozhraní API.

Zahájení streamování zvuku do webového serveru při odpovídání na hovor

Povolit automatické streamování zvuku při vytvoření volání nastavením příznaku startMediaStreaming: true.

Toto nastavení zajistí, že se streamování zvuku spustí automaticky, jakmile se hovor připojí.

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);

Když služba Azure Communication Services obdrží adresu URL vašeho serveru WebSocket, vytvoří k němu připojení. Po úspěšném vytvoření připojení se zahájí streamování.

Spuštění streamování zvuku do webového serveru během probíhajícího hovoru

Pokud chcete spustit streamování médií během volání, můžete použít rozhraní API. Uděláte to tak, že nastavíte startMediaStreaming parametr ( false což je výchozí) a později ve volání povolíte streamování médií pomocí počátečního rozhraní API.

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);

Zastavení streamování zvuku

K zastavení příjmu zvukových streamů během volání můžete použít rozhraní API pro zastavení streamování. To vám umožní zastavit streamování zvuku v libovolném bodě hovoru. Existují dva způsoby, jak je možné zastavit streamování zvuku;

  • Aktivace rozhraní API pro zastavení streamování: Pomocí rozhraní API zastavte příjem streamovaných dat zvuku, zatímco volání je stále aktivní.
  • Automatické zastavení při odpojení hovoru: Streamování zvuku se automaticky zastaví, když se hovor odpojí.
const stopMediaStreamingOptions: StopMediaStreamingOptions = {
	operationContext: "stopMediaStreaming"
}
await answerCallResult.callConnection.getCallMedia().stopMediaStreaming(stopMediaStreamingOptions);

Zpracování zvukových streamů na serveru websocket

Tato ukázka ukazuje, jak naslouchat zvukovým streamům pomocí serveru 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  
	}
}

První paket, který obdržíte, obsahuje metadata o datovém proudu, včetně nastavení zvuku, jako je kódování, vzorkovací frekvence a další podrobnosti o konfiguraci.

{
  "kind": "AudioMetadata",
  "audioMetadata": {
    "subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
    "encoding": "PCM",
    "sampleRate": 16000,
    "channels": 1,
    "length": 640
  }
}

Po odeslání paketu metadat služba Azure Communication Services (ACS) začne streamovat zvukové médium na server WebSocket.

{
  "kind": "AudioData",
  "audioData": {
    "timestamp": "2024-11-15T19:16:12.925Z",
    "participantRawID": "8:acs:3d20e1de-0f28-41c5…",
    "data": "5ADwAOMA6AD0A…",
    "silent": false
  }
}

Odesílání streamovaných dat zvuku do Azure Communication Services

Pokud je zapnuté obousměrné streamování pomocí EnableBidirectional příznaku MediaStreamingOptions, můžete streamovat zvuková data zpět do služby Azure Communication Services, která přehrává zvuk do hovoru.

Jakmile Služba Azure Communication Services začne streamovat zvuk na server WebSocket, můžete zvuk předat svým službám AI. Jakmile služba AI zpracuje zvukový obsah, můžete zvuk streamovat zpět do probíhajícího volání ve službě Azure Communication Services.

Příklad ukazuje, jak jiná služba, jako je Azure OpenAI nebo jiné hlasové velké jazykové modely, zpracovává a přenáší zvuková data zpět do volání.

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);
    }
}

Přehrávání zvuku v hovoru můžete řídit také při streamování zpět do azure Communication Services na základě vaší logiky nebo obchodního toku. Když se například zjistí hlasová aktivita a chcete zastavit zvuk zařazený do fronty, můžete přes webSocket odeslat zprávu stop, která zastaví přehrávání zvuku v hovoru.

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);
	}
}

Požadavky

  • Podrobnosti o účtu Azure s aktivním předplatným najdete v tématu Vytvoření účtu zdarma.
  • Prostředek Azure Communication Services. Viz Vytvoření prostředku Azure Communication Services.
  • Nová aplikace webové služby vytvořená pomocí sady SDK pro automatizaci volání
  • Python 3.7+.
  • Server websocket, který může odesílat a přijímat datové proudy médií.

Nastavení serveru websocket

Služba Azure Communication Services vyžaduje, aby serverová aplikace nastavila server WebSocket pro streamování zvuku v reálném čase. WebSocket je standardizovaný protokol, který poskytuje plně duplexní komunikační kanál přes jedno připojení TCP.

Další informace o webSocketech a jejich používání najdete v dokumentaci.

Příjem a odesílání streamovaných dat zvuku

Existuje několik způsobů, jak začít přijímat zvukový stream, který lze nakonfigurovat pomocí startMediaStreaming příznaku mediaStreamingOptions v nastavení. Můžete také určit požadovanou vzorkovací frekvenci použitou pro příjem nebo odesílání zvukových dat pomocí parametru audioFormat . Aktuálně podporované formáty jsou PCM 24K mono a PCM 16K mono s výchozím pcM 16K mono.

Pokud chcete povolit obousměrné streamování zvuku, do kterého do hovoru odesíláte zvuková data, můžete příznak povolit EnableBidirectional . Další podrobnosti najdete v specifikacích rozhraní API.

Zahájení streamování zvuku do webového serveru při odpovídání na hovor

Povolit automatické streamování zvuku při vytvoření volání nastavením příznaku startMediaStreaming: true.

Toto nastavení zajistí, že se streamování zvuku spustí automaticky, jakmile se hovor připojí.

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,
)

Když služba Azure Communication Services obdrží adresu URL vašeho serveru WebSocket, vytvoří k němu připojení. Po úspěšném vytvoření připojení se zahájí streamování.

Spuštění streamování zvuku do webového serveru během probíhajícího hovoru

Pokud chcete spustit streamování médií během volání, můžete použít rozhraní API. Uděláte to tak, že nastavíte startMediaStreaming parametr ( false což je výchozí) a později ve volání povolíte streamování médií pomocí počátečního rozhraní API.

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"
)

Zastavení streamování zvuku

K zastavení příjmu zvukových streamů během volání můžete použít rozhraní API pro zastavení streamování. To vám umožní zastavit streamování zvuku v libovolném bodě hovoru. Existují dva způsoby, jak je možné zastavit streamování zvuku;

  • Aktivace rozhraní API pro zastavení streamování: Pomocí rozhraní API zastavte příjem streamovaných dat zvuku, zatímco volání je stále aktivní.
  • Automatické zastavení při odpojení hovoru: Streamování zvuku se automaticky zastaví, když se hovor odpojí.
call_automation_client.get_call_connection(call_connection_id).stop_media_streaming(operation_context="stopMediaStreamingContext") 

Zpracování zvukových streamů na serveru websocket

Tato ukázka ukazuje, jak naslouchat zvukovým streamům pomocí serveru 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}")

První paket, který obdržíte, obsahuje metadata o datovém proudu, včetně nastavení zvuku, jako je kódování, vzorkovací frekvence a další podrobnosti o konfiguraci.

{
  "kind": "AudioMetadata",
  "audioMetadata": {
    "subscriptionId": "89e8cb59-b991-48b0-b154-1db84f16a077",
    "encoding": "PCM",
    "sampleRate": 16000,
    "channels": 1,
    "length": 640
  }
}

Po odeslání paketu metadat služba Azure Communication Services (ACS) začne streamovat zvukové médium na server WebSocket.

{
  "kind": "AudioData",
  "audioData": {
    "timestamp": "2024-11-15T19:16:12.925Z",
    "participantRawID": "8:acs:3d20e1de-0f28-41c5…",
    "data": "5ADwAOMA6AD0A…",
    "silent": false
  }
}

Odesílání streamovaných dat zvuku do Azure Communication Services

Pokud je zapnuté obousměrné streamování pomocí EnableBidirectional příznaku MediaStreamingOptions, můžete streamovat zvuková data zpět do služby Azure Communication Services, která přehrává zvuk do hovoru.

Jakmile Služba Azure Communication Services začne streamovat zvuk na server WebSocket, můžete zvuk předat svým službám AI. Jakmile služba AI zpracuje zvukový obsah, můžete zvuk streamovat zpět do probíhajícího volání ve službě Azure Communication Services.

Příklad ukazuje, jak jiná služba, jako je Azure OpenAI nebo jiné hlasové velké jazykové modely, zpracovává a přenáší zvuková data zpět do volání.

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)

Přehrávání zvuku v hovoru můžete řídit také při streamování zpět do azure Communication Services na základě vaší logiky nebo obchodního toku. Když se například zjistí hlasová aktivita a chcete zastavit zvuk zařazený do fronty, můžete přes webSocket odeslat zprávu stop, která zastaví přehrávání zvuku v hovoru.

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)

Vyčištění prostředků

Pokud chcete vyčistit a odebrat předplatné služby Communication Services, můžete odstranit prostředek nebo skupinu prostředků. Odstraněním skupiny prostředků se odstraní také všechny ostatní prostředky, které jsou k ní přidružené. Přečtěte si další informace o čištění prostředků.

Další kroky

  • Přečtěte si další informace o streamování zvuku.
  • Přečtěte si další informace o automatizaci volání a jejích funkcích.
  • Přečtěte si další informace o akci Přehrát.
  • Přečtěte si další informace o akci Rozpoznávání.