共用方式為


快速入門:伺服器端音訊串流

重要

本文所述的功能目前處於公開預覽狀態。 此預覽版本沒有服務等級協定,不建議用於處理生產工作負載。 可能不支援特定功能,或可能已經限制功能。 如需詳細資訊,請參閱 Microsoft Azure 預覽版增補使用條款

透過 Azure 通訊服務音訊串流 API 開始使用音訊串流。 本快速入門假設您已熟悉通話自動化 API 可建置自動化通話路由解決方案。

本快速入門中所述的功能目前為公開預覽版。

必要條件

設定 WebSocket 伺服器

Azure 通訊服務需要您的伺服器應用程式設定 WebSocket 伺服器,以即時串流音訊。 WebSocket 是一種標準化通訊協定,可透過單一 TCP 連線提供全雙工通訊通道。

您可以在這裡檢閱檔,以深入瞭解 WebSocket 及其使用方式。

接收和傳送音訊串流數據

有多種方式可以開始接收音訊串流,您可以使用 startMediaStreaming 安裝程式中的旗標進行 mediaStreamingOptions 設定。 您也可以使用 audioFormat 參數指定接收或傳送音訊資料所需的取樣率。 目前支援的格式為 PCM 24K mono 和 PCM 16K mono,預設值為 PCM 16K mono。

若要啟用雙向音訊串流,您要在其中將音訊數據傳送至通話,您可以啟用 EnableBidirectional 旗標。 如需詳細資訊,請參閱 API 規格

在接聽電話時開始將音訊串流處理至您的 Web 伺服器

藉由設定 旗標 startMediaStreaming: true來建立呼叫時,啟用自動音訊串流。

此設定可確保在通話連線後,音訊串流就會自動啟動。

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

Azure 通訊服務 收到 WebSocket 伺服器的 URL 時,它會建立其連線。 成功建立連線之後,就會起始串流。

在通話進行時,開始將音訊串流處理至您的 Web 伺服器

若要在呼叫期間啟動媒體串流,您可以使用 API。 若要這樣做,請將 參數設定 startMediaStreamingfalse (這是預設值),稍後在呼叫中,您可以使用啟動 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();

停止音訊串流

若要在呼叫期間停止接收音訊串流,您可以使用 停止串流 API。 這可讓您在通話的任何時間點停止音訊串流。 有兩種方式可以停止音訊串流;

  • 觸發停止串流 API: 使用 API 在呼叫仍在作用中時停止接收音訊串流數據。
  • 通話中斷連線時自動停止: 當通話中斷時,音訊串流會自動停止。
StopMediaStreamingOptions options = new StopMediaStreamingOptions() {
  OperationContext = "stopMediaStreamingContext"
};

await callMedia.StopMediaStreamingAsync();

處理 Websocket 伺服器中的音訊串流

此範例示範如何使用 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
      }
    }
  }
}

您收到的第一個封包包含有關數據流的元數據,包括編碼、取樣率和其他組態詳細數據等音訊設定。

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

傳送元數據封包之後,Azure 通訊服務 (ACS) 會開始將音訊媒體串流至您的 WebSocket 伺服器。

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

將音訊串流數據傳送至 Azure 通訊服務

如果使用 中的 MediaStreamingOptions旗標啟用EnableBidirectional雙向串流,您可以將音訊數據串流回 Azure 通訊服務,以將音訊播放至通話。

Azure 通訊服務 開始將音訊串流至 WebSocket 伺服器之後,您可以將音訊轉送至 AI 服務。 AI 服務處理音訊內容之後,您可以將音訊串流回 Azure 通訊服務 進行中的通話。

此範例示範另一個服務,例如 Azure OpenAI 或其他語音型大型語言模型,如何處理音訊數據,並將音訊數據傳回通話。

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

您也可以根據邏輯或商務流程,在串流回 Azure 通訊服務 時,控制通話中的音訊播放。 例如,偵測到語音活動並想要停止已排入佇列的音訊時,您可以透過 WebSocket 傳送停止訊息,以阻止音訊在通話中播放。

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

必要條件

設定 WebSocket 伺服器

Azure 通訊服務需要您的伺服器應用程式設定 WebSocket 伺服器,以即時串流音訊。 WebSocket 是一種標準化通訊協定,可透過單一 TCP 連線提供全雙工通訊通道。

您可以在這裡檢閱檔,以深入瞭解 WebSocket 及其使用方式。

接收和傳送音訊串流數據

有多種方式可以開始接收音訊串流,您可以使用 startMediaStreaming 安裝程式中的旗標進行 mediaStreamingOptions 設定。 您也可以使用 audioFormat 參數指定接收或傳送音訊資料所需的取樣率。 目前支援的格式為 PCM 24K mono 和 PCM 16K mono,預設值為 PCM 16K mono。

若要啟用雙向音訊串流,您要在其中將音訊數據傳送至通話,您可以啟用 EnableBidirectional 旗標。 如需詳細資訊,請參閱 API 規格

