VNC через GIF

    Полгода назад на Хабре излагалась идея GIF-сокетов — коммуникаций в реальном времени, используя анимированный GIF в качестве транспорта.

    Идея в том, что в формате анимированного GIF'а не указывается количество фреймов, так что после отображения картинки браузер ждёт новых фреймов с сервера до тех пор, пока не получит сигнальные биты о конце файла. Другими словами, сервер легко может пушить в браузер сообщения по открытому каналу в GIF.

    Сегодня на гитхабе опубликована программка vnc-over-gif, которая элегантно использует этот принцип. Программа снимает скриншоты экрана и транслирует их через анимированный gif.

    Программа основана на node-gif и node-rfb2.

    Установка


    npm install -g vnc-over-gif


    Использование


    Запускаем сервер
    $> PORT=4455 vnc-over-gif


    Открываем URL в браузере
    http://localhost:4455/screen.gif?host=localhost&port=5900&password=secret

    Similar posts

    Ads
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More

    Comments 42

      +19
      Просто перехватило дыхание… От безумной красоты идеи.
        +2
        Идея реализовывалась и раньше. Просто там производительность, мягко говоря, не очень. Поэтому этот метод хорошо либо просто на поиграться, либо когда альтернатив уже совсем нет.
        Я даже помню когда писал нечто похожее несколько лет назад для внутреннего surveillance что бы еще можно было перематывать туда-сюда в браузере.
          0
          Именно — когда нет альтернатив. Тогда все средства хороши. Даже вроде TCP-Over-DNS
            0
            Есть еще передача поверх ICMP, про нее Крис Касперски писал.
              0
              Да, и это тоже, замечательный ход! И вообще, на всякую ихнюю хитрую, у нашего брата таки всегда найдется что-нибудь с левой ;)
                0
                Но в данном случае реализация на уровне приложений, а не на сетевом.
              +2
              RFC1149, Transmission of IP Datagrams on Avian Carriers
            0
            А чем gif-скринкастинг лучше, чем аналогичный через mjpg или mpng, которые давно используются и даже встроены в некоторые веб-серверы?
              0
              Поддержкой. GIF поддерживается везде и без плагинов, в отличие с mjpg и mpng (кстати, что это? Чем отличается от mng и apng?)
                +1
                Вот тут я подробно писал о mJPEG, лень повторяться: http://bolknote.ru/2011/10/08/~3431, там же можно узнать что такое mPNG, mGIF и так далее.
                  0
                  Да, спасибо, я этот multipart/x-mixed-replace и имел в виду. Сейчас вроде все браузеры его поддерживают.
                0
                mjpg вряд ли пригоден для сжатия экранов.
                  0
                  Зато mpng пригоден. См. что про multipart/x-mixed-replace выше написал bolk.
                  0
                  Возможно тем, что в GIF возможны оптимизации, подходящие для скринкастинга. Например, передача только измененной области.
                +8
                Могли бы и в паблик пример выложить поглядеть.
                  –1
                  Так то забавно, чо.
                    0
                    Гениально!
                      +8
                      А что станет с браузером, когда картинка вырастет до огромного размера? Он ведь пытается её как-то кэшировать.
                        0
                        Обычно такой проблем нет в данном случае. А ведь еще всегда можно попросить браузер не кешировать.
                          +7
                          Браузер:

                          — Нет, а я все-таки попробую… Вот видите, все хорошо… OH SHI~
                            +3
                            Нельзя попросить браузер не кэшировать хотя бы в памяти, ведь для него это одна картинка.
                            0
                            Вряд ли он будет сохранять недокачаную картинку, только на время текущей сессии в памяти. Но не уверен.
                              +8
                              Даже если по какой-то причине кешировать он её не станет, накапливать в памяти он всё же обязан — ведь это всё-таки GIF, а не потоковое видео. При получении стоп-последовательности он должен начать крутить кадры по кругу.
                                0
                                Вообще-то GIF не обязан быть зацикленным.
                                И вообще, если почитать GIF89a, то он задумывался скорее для многокадровых презентаций, чем для видеофрагментов.
                                +1
                                Можно лимитировать размер одной картинки и запрашивать следующую простейшим JS
                                  0
                                  Зато логи будут.
                                • UFO just landed and posted this here
                                    0
                                    ЧТО? Эх, и правда. Идея все же, не спорю, оригинальна, но… какой тогда практический смысл? А я уж было размечтался…
                                      +1
                                      Обратная связь на gif-ках? Это было бы мощно, конечно.
                                        0
                                        Ну в чистом gif — нет. А в html никаких проблем. При клике на картинку легко передать на сервер координаты фоновым асинхронным запросом.
                                        0
                                        ещё какой смысл. гоняешь чтонть в xvfb и смотришь что происходит
                                        0
                                        Как раз с обратной связью проблем никогда не было — ajax. Проблема всегда была с быстрым получением нотификаций от сервера, не спамя его раз в секунду ajax запросами :).
                                          0
                                          Comet вас спасет
                                            0
                                            Меня не надо спасать, я использую другие стеки технлогий :). Но я смотрел, как работает long polling на практике. Хороший пример — относительно свежая онлайн-игрушка «Полный Пи», целиком посмотроенная на ajax и long polling. Пропущенные серверные нотификации — это ее основное проклятие на протяжение последнего года. На практие, long polling не очень устойчив к ошибкам сети / ответам всяких кеширующих прокси и прочей ереси. На нагруженном проекте часть нотификаций стабильно клиентом недополучается.

                                            P.S. И преимущества лонг поллинга имеют очень малое отношение к описанному в статье прикольному фокусу :).
                                        0
                                        Было бы неплохо сравнить с другими методами передачи в объеме данных, чтобы оценить эффективность. Идея-то красивая, но есть ли в ней практический смысл.
                                          +2
                                          Мне вот другое вспоминается: история с режимом HAM (hold-and-modify) в Amiga. Когда разработчики нашли недокументированную возможность графического чипа, который по идее отображал 64 цвета из палитры в 4096 цветов, перевести его в этот режим: HAM — что вдруг вывело Amiga на совершенно иной уровень в плане графики, и обеспечило на определенное время абсолютное превосходство в этой области. Может и не совсем в тему, но от красоты идеи дух перехватило в свое время еще сильнее.
                                          –13
                                          Не могу удержаться… GLANDS через ASS.
                                            +9
                                            Не могу удержаться… Гланды это tonsils, а glands — железы.
                                            +2
                                            Есть ведь en.wikipedia.org/wiki/Motion_JPEG
                                            Проблема в том что браузер будет держать весь гиф в памяти… Ну, она кончится (память)
                                              +2
                                              Вы никогда не видели скриншоты, пожатые JPEG-ом?
                                                0
                                                Не в html5 эпоху. С тем же успехом можно отдавать бесконечный html или js.

                                                Вебсокеты работают великолепно. (да-да, речь про селектеловскую консоль к виртуалкам, реализованную на чистых вебсокетах).

                                                Only users with full accounts can post comments. Log in, please.