Является ли Java достаточно быстрой, чтобы делать живые снимки экрана? - PullRequest
1 голос
/ 10 марта 2012

В течение последних нескольких месяцев мы с разработчиком работали над апплетом для разделения экрана, который транслируется на медиа-сервер, такой как Wowza или Red5, но независимо от того, что мы делаем, задержка составляет около 5 секунд, что слишком долго для живого приложения, где люди взаимодействуют друг с другом. Мы пробовали xuggle, разные кодировщики, разные проигрыватели, разные сети, разные медиасерверы и даже локальную потоковую передачу. Значительная задержка.

Итак, я начинаю удивляться ...

Достаточно ли быстро работает Java для обмена экранами в реальном времени?

Я видел много апплетов для записи экрана, написанных на Java, но ни один из них не транслировался в прямом эфире. Все, что делается вживую, например GoToMeeting, похоже, использует C ++. Я думаю, может быть, есть причина.

Это не проблема сжатия. Используя ScreenVideo, мы сжимали часовой поток до примерно 100 МБ, и у нас достаточно пропускной способности. Процессор также не перегружен при сжатии, но, похоже, он занимает слишком много времени. Мы получаем лучшие результаты из некоторого кода, извлеченного из BigBlueButton, но, тем не менее, задержка ужасна.

Потоковая веб-камера, с другой стороны, хороша и быстро. Почти без задержек. Итак, проблема в апплете.

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

Идеи? Или я должен просто отказаться от Java и сделать это в C ++? Я бы не хотел этого делать, потому что тогда мне пришлось бы создавать разные версии для разных платформ, но если это единственный путь, то это единственный способ.

1 Ответ

3 голосов
/ 10 марта 2012

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

Убедитесь, что в этих системах отключена или отключена буферизация.

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

Если вы работаете в Windows, возможно, просто запуск диспетчера задач / вкладка «Сеть» подтвердит это или нет (вместо установки чего-то вроде wireshark, что не сложно ... просто пытаюсь предложить быстрый способ проверки)

...