Обзор проблемы:
ОС: Ubuntuкопирование голец в QByteArray с потоком данных содержит некоторые дополнительные байты
Я использую Qt утилита для получения видеоданных от удаленной машины (удаленной машине с помощью GStreamer для отправки живые данные) и записать данные в порт, например, 5000.
Порт 5000 уже привязан к другой утилите gstreamer. эта утилита прослушивает порт 5000 и преобразует данные в потоковое видео. Очевидно, что вещи не совсем работают, и я не могу просмотреть видео. Поэтому у меня есть два вопроса:
1) С утилитой Qt, законно ли писать на порт 5000, хотя порт связывается с утилитой gstreamer.
2) Я использую стороннюю библиотеку и ее api для получения данных из внешнего источника. Данные хранятся в массиве символов. Если я преобразую это в qbytearray, то qbytearray имеет тот же размер, что и char buffer. пример
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?
благодаря спариванию. это был копия паста ошибка. Я изменил его. – samprat
ok, обновил мой ответ – kewl