Qt 需要压缩QImage以通过IP发送
我正在编写一个应用程序(在C++/Qt Designer 4.6中,使用一些库,如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
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”。