Dav*_*wig 7 sockets audio qt stream
我试图弄清楚如何通过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);
Run Code Online (Sandbox Code Playgroud)
我已经有一个简单的套接字服务器设置,并设法使用以下方法将音频从客户端流式传输到服务器:
//client
QAudioInput *audio = new QAudioInput(format, this);
audio->setBufferSize(1024);
audio->start(socket);
//server
QAudioOutput *audio = new QAudioOutput(format, this);
audio->setBufferSize(1024);
Run Code Online (Sandbox Code Playgroud)
然后在服务器上我收到数据并将其附加到 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();
Run Code Online (Sandbox Code Playgroud)
这将在客户端关闭后播放整个流.我正在寻找的是修改服务器以实时播放它,但我无法弄清楚如何.我已经接近实时但它在数据包之间有很大的点击,并且延迟了几秒钟.
我试过像我以前发送它一样播放流:
audio->start(socket);
Run Code Online (Sandbox Code Playgroud)
但这没有做任何事情.也许如果我使用QDataStream
而不是直接使用套接字?