Laden...
S
stony007_de
myCSharp.de - Member
2
Themen
15
Beiträge
Letzte Aktivität
vor 6 Tagen
Dabei seit
11.04.2016
Erstellt vor 6 Tagen

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!

Erstellt vor 10 Tagen

Ich hab den Support nochmal angeschrieben. Vielleicht bekomme ich vor Dienstag schon eine Antwort.

Erstellt vor 10 Tagen

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.

Erstellt vor 10 Tagen

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.

Erstellt vor 10 Tagen

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..

Erstellt vor 10 Tagen

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

Erstellt vor 11 Tagen

Wenn es einen Fehler geben würde, würde er den Fwhöer melden. Das bekomm ich nicht.

Zeige das morgen mal…

Erstellt vor 11 Tagen

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?

Erstellt vor 11 Tagen

Ich hab Dienstag eine Troubleshooing Termin. Mal schauen was ich da an log rausbekomme.

Erstellt vor 11 Tagen

@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…