在接聽電話時開始將音訊串流處理至您的 Web 伺服器

藉由設定 旗標 startMediaStreaming: true來建立呼叫時,啟用自動音訊串流。

此設定可確保在通話連線後,音訊串流就會自動啟動。

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

Azure 通訊服務 收到 WebSocket 伺服器的 URL 時,它會建立其連線。 成功建立連線之後,就會起始串流。

在通話進行時,開始將音訊串流處理至您的 Web 伺服器

若要在呼叫期間啟動媒體串流,您可以使用 API。 若要這樣做,請將 參數設定 startMediaStreamingfalse (這是預設值),稍後在呼叫中,您可以使用啟動 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);     

停止音訊串流

若要在呼叫期間停止接收音訊串流,您可以使用 停止串流 API。 這可讓您在通話的任何時間點停止音訊串流。 有兩種方式可以停止音訊串流;

  • 觸發停止串流 API: 使用 API 在呼叫仍在作用中時停止接收音訊串流數據。
  • 通話中斷連線時自動停止: 當通話中斷時,音訊串流會自動停止。
StopMediaStreamingOptions stopMediaStreamingOptions = new StopMediaStreamingOptions()
    .setOperationContext("stopMediaStreamingContext");
callConnection.getCallMedia().stopMediaStreamingWithResponse(stopMediaStreamingOptions, Context.NONE);

處理 Websocket 伺服器中的音訊串流

此範例示範如何使用 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());
  }
}

您收到的第一個封包包含有關數據流的元數據,包括編碼、取樣率和其他組態詳細數據等音訊設定。

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

傳送元數據封包之後,Azure 通訊服務 (ACS) 會開始將音訊媒體串流至您的 WebSocket 伺服器。

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

將音訊串流數據傳送至 Azure 通訊服務

如果使用 中的 MediaStreamingOptions旗標啟用EnableBidirectional雙向串流,您可以將音訊數據串流回 Azure 通訊服務,以將音訊播放至呼叫。

Azure 通訊服務 開始將音訊串流處理至 WebSocket 伺服器之後,您可以將音訊轉送至您的 AI 服務。 AI 服務處理音訊內容之後,您可以將音訊串流回進行中的呼叫,Azure 通訊服務。

此範例示範另一個服務,例如 Azure OpenAI 或其他語音型大型語言模型,如何處理音訊數據,並將音訊數據傳回通話。

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

您也可以根據邏輯或商務流程,在串流回 Azure 通訊服務 時,控制通話中的音訊播放。 例如,偵測到語音活動並想要停止已排入佇列的音訊時,您可以透過 WebSocket 傳送停止訊息,以阻止音訊在通話中播放。

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

必要條件

設定 WebSocket 伺服器

Azure 通訊服務需要您的伺服器應用程式設定 WebSocket 伺服器,以即時串流音訊。 WebSocket 是一種標準化通訊協定,可透過單一 TCP 連線提供全雙工通訊通道。

您可以在這裡檢閱檔,以深入瞭解 WebSocket 及其使用方式。

接收和傳送音訊串流數據

有多種方式可以開始接收音訊串流,您可以使用 startMediaStreaming 安裝程式中的旗標進行 mediaStreamingOptions 設定。 您也可以使用 audioFormat 參數指定接收或傳送音訊資料所需的取樣率。 目前支援的格式為 PCM 24K mono 和 PCM 16K mono,預設值為 PCM 16K mono。

若要啟用雙向音訊串流,您要在其中將音訊數據傳送至通話,您可以啟用 EnableBidirectional 旗標。 如需詳細資訊,請參閱 API 規格

在接聽電話時開始將音訊串流處理至您的 Web 伺服器

藉由設定 旗標 startMediaStreaming: true來建立呼叫時,啟用自動音訊串流。

此設定可確保在通話連線後,音訊串流就會自動啟動。

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

Azure 通訊服務 收到 WebSocket 伺服器的 URL 時,它會建立與其連線。 成功建立連線之後,就會起始串流。

在通話進行時,開始將音訊串流處理至您的 Web 伺服器

若要在呼叫期間啟動媒體串流,您可以使用 API。 若要這樣做,請將 參數設定 startMediaStreamingfalse (這是預設值),稍後在呼叫中,您可以使用啟動 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);

停止音訊串流

若要在呼叫期間停止接收音訊串流,您可以使用 停止串流 API。 這可讓您在通話的任何時間點停止音訊串流。 有兩種方式可以停止音訊串流;

  • 觸發停止串流 API: 使用 API 在呼叫仍在作用中時停止接收音訊串流數據。
  • 通話中斷連線時自動停止: 當通話中斷時,音訊串流會自動停止。
const stopMediaStreamingOptions: StopMediaStreamingOptions = {
	operationContext: "stopMediaStreaming"
}
await answerCallResult.callConnection.getCallMedia().stopMediaStreaming(stopMediaStreamingOptions);

