Захват и передача экрана по сети

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

Программные средства

Самый популярный кросс-платформенный программный продукт, который существует на настоящий момент который может захватывать, кодировать и передавать видео с экрана  - это мультимедиа комбайн VLC [http://www.videolan.org/]. 

C помощью VLC можно с легкостью открыть экран как устройство захвата и приступить к захвату, кодировке и передаче видео. В качестве интерфейса управления использовать консоль, telnet, оконный и Web-интерфейс. В окне настроек можно контролировать параметры командной строки, что позволяет упростить процесс настройки.

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

Захват видео

Проведем простой эксперимент, захватим экран с включенным секундомером с помощью VLC и подсчитаем разницу в значениях секундомера в окне секундомера и в окне захвата полученное значение будет задержкой (латентностью) вызванной аналого-цифровым преобразованием (АЦП). Контроль осуществим с помощью цифровой USB Web-камеры (Gembird) и с помощью аналоговой видеокамеры (Sony Handycam). Для того что-бы минимизировать влияние процессора снимки экрана будем делать на мобильный телефон, а не через инструментарий операционной системы.

Захват с экрана через программу VLC выполняется командой

$ cvlc screen:/// :screen-caching=40 --screen-fps="20" --screen-caing="1"

Захват с камер осуществляется через xawtv, с помощью следующих команд:

Для аналоговой камеры подключенной к TV-тюнеру:

$ xawtv -c /dev/video0

Для Web-камеры:

$ xawtv -c /dev/video1

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

  • ~ 300 мс. при захвате экрана через программу VLC

  • ~ 100 мс. при захвате на аналоговую видеокамеру

  • < 100 мс. при захвате на Web-камеру.

Вывод: 300 мс. при захвате через VLC - слишком много. Те же камеры показали задержку в три раза меньше это говорит о том что программное решение далеко от возможности использования в случаях когда осуществляется итерактивность и задержка имеет значительную роль (например в играх). В случае просмотра не интерактивного содержимого, например видео и 3D-демонстраций возможно использование VLC.

Передача видео

Попробуем передать видео с Web-камеры компьютера на другой компьютер по сети с выполнением кодирования. Так как аудио поток планируется передавать через SPICE-соединение, в ходе эксперимента кодировать и предавать звук не будем. Видео с экрана передавать не будем, а будем использовать видео с web-камеры так как компьютеры находятся на разных рабочих местах. Для определения задежки будем использовать отсчет секунд с момента движения до момента отображения этого движения. 

В качестве протокола передачи выберем UDP так как данный протокол не требует проверки целостности пакетов, а следовательно обладает более высокой скоростью чем протоколы на базе TCP.

При использовании протокола UDP компьютер-источник отправляет пакеты на указаный UDP-порт компьютера-получателя. Видеоданные в этом случае упаковываются в потоковый транспортный контейнер (TS) и видео шифруются кодеками поддерживающими этот контерйнер. Данный цифровой контейнер широко используется в сетях цифрового телевиденья, видео сжимается протоколами MPEG2 и MPEG4. 

В целях проведения эксперимента использовлись команды вида:
$ cvlc v4l2:///dev/video1 --sout "#transcode{vcodec=<кодек>,vb=100,fps=20, scale=0.5}:std{access=udp{ttl=1},mux=ts,dst=<удаленный_адрес>:<UDP_порт>}"

В результате проверки кодеков, были получены следующие результаты:

Кодек(код в VLC)
Задержка (сек)
H.264 (h264)
5
MPEG (mp1v)
2
MPEG2 (mp2v)
3
Windows Media (WMV1)
2
MJPEG (MJPG)
2

Более подробный список кодеков VLC на станице: http://wiki.videolan.org/Codec

Вывод: Задержки по несколько секунд - это перебор по причине того что комфортная задержка в обычной сетевой игре часто не превышает 150 милисекунд. Сервис onLive возможно не смог-бы предлагать доступ к играм в облаке с такими задержками. Скорей всего для передачи видео с экрана используются не программные а аппаратные средства.

Аппаратные средства

Как вы знаете существуют так называемые устройства видеозахвата, которые самостоятельно осуществляют захват и кодирование видеосигнала с аналоговых источников (например: телевизор, RCA (тюльпаны)), также существуют устройства захвата с цифровых устройств так называемые фрейм-граберы, которые подключаются вместо монитора к видеоисточнику.

Обычно устройства захвата не обладают возможностью самостоятельной передачи данных по сети, в случае если устройство захвата имеет возможность передачи данных по сети оно называется транслятором или броадкастером.

Фрейм-граберы

 

Epiphan

Рассмотрим модельный рад компании «Epiphan»:

Цены на устройства захвата начинаются от 300 за VGA-грабер c USB интерфейсом начального уровня и могут достигать 2000 за VGA-грабер с USB-интерфейсом поддерживающий высокое количество кадров.

Сравним цены на бюджетное решение VGA2USB и профессиональные решения Epiphan VGA2USB Pro и Epiphan DVI2PCI-e в Канаде и России: 

 
Epiphan VGA2USB
Epiphan VGA2USB Pro
Epiphan dvi2pci-e
Канада
300$
1000$
1000$
Россия
450$
3000$
Цены не указаны

Как видим цены на российском сайте в полтора раза выше, чем на официальном сайте.

Продукция компании Epiphan совместима с Linux что позволяет сэкономить на лицензиях на Windows.

 

AverMedia

Компания AverMedia также предлагает линейку фреймграберов с поддержкой инструментов разработки (SDK) [http://solutions.avermedia.com/ru/products/capture-cards ], а также решения для частных пользователей [http://avermedia.com/product/ProductList.aspx?IID=7].

Решения от AverMedia стоят значительно дешевле чем решения от Epiphan, но не имеют официальной поддержки Linux.

Броадкастеры

В настоящее время броадкастеры поддерживающие FullHD разрешение имеются только у Epiphan:

Цены на трансляторы начитаются от 1600 за VGA транслятор и могут привышать 10000 в случае с VGA Grid.

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

Как вариант выход VGA можно преобразовать в RCA (тюльпан) и за счет более дешевых устройств захвата транслировать сигнал по сети экран проброшеной видео карты , но к сожалению такое решение неизбежно повлияет на АЦП задержку так как преобразование будет выполнятся два раза.

 

Прикрепленный файлРазмер
Image icon HandyCamStopWatch1.JPG40.87 KB
Image icon HandyCamStopWatch2.JPG40.42 KB
Image icon VLCStopWatch1.JPG46.17 KB
Image icon VLCStopWatch2.JPG46.68 KB
Image icon WebCamStopWatch1.JPG36.8 KB
Image icon WebCamStopWatch2.JPG38.81 KB

Разделы сайта: