> On Jan 11, 2021, at 5:56 PM, Mit Shan <shanmingm...@itssky.com> wrote:
> 
> I want to achieve the following function in live555 RTSP server:
> 
> (a). Block for some time in the method 
> "GenericMediaServer::lookupServerMediaSession"

Note that "GenericMediaServer::lookupServerMediaSession” is part of the library 
code, and thus is not meant to be modified.  Instead, you should subclass 
“RTSPServer”, and reimplement the virtual function “lookupServerMediaSession” 
in your subclass.  (This is what we did for the “DynamicRTSPServer” code in the 
“mediaServer” directory.)


> One solution, from previous mailing list, is call 
> "TaskScheduler::doEventLoop" with a watch variable in 
> "GenericMediaServer::lookupServerMediaSession"

Again, you would do this in a subclass implementation of 
“lookupServerMediaSession”; not by modifying the existing code.


> , to block current process, and resume from here when watch variable set.
> 
> But I find a problem here: there may be several operation (a) at the same 
> time, which means "TaskScheduler::doEventLoop" is called recursively multiple 
> times, with several watch variable. And earlier used watch variable can only 
> be detected after inner call of "TaskScheduler::doEventLoop" function returns.
> 
> Is my understanding correct?

Yes.  Unfortunately, the “lookupServerMediaSession” function was meant to be 
synchronous, so the only way that I can see for it to ‘block’ (handling events) 
within its implementation is to (recursively) call “doEventLoop()” with a 
'watch variable' parameter.  This does have the problem that you noted - that 
if there are subsequent calls to “lookupServerMediaSession” within this event 
loop, then handling will be LIFO - but I don’t see any alternative.

But perhaps we should step back and ask why you want to block within your 
implementation of “lookupServerMediaSession”?  What are you trying to do here?


Ross Finlayson
Live Networks, Inc.
http://www.live555.com/


_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to