3

問題の概要:
OS : Ubuntu

qtユーティリティを使用してリモートマシンからビデオデータを受信し(リモートマシンはgstreamerを使用してライブデータを送信しています)、そのデータをポート5000に書き込みます.

ポート 5000 はすでに別の gstreamer ユーティリティにバインドされています。このユーティリティは、ポート 5000 をリッスンし、データをビデオ ストリーミングに変換します。明らかに物事は正確に機能しておらず、ビデオを見ることができません。だから私は2つの質問があります:

1) Qt ユーティリティでは、ポートが gstreamer ユーティリティにバインドされていますが、ポート 5000 に書き込むことは合法ですか。

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 に転送する必要がありますか?

4

1 に答える 1

1

2 番目の質問への回答: QDataStream::writeRawData() を試してください。

フォーム Qt ドキュメント:

QDataStream & QDataStream::writeBytes(const char * s, uint len)
Writes the length specifier len and the buffer s to the stream and returns a reference to the stream.
The len is serialized as a quint32, followed by len bytes from s. Note that the data is not encoded.
于 2015-12-10T16:12:36.480 に答える