This write-up is meant for discussion only.
The hxrecordengine (actually Superbuffer) module came from
the
implementation in RealPlayer for Windows.
It appears to me to be 95% identical, except for a very few
number
of fixes that went in after this module was created
and the the following changes:
o The few recording blocks were removed.
I think those blocks handle
the Simultaneous Play/Record functionality
that converts buffered content to a single output file.
Supposedly, this was done to create a new module that was
Superbuffer-centric.
o Superbuffer enabling and disabling mechanism was changed
from:
using Preference (LiveSuperBuffer & ODSuperBuffer --
not
OnDemandSuperBuffer!) in RecordService's
OpenSession() call
to:
hxclientkit's EnableSuperBuffer(bool enable).
I think the intention was to simplify and reduce enabling
and
disabling of LivePause and OnDemand Superbuffering to a
unified,
single function call.
In the original version, the RecordService is running even
when
both Live and OnDemand Superbuffering is disabled because
it is
needed for recording.
However, in this hxrecordengine, EnableSuperBuffer(false)
would
actually ask the RecordManager to unload hxrecordengine.so
--
but if the playback is underway, client core's reference
to it
might defer unloading to after playback is done.
With hxrecordengine.so unloaded, its interference on the
client's
playback process, if any, is stopped.
o hxrecordengine's GetSeekRange() outputs buffered range
that can
be seeked without rebuffering.
I suspect that hxclientkit's GetSeekRange() redefines the
meaning
of the function to be outputing the entire seekable range
including timeline position that isn't buffered and can
trigger
rebuffering.
hxclientkit also defines GetBufferedRange() which appears
to
be intended to provide buffered range as minPosition and
writePosition, but also provide MaxPosition, I think, as
Max Timeline Position set by
SetPreferredSuperBufferSize().
It is possible that hxclientkit's version of
GetSeekRange() and
its GetBufferedRange() in combination can be used to
define the
interesting timeline positions of Superbuffer, I find it
less
confusing to keep the original meaning of GetSeekRange()
as
Superbuffered range and use it to output all interesting
timeline positions in one function with clearly named and
commented
function arguments.
--
Daniel Yek.
_______________________________________________
Player-dev mailing list
Player-dev helixcommunity.org
http://lists.helixcommunity.org/mailman/listinfo/play
er-dev
|