Giter Site home page Giter Site logo

hb407033 / spice-web-client Goto Github PK

View Code? Open in Web Editor NEW

This project forked from flexvdi/spice-web-client

0.0 3.0 0.0 5.49 MB

A full featured and high performance SPICE web client written in Javascript and HTML5

License: GNU Affero General Public License v3.0

JavaScript 97.19% HTML 2.31% Shell 0.05% CSS 0.45%

spice-web-client's Introduction

#Complete Spice Web Client written in HTML5 and Javascript Full and complete implementation of the SPICE protocol (by Red Hat) written in HTML5 and JavaScript. It allows any standard HTML5-ready Web Browser to connect to remote virtual sessions just by accessing a single URL.

The client can be deployed through a normal web server to connect to spice sessions. To use it you would need to proxy your spice session through a websockets-to-tcp proxy like Kanaka, Websockify or similar projects.

NOTE: This project is NOT based on the spice-html5 prototype.

Features

  • Full QXL Support of the entire spice protocol, including clipping, masking, scaling etc (accelerated mode)
  • Audio support, but only for raw audio samples, not for celt
  • Full KeyBoard support including English, Spanish and Catalan layouts
  • Clipboard sharing support with customizble interface
  • Video streaming support with excellent performance even at 60fps FHD 1080p
  • Extremly high performant LZ decoder with sub <10ms for a FHD 1080P image
  • Pure Javascript codec for quic
  • Configurable multi core support using webworkers (by default it uses 4 CPU Cores)
  • Spice Agent support
  • Set resolution support
  • Honors spice cache for images, cursors and palettes
  • Very low memory footprint for a javascript application like this
  • Spice authentication tokens support
  • Supports graphic live debugging the spice protocol and to replay packets to fix bugs

##Missing features

There are some SPICE features still to be implemented, the most important ones are:

  • Celt or other audio codec
  • USB redirection (not possible at browser level, maybe with a plugin?)

##Client System requirements

To get the best result we recommend at least 1GB of ram and at least two cores at 1,5ghz.

It should work decently on 512mb of ram and 1ghz.

We have made tests in raspberry pi 2 with very good results.

##Network requirements

Only Binary websockets are used to send and receive server data, so you should expect similar network requirements than SPICE itself. for a normal 1080p session the performance is very good up to 150-200ms of latency and 100kb/s bandwidth.

The network consumption of a spice session depends a lot on the usage patterns.

##Performance

Writing a web client for a protocol like spice is challenge because of the limited access to system resources like GPU and the way the javascript VM works.

We have spent almost 2 years profiling the entire project. The lz decoder has been optimized to <10Ms for full hd images. Quic codec has been hacked a lot to get acceptable performance even being executed in javascript.

We have created a graphic pipeline to remove unnecesary draw operations that are going to be overdrawn at the next known packets. We have minimized the work for the javascript GC and refined all our canvas operations and all the entire stack to prevent big data structures to be copied.

You should expect a near perfect experience if you meet the client requirements and the network requirements.

##Browser support

We strongly recommend use the spice web client with Chromium/Chrome or Firefox, however it should work at least on:

  • Google Chrome
  • Firefox
  • Internet Explorer 11
  • Edge

##How to use it

In order to work you only need to provide the IP address of the websockets proxy and the port of the websockets proxy.

You can do it permanently editing run.js or through the URL using the parameters:

http://example.com/spice-web-client/index.html?host=IP_ADDRESS_OF_WEBSOCKIFY&port=TCP_PORT_OF_WEBSOCKIFY

By doing this you will connect to the remote spice session and the resolution will be adapted to your browser viewport area.

##Notes For linux sessions If you are planning to use this to connect to remote linux sessions you should consider disabling compositing on your desktop. The best performance is achieved with kde with compositing and visual effects disabled.

Always install the spice-vdagent and xorg-qxl to get the best results and to have custom resolutions etc.

##Notes For Windows sessions

Spice web client has a very good performance connecting to remote windows sessions. Always install the spice-agent package including the qxl video driver to get the best results and to have custom resolutions etc.

##More information

For more information about the implementation or questions about roadmap etc contact Jose Carlos Norte (jcarlosn) at [email protected]

##License

Spice Web Client is distributed under GNU Affero GPL3 license.

spice-web-client's People

Contributors

anortef avatar fantu avatar zhangqunshi avatar vhanda avatar jcarlosn avatar

Watchers

James Cloos avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.