C# 最佳方法:通过套接字发送屏幕差异

3
我正在从事屏幕共享项目,通过比较以前和实际缓冲区的差异,仅发送屏幕差异到套接字。它正在工作。
我使用Format16bppRgb555将每秒发送8到9个帧到客户端,以减少位图的总字节数。
byte[] wholescreensize= new byte[1360 * 768 * 2];// Its around 2 Mb

我的问题是全屏切换时发生了变化。

我使用以下函数获取大约45-60 kb的PNG图像

45kb * 10(FPS)= 450 kb

有可能将其减少到45 kb以下。

由于这是实时屏幕共享应用程序,我不想降低FPS。

JPEG压缩或LZ4 / GZIP也不能够使差异变小,因为PNG图像已经被压缩了。

private void SendImgDiffToClient(byte[] contents,Rectangle rectangle)
{   

    //Converting Small Portion to Bitmap.Bcoz Image.FromStrem not working here error Parameter is not Valid
    byte[] byteArrayout = new byte[contents.Length];

    var bitmap = new Bitmap(rectangle.Width, rectangle.Height, PixelFormat.Format16bppRgb555);
    var bitmap_data = bitmap.LockBits(new Rectangle(0, 0, bitmap.Width, bitmap.Height), ImageLockMode.WriteOnly, PixelFormat.Format16bppRgb555);
    Marshal.Copy(contents, 0, bitmap_data.Scan0, byteArrayout.Length);
    bitmap.UnlockBits(bitmap_data);

    //Converting Small Bitmap to Png Byte Array and Sending to Client
    using (MemoryStream ms = new MemoryStream())
    { 
        Image msImage = (Image)bitmap;
        msImage.Save(ms, ImageFormat.Png);

        msImage.Dispose();
        byteArrayout = ms.ToArray();
    }  

    SendtoClient(byteArrayout);
}

我的问题是,在这种情况下,最好的减少字节数的方法是什么。


PNG是无损压缩。如果您想进一步减小文件大小,请使用有损(JPG)压缩、帧间压缩(mpg)和/或降低帧率。 - Manfred Radlwimmer
1
没有一种好的方法来做到这一点,对于现代显示器尺寸来说总是太慢了。使用内置的操作系统支持,搜索“c# 远程桌面服务”以查找相关信息。它通过编码视频驱动程序命令而不是像素来获得速度。 - Hans Passant
@HansPassant 我已经在研究这个问题了。但是我还没有找到合适的解决方案。我尝试了这个链接,但是没有成功 https://stackoverflow.com/questions/31543940/c-sharp-screen-transfer-over-socket-efficient-improve-ways - Azar Shaikh
2
好的,我告诉过你了。使用远程桌面协议(RDP)。 - Hans Passant
3
那么,https://github.com/T1T4N/NVNC 可能会给你灵感 :) - Alexandru Clonțea
显示剩余15条评论
1个回答

2
视频流传输是你正在做的事情;现代视频压缩算法有很多改进。它们可以跟踪或移动图像元素,或者以此作为其功能的一部分而扭曲所述图像元素。它们可以逐步构建方式流式传输数据,使静态项目最终获得更多细节(类似于渐进式JPEG图像)。它们同时执行许多操作。您可以尝试进一步研究它们,并从中获得灵感,或者选择并使用其中一个。
换句话说,这里的许多人似乎更喜欢使用现成的视频压缩库解决方案。特别是如果您担心流媒体带宽。
如果您不想使用现有的视频库,则必须决定要投入多少精力,以及与消耗比必要带宽相比,您想变得多么懒散。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接