Skip to content

Commit 8e960cf

Browse files
committed
[DashTree] Allow generate segment beyond period boudaries
1 parent 7e8fc3f commit 8e960cf

File tree

2 files changed

+21
-10
lines changed

2 files changed

+21
-10
lines changed

src/parser/DASHTree.cpp

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,6 +1050,8 @@ void adaptive::CDashTree::ParseTagRepresentation(pugi::xml_node nodeRepr,
10501050
else if (repr->HasSegmentEndNr())
10511051
segNumberEnd = repr->GetSegmentEndNr();
10521052

1053+
//const bool isComplete
1054+
10531055
GenerateTemplatedSegments(*segTemplate, periodStartMs, periodDurMs, segNumberEnd,
10541056
repr->Timeline(), nowMs);
10551057
}
@@ -1825,8 +1827,17 @@ void adaptive::CDashTree::GenerateTemplatedSegments(PLAYLIST::CSegmentTemplate&
18251827

18261828
const uint64_t timeEnd = wndEnd * segTimescale / 1000;
18271829

1828-
// Create segments within time window
1829-
while (time + segDuration <= timeEnd && segNumber <= segNumberEnd)
1830+
// Create segments within time window,
1831+
// a segment that begins within the period and partially
1832+
// extends beyond the period boundaries must still be generated
1833+
//! @todo: currently when a segment extends beyond the period boundaries
1834+
//! it will exist also on next period, this will cause duplicate playback of the content (you can see also twice downloads)
1835+
//! in theory this should be fixed in the sample reader, where the sample packets of a segment
1836+
//! (at the beginning or end) must be filtered based on the duration of the period.
1837+
//! In other words, finish playing a segment early by skipping the samples that fall outside the period,
1838+
//! while in the next period, start playing the segment from a sample with a specific PTS,
1839+
//! thus skipping part of the initial samples.
1840+
while (time < timeEnd && segNumber <= segNumberEnd)
18301841
{
18311842
CSegment seg;
18321843
seg.startPTS_ = time;

src/test/TestDASHTree.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -285,7 +285,7 @@ TEST_F(DASHTreeTest, CalculateCorrectSegmentNumbersFromSegmentTemplateWithOldPub
285285

286286
auto& segments = tree->m_periods[0]->GetAdaptationSets()[0]->GetRepresentations()[0]->Timeline();
287287

288-
EXPECT_EQ(segments.GetSize(), 30);
288+
EXPECT_EQ(segments.GetSize(), 31);
289289
EXPECT_EQ(segments.Get(0)->m_number, 603271);
290290
}
291291

@@ -712,16 +712,16 @@ TEST_F(DASHTreeTest, SegmentTemplateStartNumber)
712712

713713
// Verify segments
714714
auto& rep1Timeline = adpSets[0]->GetRepresentations()[0]->Timeline();
715-
EXPECT_EQ(rep1Timeline.GetSize(), 143);
715+
EXPECT_EQ(rep1Timeline.GetSize(), 144);
716716

717717
EXPECT_EQ(rep1Timeline.Get(0)->startPTS_, 0);
718718
EXPECT_EQ(rep1Timeline.Get(0)->m_number, 0);
719719

720720
EXPECT_EQ(rep1Timeline.Get(1)->startPTS_, 48000);
721721
EXPECT_EQ(rep1Timeline.Get(1)->m_number, 1);
722722

723-
EXPECT_EQ(rep1Timeline.Get(142)->startPTS_, 6816000);
724-
EXPECT_EQ(rep1Timeline.Get(142)->m_number, 142);
723+
EXPECT_EQ(rep1Timeline.Get(143)->startPTS_, 6864000);
724+
EXPECT_EQ(rep1Timeline.Get(143)->m_number, 143);
725725
}
726726

727727
TEST_F(DASHTreeTest, TSBMiddlePeriods)
@@ -743,9 +743,9 @@ TEST_F(DASHTreeTest, TSBMiddlePeriods)
743743
auto& tlPeriod2 =
744744
tree->m_periods[1]->GetAdaptationSets()[0]->GetRepresentations()[0]->Timeline();
745745

746-
EXPECT_EQ(tlPeriod2.GetSize(), 2);
746+
EXPECT_EQ(tlPeriod2.GetSize(), 3);
747747
EXPECT_EQ(tlPeriod2.GetFront()->m_number, 856065420);
748-
EXPECT_EQ(tlPeriod2.GetBack()->m_number, 856065421);
748+
EXPECT_EQ(tlPeriod2.GetBack()->m_number, 856065422);
749749
}
750750

751751
TEST_F(DASHTreeTest, TSBMiddlePeriodsPastNowTime)
@@ -778,9 +778,9 @@ TEST_F(DASHTreeTest, TSBAvailabilityStartTime)
778778
auto& tl =
779779
tree->m_periods[0]->GetAdaptationSets()[0]->GetRepresentations()[0]->Timeline();
780780

781-
EXPECT_EQ(tl.GetSize(), 1200);
781+
EXPECT_EQ(tl.GetSize(), 1201);
782782
EXPECT_EQ(tl.GetFront()->m_number, 129069);
783-
EXPECT_EQ(tl.GetBack()->m_number, 130268);
783+
EXPECT_EQ(tl.GetBack()->m_number, 130269);
784784
}
785785

786786
TEST_F(DASHTreeTest, TSBUTCTimingDirect1)

0 commit comments

Comments
 (0)