> One last question on this, as I'm in the middle of reorganizing the code.
> Shouldn't it be safe to create the rtspClient object in another thread?

Once again, NO!  "RTSPClient" objects - like all subclasses of class "Medium" - 
update shared data structures (stored within the "UsageEnvironment" object) 
when they are constructed.  A single "UsageEnvironment" object MUST NOT be 
accessed from multiple threads (except that the "triggerEvent()" member 
function may be called from a non-LIVE555-event-loop thread).


> Having to create the rtspClient objects using triggers would introduce 
> additional callbacks and making passing arguments a bit more complex.

Nonetheless, if you are creating these "RTSPClient" objects dynamically, then 
the creation of each of these objects has to be done as an 'event' - i.e., done 
from a handler function that's called from the LIVE555 thread.  And the only 
way to signal this from an external thread is to call "triggerEvent()", or to 
use the 'watch variable' mechanism.


> This is now the "main startup code":
>  
> void InitStreamEngine()
> {
>      TaskScheduler* scheduler = BasicTaskScheduler::createNew();
>      usageEnvironment = BasicUsageEnvironment::createNew(*scheduler);
>  
>      myStartStreamEvent = 
> usageEnvironment->taskScheduler().createEventTrigger((TaskFunc*)StartStreamEvent);
>      myStopStreamEvent = 
> usageEnvironment->taskScheduler().createEventTrigger((TaskFunc*)StopStreamEvent);
>      mySeekAbsoluteEvent = 
> usageEnvironment->taskScheduler().createEventTrigger((TaskFunc*)SeekAbsoluteEvent);
>  
>      usageEnvironment->taskScheduler().doEventLoop(&eventLoopWatchVariable);
> }

This looks fine. 


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

_______________________________________________
live-devel mailing list
[email protected]
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to