[Spice-devel] Streaming video command line

Yaniv Kaul ykaul at redhat.com
Wed Apr 20 00:57:57 PDT 2011


On 04/20/2011 12:46 PM, Alon Levy wrote:
> On Tue, Apr 19, 2011 at 09:21:40PM +0300, Yaniv Kaul wrote:
>> On 4/19/2011 20:27, Alon Levy wrote:
>>> On Mon, Apr 18, 2011 at 08:44:05AM +0300, Yaniv Kaul wrote:
>>>> On 4/18/2011 07:42, Alon Levy wrote:
>>>>> On Fri, Apr 15, 2011 at 11:08:01PM +0300, Yaniv Kaul wrote:
>>>>>> On 4/15/2011 18:22, Alon Levy wrote:
>>>>>>> On Thu, Apr 14, 2011 at 03:20:40PM +0200, Andrea Celestino wrote:
>>>>>>>> I would like to improve the streaming video performance in Spice, do you
>>>>>>>> think that is possible to improve it? In what way?
>>>>>>>> Are there documents that describes in detail how spice works with video?
>>>>>>> The best I can offer in terms of documentation is the pdfs in the documents
>>>>>>> section of spice-space.org, I imagine you are looking for something more,
>>>>>>> sorry to disappoint.
>>>>>>>
>>>>>>> The code you are interested in is server/red_worker.c, but that's not very
>>>>>>> helpful since that file is huge. Would be nice to split the video related
>>>>>>> stuff to a separate file.
>>>>>>>
>>>>>>> worker->streaming_video - determines how we handle streaming video
>>>>>>>
>>>>>>> git grep stream -- server/red_worker.c
>>>>>>>
>>>>>>> I can give you better pointers if you ask more specific questions, but doing
>>>>>>> the documentation myself right now.. too much work.
>>>>>>>
>>>>>>> overview of what spice does:
>>>>>>>   * determine if a given draw operation (has to be an opaque copy iirc) is
>>>>>>>    repeated to the same area.
>>>>>>>   * if so, starts a mjpeg encoder and sends the stream to the client
>>>>>>>
>>>>>>> how to improve this (some is on the Features page in spice-space):
>>>>>>>   * learn to do various video acceleration apis (windows has it, linux has it)
>>>>>>>    * this is by far the best way to go regarding performance, unless you are
>>>>>>>    willing to sacrifice cpu for bandwidth in which case I guess you would reencode.
>>>>>>>    * otoh this is a pretty large change to multiple parts of spice:
>>>>>>>     * you need to update the driver for each platform you choose to support, update the protocol, teach server and client
>>>>>>>    * it's definitely on the todo list, but no date set.
>>>>>>>   * replace mjpeg with a different encoder
>>>>>>>    * if it's just a better performing encoder, clear win.
>>>>>>>    * otherwise you get the usual cpu/bw tradeoff.
>>>>>>>    * or you could try to learn which encoder fits which stream (based on some
>>>>>>>    metric, could be the performance of the encoders themselves)
>>>>>>>     * just throwing an idea.
>>>>>>>
>>>>>>> Alon
>>>>>> Compressed stream pass-through may also be a viable options
>>>>>> sometimes - do not decode on the guest, re-encode in mjpeg and
>>>>>> decode on the client - just pass the compressed stream from the
>>>>>> guest to the client and decode there.
>>>>>> Of course, you need to have the same decoder on the client as you'd
>>>>>> have on the VM, which makes it more fun, but others have been doing
>>>>>> it.
>>>>> That's what video acceleration APIs (vdpau for instance) are all about.
>>>> Not exactly. I think we are talking about two levels in which
>>>> redirection can take place:
>>>> You are talking about redirecting GPU assisted decoding from the
>>>> guest 'vGPU' to the client.
>>>> I'm talking about redirecting the compressed stream, before it is
>>>> offloaded to the vGPU (which is why you need the correct decoder on
>>>> the client).
>>>> Each method has its cons and pros.
>>> The offloading to the vGPU is not associated with any cost, so I don't
>>> understand the difference. What is offloaded to the vGPU *is* the compressed
>>> stream (and data to allow the remote, i.e. the GPU, to do stuff like stretching).
>> There's a difference. If I'm using encoding X, then the GPU may not
>> be able to decode it - as a stream, in hardware.
>> I may utilize the GPU for some parts of the decoding (DCT for example)
>> If I'm using MPEG-2, and possibly MPEG-4, some GPUs can decode the
>> stream completely in hardware.
>> So I assume in the case of a supported compression method, the GPU
>> would get the compressed stream. Otherwise, it'll assist just with
>> the parts it can.
>> Y.
>>
> ok, I understand the difference. But if there is some compression scheme there is no
> support for in the specific VA API, then what you are suggesting is going higher level,
> for instance implementing a DirectDraw filter (or whatever it's called), right?

On Windows its DXVA 
(http://msdn.microsoft.com/en-us/library/ff567750.aspx), but then we 
need to think about it. Is 'offloading' some of it (say 'alpha 
blending') would make video any faster? where would you offload it to?
-> software on VM OS (no offload)
  -> software in QXL
   -> software in Spice server
    -> hardware on host?
    -> software on client?
     -> hardware on client?

Where would it run fastest, assuming you have latencies and overhead 
sending it?


I believe that if we implement the video decoding itself (in DXVA case - 
http://msdn.microsoft.com/en-us/library/ff567651%28v=VS.85%29.aspx), we 
are done with most of the issues. The rest could run in software, on the 
VM - as they do now.
Y.


>>>> Y.
>>>>
>>>>>> Y.
>>>>>>
>>>>>>>> 2011/4/11 Alon Levy<alevy at redhat.com>
>>>>>>>>
>>>>>>>>> On Mon, Apr 11, 2011 at 03:48:08PM +0200, Andrea Celestino wrote:
>>>>>>>>>> Hi,
>>>>>>>>>> I have installed Spice and now I'm trying to use it. I'm interested in
>>>>>>>>> how
>>>>>>>>>> spice manage streaming video. I read that there is the option
>>>>>>>>>>
>>>>>>>>>> -streaming-video=[all|off|filter]
>>>>>>>>>>
>>>>>>>>>> Can you explain me the difference between these three option?
>>>>>>>>>> Which source file read the command line?
>>>>>>>>>> Why I have tried to play a video in a player but i have not notice any
>>>>>>>>>> difference between the two options 'off' and 'filter'?
>>>>>>>>>>
>>>>>>>>> Look at http://cgit.freedesktop.org/spice/spice/tree/server/red_worker.c
>>>>>>>>>
>>>>>>>>> search for STREAM_VIDEO_FILTER
>>>>>>>>>
>>>>>>>>> The switch toggles modes for creating streams:
>>>>>>>>>   off - never create
>>>>>>>>>   all/filter - create either based on smallest size, or just based on
>>>>>>>>>   number of consecutive opaque copies to same area.
>>>>>>>>>
>>>>>>>>>> Thanks very much for the help.
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Spice-devel mailing list
>>>>>>>>>> Spice-devel at lists.freedesktop.org
>>>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>>>>>>>> _______________________________________________
>>>>>>>> Spice-devel mailing list
>>>>>>>> Spice-devel at lists.freedesktop.org
>>>>>>>> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>>>>>>> _______________________________________________
>>>>>>> Spice-devel mailing list
>>>>>>> Spice-devel at lists.freedesktop.org
>>>>>>> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>>>>>> _______________________________________________
>>>>>> Spice-devel mailing list
>>>>>> Spice-devel at lists.freedesktop.org
>>>>>> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>>>> _______________________________________________
>>>> Spice-devel mailing list
>>>> Spice-devel at lists.freedesktop.org
>>>> http://lists.freedesktop.org/mailman/listinfo/spice-devel
>> _______________________________________________
>> Spice-devel mailing list
>> Spice-devel at lists.freedesktop.org
>> http://lists.freedesktop.org/mailman/listinfo/spice-devel



More information about the Spice-devel mailing list