Python library that implements DVB protocols for companion synchronisation
This is a minor release that fixes a packaging bug that may cause pydvbcss to be unable to install correctly unless CherryPy and ws4py packages are already installed.
requirements.txt
in pypi package (c696395)This is a minor release containing mostly maintenance fixes arising from recent changes to cherrypy/ws4py, some small documentation improvements, and an enhancement to CII server support for when bound to multiple network interfaces.
wcUrl
, tsUrl
and
teUrl
to take account of the network interface the client has connected
to - enabling it to work when bound to multiple interfaces.
(#14)README.md
improvements.This is a minor release that includes a temporary workaround for a problem ith dependencies (cherrypy and ws4py) when installing. It also includes various bug fixes and a new type of Clock object that is useful when compensating for rendering latencies.
calcWhen()
, toParenTicks()
and toRootTicks()
when clock speed is 0.` (32256b6)OffsetClock
class to make it easy to compensate for rendering latencies.This release contains a significant internal upgrade to the dvbcss.clock
module with minor knock-on effects on other packages - particularly wall clock
client and server code and algorithms. The changes have been implemented to
be mostly backwardly compatible, so existing code should continue to work. The
only exception will be any custom wall clock client algorithms.
Clock objects can now calculate dispersion (error bounds). Clocks can also track clock availability (mirroring the concept of timeline availability).
Wall clock client algorithms have been switched from measuring and adjusting the same clock (representing the wall clock) to instead measuring its parent and setting the correlation. Any custom wall clock client algorithms will not work and will need to be updated.
CorrelatedClock
instead of a TunableClock
to model a wall clock.
and set the "maximum frequency error" when initialising the SysClock
instead of passing it to a WallClockClient
or WallClockServer
.Correlation
object instead of a tuple (parentT,childT) to represent
correlations for a CorrelatedClock
Candidate
objects now represent the relationship between the parent
of the local wall clock (instead of the local wall clock itself)
and the server's wall clock.`Candidate
object in units of
nanoseconds. They no longer receive a Candidate
converted to units of
clock ticks.Correlation
instead of an adjustment value.DispersionCalculator
is being deprecated. It still exists, but you should
stop using it and instead use Candidate.calcCorrelationFor
function to
create a correlation which you then put into a CorrelatedClock
and call
the dispersionAtTime
function.Examples of old way (0.3.x and earlier):
s = SysClock()
wallClock = TunableClock(s, tickRate=1000000000)
algorithm = LowestDispersionCandidate(wallClock,repeatSecs=1,timeoutSecs=0.5, localMaxFreqErrorPpm=500)
wc_client=WallClockClient(bind, dest, wallClock, algorithm)
wc_client.start()
timeline = CorrelatedClock(wallClock, tickRate=1000, (10,20))
timeline.correlation = ( timeline.correlation[0], timeline.correlation[1] + 50)
ts = TSClientClockController(tsUrl, contentIdStem, timelineSelector, timeline)
print ts.available
Equivalent new way (0.4 and later):
s=SysClock(maxFreqErrorPpm=500)
wallClock=CorrelatedClock(s,tickRate=1000000000)
algorithm = LowestDispersionCandidate(wallClock,repeatSecs=1,timeoutSecs=0.5)
wc_client=WallClockClient(bind, dest, wallClock, algorithm)
wc_client.start()
timeline = CorrelatedClock(wallClock, tickRate=1000, Correlation(10,20))
timeline.correlation = timeline.correlation.butWith(childTicks=timeline.childTicks + 50)
ts = TSClientClockController(tsUrl, contentIdStem, timelineSelector, timeline)
print timeline.isAvailable()
Main changes in new clock model (da846a9):
CorrelatedClock
, RangeCorrelatedClock
and TunableClock
.availability
CorrelatedClock
class modified to use a Correlation
object instead of a tuple.TunableClock
reimplemented as subclass of CorrelatedClock
WallClockClient
, WallClockServer
initialisation arguments - precision and maxfreqerror now optional. Now, by default, taken from the clock.DispersionCalculator
class deprecated (but still available). Use Candidate.calcCorrelationFor
and CorrelatedClock.dispersionAtTime
instead.Other improvements/bugfixes:
setParent()
on CorrelatedClock
(d4576d7)clock.getEffectiveSpeed()
stuck in infinite loop. (ceb3f33)This release contains only bug fixes and modifications to the build/packaging process used on github.
CIIClient
This release contains only bugfixes and minor backward compatible API additions.
CIIServer
class to avoid corruption of default value for initialCII
if a 2nd CII server is instantiatedcopy()
methods to all classes representing JSON messages.TSClient
class did not correctly handle when contentId is nullexamples/TSClient.py
now exits when the connection is closed.pip
VERSION
file."presentationStatus"
CII property in examples. Should have been a list, not a string. Also added a check to trap this.examples/TVDevice.py
examples/WallClockClient.py
This release adds improved mechanisms to report dispersion from the LowestDispersionAlgorithm Wall Clock Client algorithm. This makes it possible to calculate future dispersion or log dispersion and infer the greatest dispersion during a period of time.