Я декодирую данные ogg opus, которые транслируются в прямом эфире с сервера icecast. Я использую libopus для декодирования. Данные иногда декодируются, но в большинстве случаев op_decode () возвращает -4, что указывает на поврежденный поток. Это функция обратного вызова, используемая для доступа к данным с использованием библиотеки curl.
#define SAMPLE_RATE 48000
#define CHANNELS 2
#define MAX_FRAME_SIZE 6*960
size_t play_stream(void *buffer, size_t size, size_t nmemb, void *userp)
{
FILE *fp;
opus_int16 out[MAX_FRAME_SIZE * CHANNELS];
int error;
int i;
unsigned char pcm_bytes[MAX_FRAME_SIZE * CHANNELS * 2];
int frame_size;
frame_size = opus_decode(decoder, (unsigned char*)buffer, (opus_int32)size * nmemb, out, MAX_FRAME_SIZE, 0);
if (frame_size < 0)
{
fprintf(stderr, "decoder failed: %s\n", opus_strerror(frame_size));
}
return size * nmemb;
}
Может кто-нибудь помочь мне?