處理 Websocket 伺服器中的音訊串流

此範例示範如何使用 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  
	}
}

您收到的第一個封包包含有關數據流的元數據,包括編碼、取樣率和其他組態詳細數據等音訊設定。

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

傳送元數據封包之後,Azure 通訊服務 (ACS) 會開始將音訊媒體串流至您的 WebSocket 伺服器。

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

將音訊串流數據傳送至 Azure 通訊服務

如果使用 中的 MediaStreamingOptions旗標啟用EnableBidirectional雙向串流,您可以將音訊數據串流回 Azure 通訊服務,以將音訊播放至呼叫中。

Azure 通訊服務 開始將音訊串流至 WebSocket 伺服器之後,您可以將音訊轉送至您的 AI 服務。 AI 服務處理音訊內容之後,您可以將音訊串流回 Azure 通訊服務 進行中的通話。

此範例示範另一個服務,例如 Azure OpenAI 或其他語音型大型語言模型,如何處理音訊數據,並將音訊數據傳回通話。

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

您也可以根據邏輯或商務流程,在串流回 Azure 通訊服務 時,控制通話中的音訊播放。 例如,偵測到語音活動並想要停止已排入佇列的音訊時,您可以透過 WebSocket 傳送停止訊息,以阻止音訊在通話中播放。

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

必要條件

設定 WebSocket 伺服器

Azure 通訊服務需要您的伺服器應用程式設定 WebSocket 伺服器,以即時串流音訊。 WebSocket 是一種標準化通訊協定,可透過單一 TCP 連線提供全雙工通訊通道。

您可以在這裡檢閱檔,以深入瞭解 WebSocket 及其使用方式。

接收和傳送音訊串流數據

有多種方式可以開始接收音訊串流,您可以使用 startMediaStreaming 安裝程式中的旗標進行 mediaStreamingOptions 設定。 您也可以使用 audioFormat 參數指定接收或傳送音訊資料所需的取樣率。 目前支援的格式為 PCM 24K mono 和 PCM 16K mono,預設值為 PCM 16K mono。

若要啟用雙向音訊串流,您要在其中將音訊數據傳送至通話,您可以啟用 EnableBidirectional 旗標。 如需詳細資訊,請參閱 API 規格

在接聽電話時開始將音訊串流處理至您的 Web 伺服器

藉由設定 旗標 startMediaStreaming: true來建立呼叫時,啟用自動音訊串流。

此設定可確保在通話連線後,音訊串流就會自動啟動。

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

當 Azure 通訊服務 收到 WebSocket 伺服器的 URL 時,它會建立其連線。 成功建立連線之後,就會起始串流。

在通話進行時,開始將音訊串流處理至您的 Web 伺服器

若要在呼叫期間啟動媒體串流,您可以使用 API。 若要這樣做,請將 參數設定 startMediaStreamingfalse (這是預設值),稍後在呼叫中,您可以使用啟動 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"
)

停止音訊串流

若要在呼叫期間停止接收音訊串流,您可以使用 停止串流 API。 這可讓您在通話的任何時間點停止音訊串流。 有兩種方式可以停止音訊串流;

  • 觸發停止串流 API: 使用 API 在呼叫仍在作用中時停止接收音訊串流數據。
  • 通話中斷連線時自動停止: 當通話中斷時,音訊串流會自動停止。
call_automation_client.get_call_connection(call_connection_id).stop_media_streaming(operation_context="stopMediaStreamingContext") 

處理 Websocket 伺服器中的音訊串流

此範例示範如何使用 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}")

您收到的第一個封包包含有關數據流的元數據,包括編碼、取樣率和其他組態詳細數據等音訊設定。

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

傳送元數據封包之後,Azure 通訊服務 (ACS) 會開始將音訊媒體串流至您的 WebSocket 伺服器。

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

將音訊串流數據傳送至 Azure 通訊服務

如果使用 中的 MediaStreamingOptions旗標啟用EnableBidirectional雙向串流,您可以將音訊數據串流回 Azure 通訊服務,以將音訊播放至呼叫中。

Azure 通訊服務 開始將音訊串流處理至 WebSocket 伺服器之後,您可以將音訊轉送至您的 AI 服務。 AI 服務處理音訊內容之後,您可以將音訊串流回 Azure 通訊服務 進行中的通話。

此範例示範另一個服務,例如 Azure OpenAI 或其他語音型大型語言模型,如何處理音訊數據,並將音訊數據傳回通話。

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)

您也可以根據邏輯或商務流程,在串流回 Azure 通訊服務 時,控制通話中的音訊播放。 例如,偵測到語音活動並想要停止已排入佇列的音訊時,您可以透過 WebSocket 傳送停止訊息,以阻止音訊在通話中播放。

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)

清除資源

如果您想要清除並移除通訊服務訂用帳戶,您可以刪除資源或資源群組。 刪除資源群組也會刪除與其相關聯的任何其他資源。 深入了解如何清除資源

下一步