2012-01-21 34 views
1

最近,我完成了我的会议应用程序。人们可以互相交谈并观看。因此,我从网络摄像头(DirectShow库)捕获图像(转换为JPEG的缓冲区的IntPtr)。现在我没有任何问题,因为该程序仅用于局域网。但我打算实施它的互联网版本。我是否应该在通过网络发送时压缩由网络摄像头捕获的图像

所以我的问题是:我应该使用比JPEG更别的东西吗?我应该比较图像x和图像x + 1,只发送差异?我应该使用Motion-JPEG吗? (对不起,我对motion-jpeg一无所知,但听起来有关)。

回答

1

您正处在正确的轨道上,认识到图像在帧与帧之间变化不大,并且发送jpeg序列并不是一种好的方法。我相信mjpeg发送一系列jpeg,是一个糟糕的选择。我不使用c#,但我相信ffmpeg(一个视频压缩库)使c#包装。

+0

我知道ffmpeg,但是您可以更具体地了解我应该使用它的功能? – Matthias

+0

自从我使用它(并且我使用C)以来已经有一段时间了,但是该库有一个函数可以接受图像缓冲区并生成传出的压缩帧。你喂它的图像缓冲区,并在他们的路上发送帧。他们有一些很好的示例代码:http://www.google.com/url?sa=t&source=web&cd=1&ved=0CB0QFjAA&url=http%3A%2F%2Fwww.ffmpeg.org%2Fdoxygen%2Ftrunk%2Fencoding_8c-source.html&ei = fK8bT82tO6Pw0gHD_MC1Cw&USG = AFQjCNGff__Sgpr9D36OwyKzfpx-6WW74A&SIG2 = DyzhGYP51RdHVgVSG0T26A – Jim

1

FFmpeg速度非常快,但没有真正有效的文档和纯粹的ANSI-C。我认为在你的情况下,更好的方法是,如你所想,压缩图像x和图像x-1之间的差异,这应该足以提供显着的带宽节省。 你还应该包括一种方法来每隔一段时间压缩整个图像,或者当与前一个图像的差异高于某个阈值时压缩整个图像