最近,我完成了我的會議應用程序。人們可以互相交談並觀看。因此,我從網絡攝像頭(DirectShow庫)捕獲圖像(轉換爲JPEG的緩衝區的IntPtr)。現在我沒有任何問題,因爲該程序僅用於局域網。但我打算實施它的互聯網版本。我是否應該在通過網絡發送時壓縮由網絡攝像頭捕獲的圖像
所以我的問題是:我應該使用比JPEG更別的東西嗎?我應該比較圖像x和圖像x + 1,只發送差異?我應該使用Motion-JPEG嗎? (對不起,我對motion-jpeg一無所知,但聽起來有關)。
最近,我完成了我的會議應用程序。人們可以互相交談並觀看。因此,我從網絡攝像頭(DirectShow庫)捕獲圖像(轉換爲JPEG的緩衝區的IntPtr)。現在我沒有任何問題,因爲該程序僅用於局域網。但我打算實施它的互聯網版本。我是否應該在通過網絡發送時壓縮由網絡攝像頭捕獲的圖像
所以我的問題是:我應該使用比JPEG更別的東西嗎?我應該比較圖像x和圖像x + 1,只發送差異?我應該使用Motion-JPEG嗎? (對不起,我對motion-jpeg一無所知,但聽起來有關)。
您正處在正確的軌道上,認識到圖像在幀與幀之間變化不大,並且發送jpeg序列並不是一種好的方法。我相信mjpeg發送一系列jpeg,是一個糟糕的選擇。我不使用c#,但我相信ffmpeg(一個視頻壓縮庫)使c#包裝。
FFmpeg速度非常快,但沒有真正有效的文檔和純粹的ANSI-C。我認爲在你的情況下,更好的方法是,如你所想,壓縮圖像x和圖像x-1之間的差異,這應該足以提供顯着的帶寬節省。 你還應該包括一種方法來每隔一段時間壓縮整個圖像,或者當與前一個圖像的差異高於某個閾值時壓縮整個圖像
我知道ffmpeg,但是您可以更具體地瞭解我應該使用它的功能? – Matthias
自從我使用它(並且我使用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