У меня есть сервер C, который использует libwebsockets, и я хочу сохранить полученный аудиопоток в файле на диске.Сохранить аудиопоток в файле с помощью C libwebsockets
Вот мой фрагмент кода:
#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);
}
}
}
}
Я получил сообщение «клиент подключен», а также файл, но содержание не в порядке, я не могу играть. Я думаю, что есть проблема с тем, как я могу сохранить поток в файле, используя fwrite()
.
Клиент отправляет звуковые фрагменты, закодированные как wav, 16Khz, mono. Вот фрагмент от клиента (это клиент javascript, полный код находится здесь: http://kaljurand.github.io/dictate.js/).
if (recorder) {
recorder.stop();
config.onEvent(MSG_STOP, 'Stopped recording');
// Push the remaining audio to the server
recorder.export16kMono(function(blob) {
socketSend(blob);
socketSend(TAG_END_OF_SENTENCE);
recorder.clear();
}, 'export16kMono');
config.onEndOfSpeech();
} else {
config.onError(ERR_AUDIO, "Recorder undefined");
}
Клиент работает хорошо, я использую его для одной и той же задачи, но с использованием сервера Java. Я был бы признателен, если бы кто-нибудь мог указать мне, как сохранить эти звуковые фрагменты в действительном файле.
Не можете сравнить файл, который вы пытаетесь отправить, с файлом, записанным на диск? Я предполагаю, что вы запускаете эту программу на Linux? – purplepsycho
Я отправляю живое аудио с микрофона. Клиент имеет функцию кодирования фрагментов как raw или wav. Я на Ubuntu. –
Можете ли вы проверить, что ваш wav-файл начинается с чего-то типа 'RIFF', для этого вы можете ввести:' hexdump -C your_file.wav | head' – purplepsycho