He Realtime WebRTC API encountered an abnormal situation today

The Realtime WebRTC API encountered an abnormal situation today. After connecting, two session times are received, and the connection disconnects a few seconds after sending audio.

2025/01/23 16:10:03 [assistant:Connect] OnConnectionStateChange connecting
2025/01/23 16:10:03 [assistant:Connect] OnICEConnectionStateChange: connected
2025/01/23 16:10:04 [assistant:Connect] OnConnectionStateChange connected
2025/01/23 16:10:04 [assistant:Connect] OnTrack%!(EXTRA webrtc.RTPCodecType=audio)
2025/01/23 16:10:04 [channel:HandleTrack] Audio MIME: audio/opus

2025/01/23 16:10:04 [assistant:Connect] OnDataChannel OnOpen
2025/01/23 16:10:04 [assistant:Connect] OnDataChannel OnMessage {"type":"session.created","event_id":"event_.....","session":{"id":"sess_AsmZlWrdcigkyOqG73I3U","object":"realtime.session","model":"gpt-4o-realtime-preview-2024-12-17","expires_at":1737621602,"modalities":["text","audio"],"instructions":"You are an AI assistant integrated into a robotic system. In addition to daily conversations, you are also capable of controlling the robot. Please communicate in a familiar standard accent or dialect that the user is comfortable with, and during interactions, you should behave more like a human.","voice":"alloy","custom_voice_id":null,"turn_detection":{"type":"server_vad","threshold":0.5,"prefix_padding_ms":300,"silence_duration_ms":500,"create_response":true},"input_audio_format":"pcm16","output_audio_format":"pcm16","input_audio_transcription":{"model":"whisper-1","language":null,"prompt":null},"tool_choice":"auto","temperature":0.7,"max_response_output_tokens":"inf","client_secret":null,"tools":[]}}
2025/01/23 16:10:04 [assistant:Connect] OnDataChannel OnMessage {"type":"session.updated","event_id":"event_AsmZ.....","session":{"id":"sess_AsmZlWrd.....","object":"realtime.session","model":"gpt-4o-realtime-preview-2024-12-17","expires_at":1737621602,"modalities":["text","audio"],"instructions":"You are an AI assistant integrated into a robotic system. In addition to daily conversations, you are also capable of controlling the robot. Please communicate in a familiar standard accent or dialect that the user is comfortable with, and during interactions, you should behave more like a human.","voice":"alloy","custom_voice_id":null,"turn_detection":{"type":"server_vad","threshold":0.5,"prefix_padding_ms":300,"silence_duration_ms":500,"create_response":true},"input_audio_format":"pcm16","output_audio_format":"pcm16","input_audio_transcription":{"model":"whisper-1","language":null,"prompt":null},"tool_choice":"auto","temperature":0.7,"max_response_output_tokens":"inf","client_secret":null,"tools":[]}}
2025/01/23 16:17:01 [assistant:Connect] OnDataChannel OnClose
2025/01/23 16:17:01 [assistant:Connect] OnDataChannel OnError [0x40005f2000] abort chunk, with following errors: (User Initiated Abort: )
2025/01/23 16:17:01 [assistant:Connect] OnICEConnectionStateChange: closed
2025/01/23 16:17:01 [assistant:Connect] OnConnectionStateChange closed

The following program was working fine yesterday, but today it has completely failed.

func (a *Assistant) UpdateAudio(track *webrtc.TrackRemote) {

	if track.Kind() != webrtc.RTPCodecTypeAudio {
		log.Println(color.Yellow.Sprintf("[assistant:UpdateAudio] Received non-audio track"))
		return
	}

	codec := track.Codec()
	log.Println(color.Gray.Sprintf("[assistant:UpdateAudio] Audio MIME: %s\n", codec.MimeType))

	if a.Channel.LocalAudio != nil && a.Status {

		log.Println(color.Gray.Sprintf("[assistant:UpdateAudio] Started audio"))

		for {
			rtp, _, err := track.ReadRTP()
			if err != nil {
				log.Println(color.Red.Sprintf("[assistant:UpdateAudio] Failed to read RTP: %v", err))
				return
			}

			err = a.Channel.LocalAudio.WriteRTP(rtp)
			if err != nil {
				log.Println(color.Red.Sprintf("[assistant:UpdateAudio] Failed to write sample: %v", err))
			}
		}
	}
}