[Spice-devel] Streaming video command line

Yaniv Kaul ykaul at redhat.com
Tue Apr 19 11:21:40 PDT 2011


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.

>> 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



More information about the Spice-devel mailing list