gpt4 book ai didi

c++ - LibVLC 流式传输到内存 p_audio_data

转载 作者:太空宇宙 更新时间:2023-11-04 13:36:23 34 4
gpt4 key购买 nike

我一直在使用 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

但我找不到任何关于如何实际设置它的资源。

如有任何帮助,我们将不胜感激!

最佳答案

您可以为需要发送的参数定义结构或类。

struct Myparam{
//your socket param
struct SocketStruct socket;
//other params
}
..
Myparam* pUserData = new Myparam();
param->socket = multicastSocket;

..

sprintf(smem_options
, "#transcode{vcodec=h264}:smem{"
"video-prerender-callback=%lld,"
"video-postrender-callback=%lld,"
"video-data=%lld,"
"no-time-sync},"
, (long long int)(intptr_t)(void*)&cbVideoPrerender
, (long long int)(intptr_t)(void*)&cbVideoPostrender
, (long long int)(intptr_t)(void*)pUserData
);

关于c++ - LibVLC 流式传输到内存 p_audio_data,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29422710/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com