Qt 需要压缩QImage以通过IP发送

Qt 需要压缩QImage以通过IP发送,qt,qimage,Qt,Qimage,我正在编写一个应用程序(在C++/Qt Designer 4.6中,使用一些库,如ffmpeg和v4l2),从网络摄像头捕获,我想通过IP发送捕获的QImage,因此我将其发送到QTcpSocket,并在我的服务器应用程序中成功地接收到它,但问题是它太慢了,因为QImage没有被压缩,所以我没有得到想要的结果,即通过IP进行实时视频流,我的问题是如何压缩QImage?我想将其转换为YUV格式,但我无法实现,这是我代码中的一些行,用于发送可用的QImage: QImage image; QByte

我正在编写一个应用程序(在C++/Qt Designer 4.6中,使用一些库,如
ffmpeg
v4l2
),从网络摄像头捕获,我想通过IP发送捕获的
QImage
,因此我将其发送到
QTcpSocket
,并在我的服务器应用程序中成功地接收到它,但问题是它太慢了,因为
QImage
没有被压缩,所以我没有得到想要的结果,即通过IP进行实时视频流,我的问题是如何压缩
QImage
?我想将其转换为
YUV
格式,但我无法实现,这是我代码中的一些行,用于发送可用的
QImage

QImage image;
QByteArray ba;
QBuffer buffer(&ba);
image.save(&buffer, "PNG");
imsocket->write(ba);

在发送映像之前,可以先删除字节数组,然后在服务器上对其进行解压缩。这将为你提供一个很好的动力

QByteArray arr, cArr;
cArr = qCompress(arr);

您应该遵守优化的第一条规则:当您没有衡量应用程序在哪里花费时间时,不要进行优化。我想你只是在猜测你的应用程序的哪个部分速度慢。

你最好发送一个MPEG压缩的视频流,而不是将每一帧压缩成图像并通过网络发送

MPEG压缩视频流使用一种技术,该技术在第一帧中使用满标度图像,然后在每一帧中仅记录更改的像素,从而提供最大压缩以及通过网络的平滑视频播放


在客户端,您将通过从压缩的MPEG流中获取库生成的帧进行播放。

我遇到了与上面类似的问题,我的代码如下所示:

QBuffer buffer;
buffer.open(QIOdevice::WriteOnly);
QDataStream stream(&buffer);
stream << image;
QBuffer buffer;
buffer.open(QIODevice::WriteOnly);
image.save(&buffer,"JPEG");
不幸的是,我没有办法告诉QDataStream用JPG而不是PNG对图像进行编码,因此解码端显然需要进行调整以解码图像,如:

image.load(&buffer, "JPEG");

thnks JadziaMD我试过这个,它看起来更好,但是应用程序运行得太慢了,我认为它会消耗很多cpu,我还在努力…你可以试着减小图像的大小和用于减少cpu负载的压缩级别。如果高吞吐量很重要,不要压缩或使用像LZ4这样的非常快的压缩器。低延迟jpeg转码器是“turbojpeg”。