Я использую LibVLC для потоковой передачи аудиофайла в память, чтобы его можно было отправлять по частям через сокет UDP.
Я следил за руководством здесь: https://wiki.videolan.org/Stream_to_memory_%28smem%29_tutorial/
Вот мой код:
void handleStream(void* p_audio_data, uint8_t* p_pcm_buffer, unsigned int channels,
unsigned int rate, unsigned int nb_samples, unsigned int bits_per_sample, size_t size, int64_t pts)
{
char *buffer;
int dataSize = size;
int messageSize;
int dataSent = 0;
//cout << p_pcm_buffer << endl;
// While we have data to write
while (dataSize > 0)
{
// Set the size of the next message to send
if (dataSize > MESSAGE_SIZE)
{
messageSize = MESSAGE_SIZE;
}
else
{
messageSize = dataSize;
}
// Write the data to the socket
buffer = new char[dataSize];
memcpy(buffer, p_pcm_buffer + dataSent, messageSize);
sendto(multicastSocket, buffer, MESSAGE_SIZE, 0, (struct sockaddr *) &multicastDestInfo, sizeof(multicastDestInfo));
dataSize -= messageSize;
dataSent += messageSize;
delete[] buffer;
}
// Free the temporary stream buffer
free(p_pcm_buffer);
}
Проблема, с которой я столкнулся, заключается в том, что мне нужно указать в обратном вызове handleStream, в какой сокет отправлять данные. Учебник LibVLC подразумевает, что я могу указать объект, переданный через
void* p_audio_data
Но я не могу найти никаких ресурсов о том, как его установить.
Будем очень благодарны любой помощи!