您的位置:首页 > 编程语言 > Qt开发

QT组播实现多人屏幕共享的程序

2017-05-16 10:34 435 查看
屏幕共享程序的实现:

发送端(共享屏幕服务端) :

1. 获取桌面图像
QScreen *screen = QApplication::primaryScreen(); //获取当前程序的主窗口对象
QPixmap map = screen->grabWindow(QApplication::desktop()->winId()); //调用主窗口对象的捕捉窗口图像,并传递桌面窗口的id号

2. 编码成jpg
QByteArray ba;
QBuffer    bf(&ba);
map.save(&bf, "jpg", 30) // 30表示压宿率,值从0 – 100, 值越小表示编码出来的图像文件就越小,当然也就越不清晰

3. 用udp组播发出.
组播的编程参考http://blog.csdn.net/jklinux/article/details/72123951

一张jpg大概100K, 每次传输4K字节, 需分成多次传输.
每次桌面图像编码成jpg, 图像大小是不固定的. 每张图像传输第一次时,发出"newImage:长度",
QUdpSocket成功发出个部分数据后, waitForBytesWritten等待发出,完成后再发出下一部分.

接收端:
1. 创建udp对象,加入组播

2. 接收数据到内存数据里,并且判断。 如接收到"newImage:长度"则表示上一张图像已传输完毕,可以把上一张图像刷出来了。并且也知道下一张图像的长度。

3. 接收完成一张图像后。使用QPixmap从内存数组里加载图像.
QPixmap map;
map.loadFromData((uchar *)data_pic, len_recv);
label->setPixmap(map);


完整工程源码:

http://download.csdn.net/detail/jklinux/9843418
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  qt qt组播 屏幕共享