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


屏幕共享程序的实现:

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

    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,qt组播,屏幕共享)