gpt4 book ai didi

Qt 通过 TCP 套接字实时流式传输音频

转载 作者:行者123 更新时间:2023-12-04 13:55:52 25 4
gpt4 key购买 nike

我想弄清楚如何通过 Qt 中的 TCP 套接字实时流式传输音频。我使用的是 QAudioInput在客户端和 QAudioOutput在服务器上。两者都使用以下格式:

QAudioFormat format;
format.setChannelCount(1);
format.setSampleRate(8000);
format.setSampleSize(8);
format.setCodec("audio/pcm");
format.setByteOrder(QAudioFormat::LittleEndian);
format.setSampleType(QAudioFormat::UnSignedInt);

我已经有一个简单的套接字服务器设置,并设法使用以下方法将音频从客户端流式传输到服务器:
//client
QAudioInput *audio = new QAudioInput(format, this);
audio->setBufferSize(1024);
audio->start(socket);


//server
QAudioOutput *audio = new QAudioOutput(format, this);
audio->setBufferSize(1024);

然后在服务器上我接收数据并将其附加到 QByteArray
在服务器上,我创建了一个 QBuffer并给它 QByteArray一旦客户端关闭,然后像这样播放:
QByteArray *data = new QByteArray();

while(1)
{
if(socket->waitForReadyRead(30000))
data->append(socket->readAll());
else
break;
}

QBuffer *buffer = new QBuffer(data);
QEventLoop *loop = new QEventLoop(this);
buffer->open(QIODevice::ReadOnly);
audio->start(buffer);

loop->exec();

这将在客户端关闭后播放整个流。我正在寻找的是修改服务器以实时播放,但我不知道如何。我已经接近实时,但数据包之间有很大的咔嗒声,并且延迟了几秒钟。

我试过像以前发送它一样播放流:
audio->start(socket);

但这没有任何作用。也许如果我使用 QDataStream而不是直接使用套接字?

最佳答案

为了解决这个问题,我简单地增加了 setBufferSize从您的 1024 到更高的值,例如我使用了 8192,这样您就有机会让设备一次读取更多数据,并且我能够通过无线网络流式传输音频。

我的类设计和你的有点不同,我有不同的sockets和audio类,你可以看到here .

关于Qt 通过 TCP 套接字实时流式传输音频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25498510/

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