[vlc-commits] demux: adaptive: set live start position on first buffering

Francois Cartegnie git at videolan.org
Thu Jul 23 19:27:53 CEST 2020


vlc/vlc-3.0 | branch: master | Francois Cartegnie <fcvlcdev at free.fr> | Fri Jul 17 19:51:09 2020 +0200| [a9545722779a76d66ce3401c70f96378c2bd93ac] | committer: Francois Cartegnie

demux: adaptive: set live start position on first buffering

In some cases, the start point does not provide sufficient
buffering and is then rescheduled in the same way.

(cherry picked from commit be0195644722c9f026e0c0a33d8386aeda43bcfc)

> http://git.videolan.org/gitweb.cgi/vlc/vlc-3.0.git/?a=commit;h=a9545722779a76d66ce3401c70f96378c2bd93ac
---

 modules/demux/adaptive/SegmentTracker.cpp | 13 +++++++++++++
 modules/demux/adaptive/SegmentTracker.hpp |  1 +
 modules/demux/adaptive/Streams.cpp        |  2 ++
 3 files changed, 16 insertions(+)

diff --git a/modules/demux/adaptive/SegmentTracker.cpp b/modules/demux/adaptive/SegmentTracker.cpp
index e92c0e08c2..9146c7976f 100644
--- a/modules/demux/adaptive/SegmentTracker.cpp
+++ b/modules/demux/adaptive/SegmentTracker.cpp
@@ -404,6 +404,19 @@ SegmentTracker::Position SegmentTracker::getStartPosition()
     return pos;
 }
 
+bool SegmentTracker::setStartPosition()
+{
+    if(next.isValid())
+        return true;
+
+    Position pos = getStartPosition();
+    if(!pos.isValid())
+        return false;
+
+    next = pos;
+    return true;
+}
+
 mtime_t SegmentTracker::getPlaybackTime(bool b_next) const
 {
     mtime_t time, duration;
diff --git a/modules/demux/adaptive/SegmentTracker.hpp b/modules/demux/adaptive/SegmentTracker.hpp
index 07d8df920b..97f8ae5f2f 100644
--- a/modules/demux/adaptive/SegmentTracker.hpp
+++ b/modules/demux/adaptive/SegmentTracker.hpp
@@ -145,6 +145,7 @@ namespace adaptive
             SegmentChunk* getNextChunk(bool, AbstractConnectionManager *);
             bool setPositionByTime(mtime_t, bool, bool);
             void setPosition(const Position &, bool);
+            bool setStartPosition();
             Position getStartPosition();
             mtime_t getPlaybackTime(bool = false) const; /* Current segment start time if selected */
             bool getMediaPlaybackRange(mtime_t *, mtime_t *, mtime_t *) const;
diff --git a/modules/demux/adaptive/Streams.cpp b/modules/demux/adaptive/Streams.cpp
index 190b8e0e4f..b75312e416 100644
--- a/modules/demux/adaptive/Streams.cpp
+++ b/modules/demux/adaptive/Streams.cpp
@@ -340,6 +340,8 @@ AbstractStream::buffering_status AbstractStream::doBufferize(mtime_t nz_deadline
         return AbstractStream::buffering_suspended;
     }
 
+    segmentTracker->setStartPosition();
+
     /* Reached end of live playlist */
     if(!segmentTracker->bufferingAvailable())
     {



More information about the vlc-commits mailing list