C # - Какой лучший способ уменьшить размер изображения (для потоковой передачи по TCP) - PullRequest
1 голос
/ 29 ноября 2011

Я написал приложение, которое транслирует экран в реальном времени на удаленное приложение. Он захватывает экран (изменяет размер изображения до 640x480), а затем сжимает изображение с использованием сжатия GIF (используя System.Drawing), сохраняет его в массив byte[] и передает его в другое приложение.

Проблема в том, что размер получаемого мной изображения составляет около 50 КБ, что означает, что при скорости 30 кадров в секунду ему потребуется 1,5 МБ данных, передаваемых каждую секунду. На данный момент я получаю только 8-10 FPS. Я знаю, что это можно как-то решить. Может быть, используя технику, которую используют флэш-видео?

Ответы [ 4 ]

2 голосов
/ 29 ноября 2011

Лично я бы порекомендовал использовать VNCSharp - он сделает большую часть тяжелой работы за вас.Кто-то может сказать, что было бы безумием снова кодировать это.

Если нет, то потоковые изображения - пустая трата полосы пропускания - вам нужно эффективно создать видеопоток и передать его.

0 голосов
/ 30 ноября 2011

Вместо сжатия изображений лучше сжать видеопотоки. Вот как видеокодек достигает высокой степени сжатия: используя сходства в последовательные изображения в потоке.

Если вы сжимаете изображения одно за другим, вы теряете это преимущество в производительности, и это сильно влияет на пропускную способность.

0 голосов
/ 29 ноября 2011

Я думаю, что использование захвата экрана не является хорошим подходом для прямой трансляции экрана. Видео форматы, как правило, предполагают, что между большим количеством кадров у вас есть небольшая пара областей, которые меняются. С другой стороны, вам нужно будет потрудиться, чтобы захватить видео с экрана.

Вы можете начать с этих статей:

http://betterlogic.com/roger/2010/07/list-of-available-directshow-screen-capture-filters/

http://www.codeproject.com/KB/dialog/screencap.aspx

0 голосов
/ 29 ноября 2011

Поскольку вам не нужна анимация и вы хотите сохранить сжатие без потерь, вы получите несколько лучшее сжатие с PNG вместо GIF (а PNG не имеет патентов). Согласно этому экономия составляет от 10 до 30%.

...