2016-03-08 41 views
0


我一直在寫一個移動流應用程序。 現在我發送問題QVideoFrame。我需要將它轉換爲char *進行發送,所以我用位()的方法,但它似乎是錯誤的。
這是代碼:
發送QVideoFrame通過QTcpSocket

void FilterRunnable::sendFrame(QVideoFrame *frame) 
{ 
    QByteArray block; 
    QDataStream stream(&block,QIODevice::WriteOnly); 

    frame->map(QAbstractVideoBuffer::ReadOnly); 

    stream << qint16(0) << (char*)frame->bits(); 
    stream.device()->seek(0); 
    stream << qint16(block.size() - sizeof(qint16)); 

    skt.write(block); 

    frame->unmap(); 
} 

因此問題是,如何發送QVideoFrame throught與QTcpSocket?它實際上可能嗎?

+0

您在哪個階段遇到問題?是在收到幀的時候嗎?你可以將它轉換成位,然後在本地成功返回嗎? –

+0

我有一個QVideoFilterRunnable過濾每個QVideoFrame它顯示之前。這個過濾器不改變幀,它只是發送到服務器,所以過濾框後可以顯示。問題是發送bits()是不夠的,我不能使用bits()中的數據在服務器上構建Frame。 – Helldog

+0

代碼在服務器上的外觀如何? –

回答

1

QDataStream::operator<<(const char * s)寫入一個零結束的字符串(見documentation),所以如果在幀中的數據中遇到一個零字節,它將被截斷。嘗試writeBytes