implementing timeshifter - is GstIndex going to be ever public again?

Krzysztof Konopko krzysztof.konopko at youview.com
Wed Jan 23 08:19:53 PST 2013


On 29/10/12 14:29, Rob wrote:
> Hello,
> 
> On 29 October 2012 12:19, William Manley <william.manley at youview.com> wrote:
>> On 26/10/12 21:34, Rob wrote:
> 
> [...]
> 
>>> As for your design, I was thinking of something similar once queue2
>>> and some ringbuffer and linear file buffer code had been refactored it
>>> of queue2. You need something to provide the index, it's good for it
>>> to be possible to write the index to disk for more seekable
>>> recordings, due to the use case of transitioning from time shift to
>>> recording it's useful to support both. And more.  :-) One difference I
>>> was thinking of was like the Fluendo element to have some data in RAM
>>> as well as writing to a disk cache and have the in memory data be
>>> centred at the play position so that you have data from the proximity
>>> in memory when looking at past data. Then trying to maintain it as is
>>> sensible and in a fashion similar to the Fluendo element.
>>
>>
>> Something I quite like about Krysz's approach is that:
>>  * The configuration is specified at run time rather than having to
>>    bake in any of the details in a compile-time.  e.g. you could
>>    replace queue2 with some other means of buffering the data.
> 
> That's a fair point. The indexing (creation of time to byte map
> points) and seeking (conversion of time-format seeks to byte-format
> seeks and forwarding upstream) based on the index is separated from
> the buffering element in your design.
> 
>>  * It doesn't require refactoring existing elements, re-use is provided
>>    by re-using existing gstreamer elements as is.
> 
> The purpose of refactoring was to isolate the useful functionalities
> implemented in queue2 ([sparse] file/RAM linear/ring buffer) into some
> cleaner classes/objects to support the overlaid solution implemented
> by Josep in the Fluendo timeshift element.
> 
> I think there is probably quite a performance benefit for normal use
> cases in having data from the close proximity in a RAM ring buffer but
> keeping all the time-shift cache data (including that that is in the
> RAM ring buffer) on disk. With your previously-mentioned point,
> there's no harm in implementing the solution your way and then
> refactoring functional pieces to achieve that later.
> 
>>  * Attaching timing information is the responsibility of the parsers
>>    rather than needing a different timeshifting element for each type
>>    of stream.
> 
> That part is basically the same as the Fluendo element. The idea there
> was to replace the parser according to format to extract and apply
> timestamps to buffers that could then be used to create the index in
> the later buffering element.
> 
> The difference between your design and Fluendo's is basically that you
> don't have the specialised timeshift buffering element and the parts
> that manage the index are split out of the buffering element.
> 
> On the whole yours is a more flexible design with regard to the
> buffering element, but it also loses functionality/efficiency without
> further work on the buffering elements that _can_ plug into the gap.
> Although, I suppose technically the Fluendo time-shift element could
> be plugged in as the buffering element if it were modified to not
> manage the indexing.
> 
>>  * If it would be more convenient or more sophisticated interactions
>>    between the elements were required a timeshiftbin could be created.
> 
> Yup.
> 
> You have a good design from the perspective of modularity but I don't
> know what your requirements/desires are for the buffering capability
> and interactions with other use cases (recording, trick modes, ...) as
> to how well queue2 will function in the buffering role.
> 
> Have you considered perhaps starting from Fluendo's element and
> refactoring parts to make it more modular and then swapping out the
> buffering element as you please? Might be worth investigating.
> 
> In any case, I look forward to seeing the results! :)
> 
> Best regards,
> Rob
> _______________________________________________
> gstreamer-devel mailing list
> gstreamer-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/gstreamer-devel
> 

If you're interested, I'm trying to come up with a proposal to get
something to work on and have others to share their opinions and
experience in this regards.

https://bugzilla.gnome.org/show_bug.cgi?id=692397

Cheers,
Kris


More information about the gstreamer-devel mailing list