【问题标题】:Sending QVideoFrame through QTcpSocket通过 QTcpSocket 发送 QVideoFrame
【发布时间】:2016-03-08 08:43:55
【问题描述】:

我一直在为移动流媒体编写应用程序。 现在我在发送 QVideoFrame 时遇到了问题。我需要将其转换为char* 进行发送,所以我使用了bits() 方法,但似乎是错误的。
这是代码:

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();
}

那么问题来了,如何通过 QTcpSocket 发送 QVideoFrame?真的可以吗?

【问题讨论】:

  • 您在哪个阶段遇到问题?是在收到帧的时候吗?能不能把它转成bits再本地成功?
  • 我有一个 QVideoFilterRunnable,它在显示之前过滤每个 QVideoFrame。这个过滤器不改变帧,它只是将它发送到服务器,所以过滤后的帧可以显示。问题是发送 bits() 是不够的,我无法仅使用 bits() 中的数据在服务器上构建 Frame。
  • 服务器上的代码是什么样子的?
  • 有一个函数从套接字读取数据并将该数据发送到另一个处理该数据的函数。 handlePacket(QByteArray packet){ // 不知道如何从那个 ByteArray 构建帧 }
  • 我唯一能想到的就是从uchar *(从-&gt;bits()返回)到char *的转换导致了一个问题。

标签: qt


【解决方案1】:

QDataStream::operator&lt;&lt;(const char * s) 写入一个以零结尾的字符串(请参阅documentation),因此如果您在帧中的数据中遇到零字节,它将被截断。试试writeBytes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-02-21
    • 2011-10-28
    • 2011-08-19
    • 2012-11-27
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多