<html><head><meta http-equiv="Content-Type" content="text/html charset=iso-8859-1"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div><blockquote type="cite">On Thu, 10 Jan 2013 11:00:43 -0800, Ross Finlayson wrote<br><blockquote type="cite">Instead, try making the following change to <br>"FileSink::afterGettingFrame()" (lines 130-132 of <br>"liveMedia/FileSink.cpp"): Change the order of the calls to    <br> onSourceClosure(this); and    stopPlaying(); so that "stopPlaying()" <br>is called first, before "onSourceClosure(this)".<br><br>Let us know if this works for you.  (If so, I'll make the change in <br>the next release of the software.)<br></blockquote><br>1.<br>Yes and no. It did work on the testReplicator app</blockquote><div><br></div>OK, so I'll make that change (changing the order of the calls to "onSourceClosure(this);" and "stopPlaying();" in "FileSink::afterGettingFrame()") in the next release of the software.</div><div><br></div><div><br></div><div><blockquote type="cite">The main difference - regarding this issue - between our server and the<br>testReplicator app is that, after an error occurs trying to write a video file,<br>we schedule the writing to start again at a later time. We do that by overriding<br>the MediaSink::stopPlaying method in our own FileSink class:<br><br>virtual void stopPlaying() {<br>  MediaSink::stopPlaying();<br><br>  // schedule to restart in 10 secs<br>  envir() << "OurFileSink stopped! Scheduling to restart in 10 secs.\n";<br>  envir().taskScheduler().scheduleDelayedTask(10000000,<br>      (TaskFunc *) OurFileSink::startPlaying, this);<br>}<br></blockquote><div><br></div>No - that's a bad idea.  You shouldn't be redefining a virtual function to do something completely unrelated to what the rest of the code - that calls this virtual function - expects.  (That's why you keep running into trouble :-)</div><div><br></div><div>The right place to be scheduling a new 'playing' task is in your 'after playing' function - i.e., the function that you passed as a parameter when you called "startPlaying()" on your "FileSink" subclass.  That 'after playing' function will get called, automatically, when writes to the file fail (or if the input stream closes) - as a result of the call to "onSourceClosure(this);".  So that's where you should be scheduling your new task.</div><div><br></div><div><br></div><div><blockquote type="cite">I'm attaching the StreamReplicator class with our patches</blockquote><div><br></div>I didn't see any attachment!</div><div><br></div><div><br><blockquote type="cite">2.<br>Also, we needed to change the visibility of the FileSink::continuePlaying()<br>method to protected</blockquote><div><br></div></div>OK, I'll make that change (along with the change to the implementation of "FileSink::afterGettingFrame()" - noted earlier) in the next release of the software.<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>