So Problem behoben!
Der gegenpart hat den gesendeten Audiostream nicht als WAV erkannt.
Ich habe in den ersten Bytes einfach den WAV Header gesendet und schon läufts..
Danke für eure Unterstützung!
Ich hab den Support nochmal angeschrieben. Vielleicht bekomme ich vor Dienstag schon eine Antwort.
Ich habe nun den erneut modifiziert und erhalt nun nach dem Start des ws.send() folgendes Feedback
Recording...
[16.03.2025 18:05:58|Trace|WebSocket.close|Begin closing the connection.]
[16.03.2025 18:05:58|Debug|WebSocket.closeHandshake|Was clean?: True
sent: True
received: True]
[16.03.2025 18:05:58|Trace|WebSocket.close|End closing the connection.]
Also scheinbar wird wirklich das Audioformat nicht erkannt.
Die Beschreibung der API sagt zur Anforderung:
Ensure that your configuration was accepted before starting to send audio. We recommend sending audio in chunks of 500ms. In terms of buffering, the limit is 64000 bytes per chunk. Audio data should be sent as raw binary without JSON wrapping.
Also mit dem Testsyerver aufbau läuft alles!
Das Wavefile wird gespeichert und auch ein Send vom Server zum Client wird entgegengenommen.
Also sehe ich grundsätzlich den Fehler nicht auf meiner Seite.
Setzte nun auf das Date am Dienstag.
Die 10 Einträge kommen von meiner Anweisung
// Post message with the lenght of the chunk
Log($"Sent {chunk.Length} bytes...");
Mit dem lokalem Server noch nicht. Mach ich dann gleich..
Hi
So jetzt mal ein paar logs.
<<<Loglevel setzten>>>
[16.03.2025 15:26:41|Warn |Logger.set_Output|The current output action has been changed.]
<<<Verbdindung aufbauen>>>
[16.03.2025 15:26:41|Debug|WebSocket.sendHttpRequest|A request to the server:
GET /audio-bridge/v2/interactions/5606e448-636f-4a8e-aac7-b980e37d82d9/streams?tenant-name=copiloteu&token=Bearer%20eyJhbGciOiJSUzI1........RH5tNyqw HTTP/1.1
User-Agent: websocket-sharp/1.0
Host: api.beta-eu.corti.app
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: BVcT/L4TN9/YihqmOaMYtw==
Sec-WebSocket-Version: 13]
[16.03.2025 15:26:41|Debug|WebSocket.sendHttpRequest|A response to this request:
HTTP/1.1 101 Switching Protocols
Connection: Upgrade
Date: Sun, 16 Mar 2025 14:26:41 GMT
Sec-Websocket-Accept: Dwyp2b2mfZp4jbc293ghGSNS68A=
Upgrade: websocket]
WebSocket verbunden!
<<<Senden der Json Config>>>
Send JSON-Konfiguration : {"Type":"config","Configuration":{"Transcription":{"PrimaryLanguage":"de","IsDiarization":false,"IsMultichannel":false,"Participants":[{"Channel":0,"Role":"multiple"}]},"Mode":{"Type":"facts","OutputLocale":"de"}}}
<<<Request im ws.OnMessage empfangen>>>
[CONFIG_ACCEPTED] Konfiguration akzeptiert.
<<<Nach dem start der Aufnahme über Button/StartAudioStreaming Funktion>>>
Recording...
Sent 16000 bytes...
Sent 16000 bytes...
Sent 16000 bytes...
Sent 16000 bytes...
Sent 16000 bytes...
Sent 16000 bytes...
Sent 16000 bytes...
Sent 16000 bytes...
Sent 16000 bytes...
<<<Nach dem Stop der Aufnahme über Button/StopAudioStreaming Funktion>>>
Audioaufnahme gestoppt.
Sent 9050 bytes...
<<<Nach dem Schließen desSockets über Button>>>
[16.03.2025 15:27:00|Fatal|WebSocket.<startReceiving>b__176_2|WebSocketSharp.WebSocketException: The header of a frame cannot be read from the stream.
at WebSocketSharp.WebSocketFrame.processHeader(Byte[] header)
at WebSocketSharp.WebSocketFrame.<>c__DisplayClass73_0.<readHeaderAsync>b__0(Byte[] bytes)
at WebSocketSharp.Ext.<>c__DisplayClass48_0.<ReadBytesAsync>b__0(IAsyncResult ar)]
[16.03.2025 15:27:00|Trace|WebSocket.close|Begin closing the connection.]
[16.03.2025 15:27:00|Debug|WebSocket.closeHandshake|Was clean?: False
sent: False
received: False]
[16.03.2025 15:27:00|Trace|WebSocket.close|End closing the connection.]
WebSocket geschlossen!
Sieht irgendwie so aus, als ob der ws.send(chunk) nichts sendet!
hab dann nochmal umgebaut. Wie @Abt geschrieben hatte den Recorder mit Sender gleich nach dem ws.connect()
private async void StartWebSocket(string webSocketUrl)
{
// define the websocket with binding sting and Token
ws = new WebSocket(webSocketUrl + weSocketUrlBinder + BearerToken);
Log("Socket definiert");
// set the Security to Tls12
ws.SslConfiguration.EnabledSslProtocols = System.Security.Authentication.SslProtocols.Tls12;
Log("Tls12 gesetzt");
// activate extendet Login
ws.Log.Level = LogLevel.Debug; // Debug, Info, Warn, Error, Fatal
ws.Log.Output = (level, message) => Log($"[{level}] {message}\r\n".Replace($" ", $"\r\n").Replace("[" + DateTime.Now.ToString("dd.MM.yyyy"), "[" + DateTime.Now.ToString("dd.MM.yyyy")));
// Action Socket is Opening
ws.OnOpen += (sender, e) =>
{
// post Message
Log("WebSocket verbunden!\r\n");
// send the modified Confing from a Template direct after starting start
SendWebSocketConfig();
};
// Action Socket is running ad received data
ws.OnMessage += (sender, e) =>
{
// process receives data from Socket
if (e.IsText)
{
// fill received into Variabel
dynamic message = e.Data;
// Deserialize into Response Variabele
ConfigResponse message_json = JsonSerializer.Deserialize<ConfigResponse>(message);
//
if (message_json.type == "transcript")
{
Log($"[{message_json.type}] Transkripter Text: " + message.data.ToString());
}
else if (message_json.type == "CONFIG_ACCEPTED")
{
Log($"[{message_json.type}] Konfiguration akzeptiert.");
}
else if (message_json.type == "ENDED")
{
Log($"[{message_json.type}] Sitzung beendet.");
}
}
};
// Action Socket has a error
ws.OnError += (sender, e) =>
{
Log($"WebSocket Fehler: {e.Message}\r\n");
};
// Action Socket is closing
ws.OnClose += (sender, e) =>
{
//Log($"Verbindung geschlossen: {e.Reason}\r\n{e.Code}\r\n");
Log("WebSocket geschlossen!\r\n");
};
// start and connect the Websocket
ws.Connect();
// audio
using (WaveInEvent waveIn = new())
{
waveIn.WaveFormat = new WaveFormat(44100, 16, 1); // Identische Settings
waveIn.BufferMilliseconds = 50;
waveIn.DataAvailable += (s, e) =>
{
ws.Send(e.Buffer);
Log("Daten versandt.");
};
waveIn.StartRecording();
Log("Record läuft. Enter to end.");
//waveIn.StopRecording();
}
}
da passiert gar nix. bringt mir nicht mal die "Daten versandt."
Wenn es einen Fehler geben würde, würde er den Fwhöer melden. Das bekomm ich nicht.
Zeige das morgen mal…
Da wird nichts geloggt. Leider!
Einzig mein Output wieviele Byte versendet wurde schiebt es in meine Textbox.
Besteht eine Möglichkeit dem ws.send() eine log zu entlocken?
Ich hab Dienstag eine Troubleshooing Termin. Mal schauen was ich da an log rausbekomme.
@Abt Die Server Konponente läuft bei einem Dienstleister/Provider an welchen ich den Websocket nutzten möchte. Den Server Code wollte ich nur für interne Tests.
Ich habe lediglich die API Beschreibung https://docs.corti.ai/api-reference/stream#stream-configuration
Jetzt habe ich gerade den Code auf eine Windows10 Maschiene gezogen. Leider keine Verbesserung…
Bis auf das der Code auf der Win10 X64 gegenüber dem Win11 ARM dass das W10 mit TLS13 nicht klar kommt. Dort muss ich TLS12 setzten dennoch kommt von meinem Audio nichts an.
Im Gegensatz meine Config als Json wird entgegengenommen und mit einem „accepted“ quittiert.
Morgen bau ich mal den Testserver auf, vielleicht sieht das ein wenig mehr…