<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><blockquote type="cite"><div style="WORD-WRAP: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space"><div dir="ltr" align="left"><div dir="ltr" align="left"><span class="356164408-09122011"><font color="#005080" face="Trebuchet MS">So I am trying to create a event trigger, but I am unsure on 
how to proceed. The taskScheduler->createEventTrigger() function expects a 
taskFunc object and I am not sure what this is.</font></span></div></div></div></blockquote><div><br></div>It's quite simple.  It's this:</div><div><span class="Apple-tab-span" style="white-space:pre">      </span>typedef void TaskFunc(void* clientData); </div><div>I.e., it's a void function that takes a "void*" as argument.</div><div><br></div><div><blockquote type="cite"><div style="WORD-WRAP: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space"><div dir="ltr" align="left"><div dir="ltr" align="left" style="text-align: -webkit-auto;"><span class="356164408-09122011"><font class="Apple-style-span" color="#000000"> </font><font color="#005080" face="Trebuchet MS">Is it similar to a callback?</font></span></div></div></div></blockquote><div><br></div>Yes, but it's 'called back' from within the event loop, when the event is 'triggered'.</div><div><br><blockquote type="cite"><div style="WORD-WRAP: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space"><div dir="ltr" align="left"><div dir="ltr" align="left" style="text-align: -webkit-auto;"><span class="356164408-09122011"><font color="#005080" face="Trebuchet MS"> If 
so, how do I cast my function do a taskFunc object? I currently having something 
like this, which is way off:</font></span></div>
<div dir="ltr" align="left"><span class="356164408-09122011"><font color="#005080" face="Trebuchet MS"></font></span> </div>
<div dir="ltr" align="left"><span class="356164408-09122011"><font color="#005080" face="Trebuchet MS"></font></span></div>
<div dir="ltr" align="left"><span class="356164408-09122011"><font color="#005080" face="Trebuchet MS">void killStream() {};</font></span></div></div></div></blockquote><div><br></div>"kilStream()" needs a single void* parameter.  Don't you want to specify a specific stream that you want to 'kill'?  If so, then you can use that as your parameter (cast it to a void*) when you later call "triggerEvent()".</div><div> <br><blockquote type="cite"><div style="WORD-WRAP: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space"><div dir="ltr" align="left">
<div dir="ltr" align="left"><span class="356164408-09122011"><font color="#005080" face="Trebuchet MS">taskSched->createEventTrigger(&killstream);</font></span></div></div></div></blockquote><div><br></div>Yes, but you'll need to remember the result "EventTriggerId" of this call, so you can later use it in your call to "triggerEvent()".</div><div><br></div><div>If you're still unsure about how to use event triggers, then you can see an example in "liveMedia/DeviceSource.cpp".</div><div><br></div><div><br><blockquote type="cite"><div style="WORD-WRAP: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space"><div dir="ltr" align="left">
<div dir="ltr" align="left"><span class="356164408-09122011"><font color="#005080" face="Trebuchet MS"></font></span> <span class="Apple-style-span" style="color: rgb(0, 80, 128); font-family: 'Trebuchet MS'; ">I am also still unsure about the mechanisms for actually 
stopping the streams.</span></div></div></div></blockquote><div><br></div>OK, this is a completely different question.</div><div><br></div><div>To remove (and delete) a "ServerMediaSession" object from the server, simply call </div><div><span class="Apple-tab-span" style="white-space:pre">   </span>RTSPServer::removeServerMediaSession()</div><div>***Do not*** call "Medium::close()" on the "ServerMediaSession" object; that is done automatically by "removeServerMediaSession()".  Note, however, that although this will prevent any future clients from accessing this stream, it will not stop any streaming that's current ongoing for this "ServerMediaSession".  If you want to do that, you would need to delete the "RTSPServer::RTSPClientSession" object for each currently active client.  (This has the same effect as the client having done a RTSP "TEARDOWN".)</div><br><br><div apple-content-edited="true">
<span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; "><span class="Apple-style-span" style="border-collapse: separate; color: rgb(0, 0, 0); font-family: Helvetica; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-border-horizontal-spacing: 0px; -webkit-border-vertical-spacing: 0px; -webkit-text-decorations-in-effect: none; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; font-size: medium; ">Ross Finlayson<br>Live Networks, Inc.<br><a href="http://www.live555.com/">http://www.live555.com/</a></span></span>
</div>
<br></body></html>