xpra icon
Bug tracker and wiki

This bug tracker and wiki are being discontinued
please use https://github.com/Xpra-org/xpra instead.


Changes between Initial Version and Version 1 of Encodings/x264


Ignore:
Timestamp:
11/01/13 12:26:30 (8 years ago)
Author:
Antoine Martin
Comment:

create dedicated x264 page

Legend:

Unmodified
Added
Removed
Modified
  • Encodings/x264

    v1 v1  
     1= x264 Encoding =
     2(see [http://en.wikipedia.org/wiki/H.264 wikipedia H.264])
     3x264 is the encoding that supports the most options and tunings, and the default option when available because it offers the best performance and compression out of the box.
     4
     5Quality/speed and minimum quality/speed can be set via the command line (and the latter can also be changed at runtime via the tray applet)
     6Note that even when using the x264 encoding, some small screen updates may get sent as png or rgb24 to save time/bandwidth (not encoding a full frame).
     7
     8For more information on x264 options, see [http://www.avidemux.org/admWiki/doku.php?id=tutorial:h.264 H.264 encoding guide]
     9
     10=== Profiles ===
     11(see [http://en.wikipedia.org/wiki/H.264/MPEG-4_AVC#Profiles wikipedia h264 profiles])
     12x264 supports the following profiles: {{{baseline}}}, {{{main}}}, {{{high}}}, {{{high10}}}, {{{high422}}} and {{{high444}}}.
     13
     14At present, we use {{{high}}} or better by default unless the client overrides it.
     15
     16
     17=== Quality Option ===
     18What this does should be obvious (in x264 speak, this controls the {{{rc.f_rf_constant}}} parameter), but it is more complicated than you think:
     19* we support 3 different colourspace modes: YUV420, YUV422 and YUV444 and this affects the quality of the picture too. (YUV420 is used for lowest quality settings). {{{YUV444}}} uses roughly twice as much bandwidth as {{{YUV420}}}. Switching from one mode to another is expensive, as we then need to send a new key frame and re-initialize both the encoder and the decoder - so the thresholds for going up to the next mode are not the same as the thresholds for going down to the next mode (prevents a yoyo effect).
     20* not all modes are supported by all profiles, so we need to switch to a different profile to support {{{YUV422}}} ({{{high422}}} or {{{high444}}}) and {{{YUV444}}} ({{{high444}}} only).
     21* some builds against older versions of libav/ffmpeg only support {{{YUV420}}},
     22 see [/browser/xpra/trunk/src/patches/x264-limited-csc.patch x264-limited-csc.patch]
     23
     24
     25=== Speed Option ===
     26This option, shown as "latency" via the tray menu, controls how hard the encoder is going to work at compressing the picture. Working harder means lower bandwidth, but also higher latency.
     27x264 supports the following speed settings: {{{ultrafast}}}, {{{superfast}}}, {{{veryfast}}}, {{{faster}}}, {{{fast}}}, {{{medium}}}, {{{slow}}}, {{{slower}}}, {{{veryslow}}} and {{{placebo}}}.
     28xpra maps the 100% to 0% speed option from {{{ultrafast}}} to {{{slower}}} only.
     29{{{veryslow}}} and {{{placebo}}} are not particularly useful (diminishing returns: much much slower and without sufficient savings for real-time use).
     30{{{ultrafast}}} is only available when setting the encoder speed to 100% manually (via the command line or UI) - note that this setting has side-effects which prevents other settings from behaving as they should if the option is later changed.