[Live-devel] StreamReplicator with FileSink problem
Ross Finlayson
finlayson at live555.com
Tue Jan 22 10:08:49 PST 2013
> On Thu, 10 Jan 2013 11:00:43 -0800, Ross Finlayson wrote
>> Instead, try making the following change to
>> "FileSink::afterGettingFrame()" (lines 130-132 of
>> "liveMedia/FileSink.cpp"): Change the order of the calls to
>> onSourceClosure(this); and stopPlaying(); so that "stopPlaying()"
>> is called first, before "onSourceClosure(this)".
>>
>> Let us know if this works for you. (If so, I'll make the change in
>> the next release of the software.)
>
> 1.
> Yes and no. It did work on the testReplicator app
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.
> The main difference - regarding this issue - between our server and the
> testReplicator app is that, after an error occurs trying to write a video file,
> we schedule the writing to start again at a later time. We do that by overriding
> the MediaSink::stopPlaying method in our own FileSink class:
>
> virtual void stopPlaying() {
> MediaSink::stopPlaying();
>
> // schedule to restart in 10 secs
> envir() << "OurFileSink stopped! Scheduling to restart in 10 secs.\n";
> envir().taskScheduler().scheduleDelayedTask(10000000,
> (TaskFunc *) OurFileSink::startPlaying, this);
> }
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 :-)
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.
> I'm attaching the StreamReplicator class with our patches
I didn't see any attachment!
> 2.
> Also, we needed to change the visibility of the FileSink::continuePlaying()
> method to protected
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.
Ross Finlayson
Live Networks, Inc.
http://www.live555.com/
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.live555.com/pipermail/live-devel/attachments/20130122/c3e9b840/attachment.html>
More information about the live-devel
mailing list