summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libmpdemux/demux_rtp.cpp12
1 files changed, 12 insertions, 0 deletions
diff --git a/libmpdemux/demux_rtp.cpp b/libmpdemux/demux_rtp.cpp
index 94ec561784..bb12ebef0c 100644
--- a/libmpdemux/demux_rtp.cpp
+++ b/libmpdemux/demux_rtp.cpp
@@ -448,6 +448,10 @@ static demux_packet_t* getBuffer(demuxer_t* demuxer, demux_stream_t* ds,
RTPState* rtpState = (RTPState*)(demuxer->priv);
ReadBufferQueue* bufferQueue = NULL;
int headersize = 0;
+ TaskToken task;
+
+ if (demuxer->stream->eof) return NULL;
+
if (ds == demuxer->video) {
bufferQueue = rtpState->videoBufferQueue;
if (((sh_video_t*)ds->sh)->format == mmioFOURCC('H','2','6','4'))
@@ -500,7 +504,15 @@ static demux_packet_t* getBuffer(demuxer_t* demuxer, demux_stream_t* ds,
// Block ourselves until data becomes available:
TaskScheduler& scheduler
= bufferQueue->readSource()->envir().taskScheduler();
+ int delay = bufferQueue->prevPacketPTS * 1.05 >
+ rtpState->mediaSession->playEndTime() ? 1000000 : 10000000;
+ task = scheduler.scheduleDelayedTask(delay, onSourceClosure, bufferQueue);
scheduler.doEventLoop(&bufferQueue->blockingFlag);
+ scheduler.unscheduleDelayedTask(task);
+ if (demuxer->stream->eof) {
+ free_demux_packet(dp);
+ return NULL;
+ }
if (headersize == 1) // amr
dp->buffer[0] =