Hi Ross, Thanks for your help so far.
I’ve got this working along the lines you’ve described, but the problem I’m running into is a need for some kind of external (to live555 thread) reference to each RTSPClient, in order to trigger other events (stopping one, for example). That’s why I thought about creating the clients outside of the loop, but I can understand why that’s not a good idea. Creating the RTSPClient instance inside the eventTrigger handler doesn’t provide a way to pass a reference back, either (as far as I can tell). Do you have any recommendation on how to give the main application thread a useful reference to each stream for use with later event triggers? It seems to me that this would be a common desire for an app that handles multiple streams. thanks, -e > On Nov 11, 2014, at 1:07 PM, Ross Finlayson <finlay...@live555.com> wrote: > >> >> myClient = myRTSPClient::createNew(env, url, etc.); >> ourScheduler->triggerEvent(myRTSPClient::addStreamEventTriggerId, myClient); > > Because you are calling “triggerEvent()” from an external thread (again, if > you’re in the LIVE555 event loop thread when you decide to create a new > stream, then you don’t need event triggers at all), you can’t call > “myRTSPClient::createNew()” from within that thread. Instead, the > “myRTSPClient::createNew()” call should occur (along with a subsequent > “sendDescribeCommand()”) within the event handler function - i.e., within the > LIVE555 event loop. > > So, to get this, you can do something like: > > ///// Within the LIVE555 thread: > > void newStreamHandler(void* clientData) { > char* url = (char*)clientData; > myRTSPClient* myClient = myRTSPClient::createNew(env, url, etc.); > myClient->addStreamToLoop(); > } > > TaskScheduler* live555TaskScheduler = &(envir().taskScheduler()); // A global > variable > EventTriggerId newStreamEventTrigger = > envir().taskScheduler().createEventTrigger(newStreamHandler); // A global > variable > // Note that you need to create only one event trigger > > envir().taskScheduler().doEventLoop(); // does not return > > ///// Then later, within a separate thread: > > live555TaskScheduler->triggerEvent(newStreamEventTrigger, > url_for_the_new_stream); >
_______________________________________________ live-devel mailing list live-devel@lists.live555.com http://lists.live555.com/mailman/listinfo/live-devel