问题概述:
操作系统:Ubuntu
我正在使用 qt 实用程序从远程机器接收视频数据(远程机器正在使用 gstreamer 发送实时数据)并将该数据写入端口 5000。
端口 5000 已绑定到另一个 gstreamer 实用程序。此实用程序侦听端口 5000 并将数据转换为视频流。显然事情并不完全正常,我无法观看视频。所以我有两个问题:
1)使用 Qt 实用程序,尽管端口绑定到 gstreamer 实用程序,但写入端口 5000 是否合法。
2)我正在使用 3rd 方库及其 api 从外部源接收数据。数据存储在字符数组中。如果我将其转换为 qbytearray 则 qbytearray 具有与 char 缓冲区相同的大小。例子
rc = zco_receive_source(sdr, &reader, bytesToRead, buffer); // this is 3rd part function
qDebug() << " copy buffer size =" << rc; // genrally this size is 1412
QByteArray msgRecvd;
msgRecvd = QByteArray(reinterpret_cast<char*>(buffer), rc);
if(! msgRecvd.isEmpty() )
{
qDebug() << " size of msgRecv =" << msgRecvd.size();// again 1412
udpSock->writeDatagram( msgRecvd, QHostAddress::LocalHost, 5000 );
}
但是如果我使用 QDataStream ,那么 QbyteArray 会得到 4 个额外的字节。代码如下所示
rc = zco_receive_source(sdr, &reader, bytesToRead, buffer); // this is 3rd part function
qDebug() << " copy buffer size =" << rc; // genrally this size is 1412
QByteArray msgRecvd;
QDataStream dataStream( &msgRecvd, QIODevice::WriteOnly );
dataStream.writeBytes( ( const char* )buffer, rc );
if(! msgRecvd.isEmpty() )
{
qDebug() << " size of msgRecv =" << msgRecvd.size();// got 4 extra bytes .. size is 1415. why ???
udpSock->writeDatagram( msgRecvd, QHostAddress::LocalHost, 5000 );
}
我想知道为什么 QbyteArray 有额外的字符,我是否需要序列化数据以将其转发到端口 5000?