[Libevent-users] Incremental timers for streaming media

Steve Underwood steveu at coppice.org
Mon Mar 5 09:16:14 EST 2007


Hi all,

Currently libevent only supports setting timers relative to the time at 
which they are set. Used directly, this is unsuitable for streaming 
media, which require packets sent at a well controlled overall rate. I 
have been using code that reads the clock in the timer event service 
routine, and makes any necessary adjustments to the next timeout 
request. This works fine. However, it seems like this functionality 
ought to be in libevent itself, as streaming is a common requirement.

I have added a new function to my local copy of libevent - 
event_add_incremental() - which sets a timeout relative to the previous 
deadline, rather than relative to the current (typically slightly later) 
time. I use event_add() for the first timeout, to set an initial 
baseline time for the increments. What is incomplete right now is 
provision for overload situations, where the machine can't keep up with 
the event servicing, and things fall further and further behind. Falling 
slightly behind, and then catching up, is quite normal. That means 
simply rejecting requests for a deadline which is in the past is not 
satisfactory. Currently I am applying some latitude, and rejecting 
requests for deadlines which are seriously in the past. I works for my 
needs, but it doesn't seem a very "complete" solution.

I suspect others have faced similar issues, so I thought I would ask 
what they have done. I have something workable right now, for my own 
use. What I am trying to arrive at is a clean and flexible scheme, to 
offers as patches to libevent.

Regards,
Steve



More information about the Libevent-users mailing list