Задать вопрос
@Dobroe3lo

Как отправить аудиофайл по POST HTTP с помощью PulseAudio?

Доброе утро.

Не получается отправить аудиофайл на устройство.
Имеется следующий код, который отправляет через POST http на устройство api синтаксис запроса (включает воспроизведение на устройстве), далее стримит аудиофайл. Используется lpulse - pa_simple_new ().

При запуске собранного файла:
http отправляется, устройство отрабатывает, но аудио не проигрывается
при отправке в терминале вылетает следующая ошибка
Connect to: 192.168.13.122
cgiplay_AudioOut_HTTP.cpp: pa_simple_new() failed: No such file or directory
Segmentation fault (core dumped)


Часть кода:
int main(int argc, char*argv[]) {
  
char *servermessage;	
const char *header = "POST /cgi-bin/transmitaudio_cgi?user=admin&pwd=Admin123 HTTP/1.1\r\nConnection: Keep-Alive\r\nContent-Type: G.711U;boundary=audio\r\n\r\n";
const char *audio = "--audio";
fd = socket_connect("192.168.2.38", atoi("80"));

write(fd, header, strlen(header));

/* The Sample format to use */
static const pa_sample_spec ss = {
    .format = PA_SAMPLE_ULAW,
    .rate = 8000,
    .channels = 1
};

pa_simple *s_in, *s_out = NULL;
int ret = 1;
int error;


/* Create a new playback stream */
if (!(s_out = pa_simple_new(NULL, argv[0], PA_STREAM_PLAYBACK, NULL, "123", &ss, NULL, NULL, &error))) {
    fprintf(stderr, __FILE__": pa_simple_new() failed: %s\n", strerror(errno));
    goto finish;
}

for (;;) {
    uint8_t buf[BUFSIZE];
    ssize_t r;

    if (pa_simple_read(s_in, buf, sizeof(buf), &error) < 0) {

        fprintf(stderr, __FILE__": read() failed: %s\n", strerror(errno));
        goto finish;
    }

    if(write(fd, buf, BUFSIZE) != BUFSIZE)
            printf("\nErr\n");
    if(write(fd, audio, 7) != 7)
            printf("\nErr\n");*/
    
    if (pa_simple_write(s_out, buf, sizeof(buf), &error) < 0) {
        fprintf(stderr, __FILE__": pa_simple_write() failed: %s\n", strerror(errno));
        goto finish;
    }
}


НЕ пойму где в коде указать аудиофайл, который нужно стримить.
Щас, где pa_simple_new "123" - имя аудиофайла, но я так понимаю не верно.

Пользовался Pulse
  • Вопрос задан
  • 271 просмотр
Подписаться 1 Средний 6 комментариев
Пригласить эксперта
Ответы на вопрос 1
@res2001
Developer, ex-admin
На сколько я знаю pulseaudio сама не умеет читать звуковые файлы.
Она может только писать в (play) или читать из (record) звукового устройства аудио данные.
Из аудио файла данные нужно читать другими средствами. Например можно использовать libsndfile. Прочитанные данные уже можно подавать для воспроизведения в pulseaudio.
Как-то так.

Я сам еще не успел плотно познакомиться с pulseaudio, но скоро предстоит этим заняться, так что я пока изучаю тему. libsndfile - достаточно простая библиотека, поддерживает несколько широко распространенных форматов аудио файлов (mp3 - не поддерживает по лицензионным соображениям).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы