Обзор проблемы:
ОС: Ubuntu
Я использую утилиту qt для получения видеоданных с удаленного компьютера (удаленный компьютер использует gstreamer для отправки данных в реальном времени) и записываю эти данные в порт, скажем, 5000.
Порт 5000 уже привязан к другой утилите gstreamer. эта утилита прослушивает порт 5000 и преобразует данные в потоковое видео. Очевидно, что что-то не работает, и я не могу просматривать видео. Итак, у меня есть два вопроса:
1) С помощью утилиты Qt разрешено ли писать в порт 5000, хотя порт привязан к утилите gstreamer.
2) Я использую стороннюю библиотеку и ее 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?