diff options
Diffstat (limited to 'media/libstagefright/httplive')
-rw-r--r-- | media/libstagefright/httplive/LiveSession.cpp | 16 | ||||
-rw-r--r-- | media/libstagefright/httplive/PlaylistFetcher.h | 3 |
2 files changed, 17 insertions, 2 deletions
diff --git a/media/libstagefright/httplive/LiveSession.cpp b/media/libstagefright/httplive/LiveSession.cpp index 04005bd..4369ac3 100644 --- a/media/libstagefright/httplive/LiveSession.cpp +++ b/media/libstagefright/httplive/LiveSession.cpp @@ -145,10 +145,24 @@ status_t LiveSession::dequeueAccessUnit( } } + int32_t targetDuration = 0; + sp<AMessage> meta = packetSource->getLatestEnqueuedMeta(); + if (meta != NULL) { + meta->findInt32("targetDuration", &targetDuration); + } + + int64_t targetDurationUs = targetDuration * 1000000ll; + if (targetDurationUs == 0 || + targetDurationUs > PlaylistFetcher::kMinBufferedDurationUs) { + // Fetchers limit buffering to + // min(3 * targetDuration, kMinBufferedDurationUs) + targetDurationUs = PlaylistFetcher::kMinBufferedDurationUs; + } + if (mBuffering[idx]) { if (mSwitchInProgress || packetSource->isFinished(0) - || packetSource->getEstimatedDurationUs() > 10000000ll) { + || packetSource->getEstimatedDurationUs() > targetDurationUs) { mBuffering[idx] = false; } } diff --git a/media/libstagefright/httplive/PlaylistFetcher.h b/media/libstagefright/httplive/PlaylistFetcher.h index 76cc852..b27881b 100644 --- a/media/libstagefright/httplive/PlaylistFetcher.h +++ b/media/libstagefright/httplive/PlaylistFetcher.h @@ -34,6 +34,8 @@ struct M3UParser; class String8; struct PlaylistFetcher : public AHandler { + static const int64_t kMinBufferedDurationUs; + enum { kWhatStarted, kWhatPaused, @@ -92,7 +94,6 @@ private: kWhatDownloadNext = 'dlnx', }; - static const int64_t kMinBufferedDurationUs; static const int64_t kMaxMonitorDelayUs; static const int32_t kDownloadBlockSize; static const int32_t kNumSkipFrames; |