C# 我应该在通过网络发送时压缩网络摄像头捕获的图像吗

C# 我应该在通过网络发送时压缩网络摄像头捕获的图像吗,c#,image-processing,C#,Image Processing,最近,我完成了我的会议申请。人们可以互相交谈和观看。因此,我从网络摄像头(DirectShow库)捕获图像(将缓冲区的IntPtr转换为JPEG)。现在我没有任何问题,因为该程序仅用于局域网。但我正计划实现一个互联网版本 所以我的问题是:我应该使用JPEG以外的东西吗?我应该比较图像x和图像x+1并只发送差异吗?我应该使用运动JPEG吗?(很抱歉,我对motion jpeg一无所知,但听起来很相关)。您认识到图像在帧与帧之间的变化很小,发送一系列jpeg不是正确的方法。我认为mjpeg发送一系列

最近,我完成了我的会议申请。人们可以互相交谈和观看。因此,我从网络摄像头(DirectShow库)捕获图像(将缓冲区的IntPtr转换为JPEG)。现在我没有任何问题,因为该程序仅用于局域网。但我正计划实现一个互联网版本


所以我的问题是:我应该使用JPEG以外的东西吗?我应该比较图像x和图像x+1并只发送差异吗?我应该使用运动JPEG吗?(很抱歉,我对motion jpeg一无所知,但听起来很相关)。

您认识到图像在帧与帧之间的变化很小,发送一系列jpeg不是正确的方法。我认为mjpeg发送一系列JPEG,这是一个糟糕的选择。我不使用c#,但我相信ffmpeg(一种视频压缩库)可以制作c#包装器。

ffmpeg速度非常快,但没有很好的文档记录,并且是纯ANSI-c。我认为在您的情况下,更好的方法是,正如您已经想到的,压缩图像x和图像x-1之间的差异,这应该足以显著节省带宽。
您还应该包括一种每隔一段时间压缩整个帧的方法,或者当与前一帧的差异超过某个阈值时压缩整个图像

我知道ffmpeg,但您能否更具体地说明我应该使用它的哪些功能?我使用它已经有一段时间了(我使用的是C),但该库有一个函数,可以接受图像缓冲区并生成输出压缩帧。您为它提供图像缓冲区,并在途中发送帧。他们有一些很好的示例代码: