C++ C++;“最好的方法”;“共享屏幕”;过插座
在我当前的应用程序中,我需要共享skype或discord的屏幕,我不想使用外部LIB,但如果必须的话,我会使用 到目前为止,我一直在通过TCP套接字以缩小的位图形式发送屏幕截图,并每隔几毫秒重新绘制一次窗口,这当然是一项我从一开始就知道注定要失败的努力,有什么api可以拯救我吗C++ C++;“最好的方法”;“共享屏幕”;过插座,c++,C++,在我当前的应用程序中,我需要共享skype或discord的屏幕,我不想使用外部LIB,但如果必须的话,我会使用 到目前为止,我一直在通过TCP套接字以缩小的位图形式发送屏幕截图,并每隔几毫秒重新绘制一次窗口,这当然是一项我从一开始就知道注定要失败的努力,有什么api可以拯救我吗 非常感谢您的帮助。虽然我自己还没有实现它,但我相信通常所做的是将屏幕分为16x16像素块。您可以保留上一个屏幕截图,拍摄一个新的屏幕截图,比较哪些块已更改,并仅发送其中已更改的16x16块 通过设置更改阈值,可以进一步
非常感谢您的帮助。虽然我自己还没有实现它,但我相信通常所做的是将屏幕分为16x16像素块。您可以保留上一个屏幕截图,拍摄一个新的屏幕截图,比较哪些块已更改,并仅发送其中已更改的16x16块 通过设置更改阈值,可以进一步提高性能。如果在一个块中更改的像素少于x,则暂时不要发送。或者,如果一个块中变化的累积总和(对应像素之间的差值)低于某个阈值,则不要发送该块
块通常也会使用有损压缩方案进行压缩,该方案会缩小每个块需要发送的所需大小。图像块通常也以4:2:2模式发送,这意味着您以绿色通道一半的分辨率存储红色和蓝色通道。这是基于视觉系统的工作原理,但它解释了为什么在屏幕共享时,纯红色或纯蓝色的东西有时会变得块状或边缘化。如果你不能使用外部库,你就有点麻烦了,因为肯定有人比单个程序员更有效地解决了这个问题。但简而言之,你不需要每次都发送整个屏幕;只需跟踪像素的变化并发送即可。另外,请使用UDP,因为TCP只会减慢速度。感谢您的UDP建议,好的,您会推荐哪些外部库?