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

来源:互联网 发布:逆袭网络剧7第一集哇趣 编辑:程序博客网 时间:2024/06/10 06:27
屏幕共享程序的实现:发送端(共享屏幕服务端) :    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