Ich habe einen C-Server, der libwebsockets verwendet, und ich möchte einen empfangenen Audiostream in einer Datei auf der Festplatte speichern.Speichern Sie Audio-Stream in Datei mit C libwebsockets
Hier ist mein Code-Schnipsel:
#define FILENAME "/home/ubuntu/Desktop/file.wav"
FILE *received_file;
struct lws_context *Audiocontext;
static int callback_audio(
struct lws *wsi,
enum lws_callback_reasons reason,
void *user, void *in, size_t len)
{
switch (reason) {
case LWS_CALLBACK_ESTABLISHED:
{
printf("client is connected\n");
received_file = fopen(FILENAME, "w+");
if (received_file == NULL)
{
printf("Failed to open file\n");
exit(EXIT_FAILURE);
}
}
break;
case LWS_CALLBACK_RECEIVE: {
if(strcmp((char*)in,"EOS")==0)
{
printf("End of stream!\n");
fclose(received_file);
}
else
{
fwrite(in, 1, len, received_file);
}
}
}
}
Ich habe die Nachricht „Client verbunden ist“ und auch die Datei, aber der Inhalt ist nicht in Ordnung, ich kann es nicht spielen. Ich denke, es gibt ein Problem in Bezug auf die Art, wie ich den Stream in der Datei unter Verwendung fwrite()
speichern.
Der Client sendet Audio-Chunks, die als WAV, 16Khz, Mono codiert sind. Hier ist ein Ausschnitt vom Client (es ist ein Javascript-Client, der vollständige Code ist hier: http://kaljurand.github.io/dictate.js/).
Der Client funktioniert gut, ich benutze es für genau die gleiche Aufgabe, aber mit einem Java-Server. Ich würde mich freuen, wenn mir jemand zeigen könnte, wie man diese Audio-Chunks in einer gültigen Datei speichert.
Können Sie die Datei vergleichen, die Sie versuchen, mit der auf der Festplatte geschriebenen Datei zu senden? Ich nehme an, dass Sie dieses Programm auf Linux ausführen? – purplepsycho
Ich sende Live-Audio vom Mikrofon. Der Client hat eine Funktion zum Codieren von Stücken als Roh- oder WAV. Ich bin auf Ubuntu. –
Können Sie überprüfen, ob Ihre WAV-Datei mit etwas wie 'RIFF' beginnt? Um dies zu tun, können Sie Folgendes eingeben:' hexdump -C your_file.wav | Kopf " – purplepsycho