[Spice-devel] [PATCH 0/11] Add GStreamer and VP8 support

Francois Gouget fgouget at codeweavers.com
Wed May 13 13:20:16 PDT 2015


This is a followup on Jeremy White's concept patch to use GStreamer:
http://www.spinics.net/lists/spice-devel/msg10030.html

There is still a lot of work ahead but this patches series has all the 
infrastructure so we're sending it out to verify that it looks ok.

First, with this patch series:
 1. You can use the SpiceVideoCodecs option in the xorg.conf file (or
    $XSPICE_VIDEO_CODECS) to set your video encoder and codec 
    preferences. The default is still the builtin MJPEG encoder.

 2. You can do the same from QEmu by setting the video-codecs option.

 3. Clients can expose new display capabilities to advertise that 
    they support either or both of the MJPEG and VP8 codecs. The new 
    server will automatically pick a codec they support based on the 
    above preference list. Older clients that don't advertise these new 
    capabilities will automatically get an MJPEG stream. So old and new 
    clients and servers should all be compatible.

 4. The GTK and and HTML5 clients have been updated to support both 
    MJPEG and VP8.

 5. Using GStreamer as the video encoder should work well for either 
    codecs as long as the stream does not hit your network connection's 
    bandwidth limit. Essentially this means it should be ok on LANs and 
    fast WiFi networks. This should even work with multiple clients.


There's one known issue in the framework: if the Spice server and 
clients have no codec in common, red_display_create_stream() will set 
video_encoder to NULL and that's not handled well. Currently this should 
really not happen as all clients support MJPEG and we have the builtin 
MJPEG encoder as a fallback. The root of the issue is that the 
red_display_create_stream() callers assume it will never fail. But I 
don't know how to change that yet.


The GStreamer backend still has a number of limitations:
 1. It's still based on GStreamer 0.10. I don't think moving to 1.0 
    will be a problem, if anything it should help (famous last words).
    For instance support for dynamically changing the bitrate appears to 
    be better in 1.0.

 2. It still does not have any rate control but should work fine as long 
    as the bandwidth is sufficient. The issue with rate control is that, 
    at least in 0.10, GStreamer encoders don't like bitrate changes, 
    need some time after each change to actually match the new bitrate, 
    still tend to exceed it from time to time, and sometimes just won't 
    get anywhere near it. Part of these issues are likely to be bugs in 
    the current implementation and it should be possible to work around 
    most others.


Feedback would be greatly appreciated.


Cheers,

-- 
Francois Gouget <fgouget at codeweavers.com>


More information about the Spice-devel mailing list