Bug 1060704 - Save MP4 init segment for later; r=kinetik

This commit is contained in:
Anthony Jones 2014-09-01 20:45:48 +12:00
parent d8db640996
commit 521d1bcd79
3 changed files with 14 additions and 0 deletions

View File

@ -197,6 +197,16 @@ public:
byteRanges.AppendElement(MediaByteRange(0, aLength));
parser.RebuildFragmentedIndex(byteRanges);
if (IsInitSegmentPresent(aData, aLength)) {
const MediaByteRange& range = parser.mInitRange;
MSE_DEBUG("MP4ContainerParser(%p)::ParseStartAndEndTimestamps: Stashed init of %u bytes.",
this, range.mEnd - range.mStart);
mInitData.ReplaceElementsAt(0, mInitData.Length(),
aData + range.mStart,
range.mEnd - range.mStart);
}
// Persist the timescale for when it is absent in later chunks
mTimescale = parser.mMdhd.mTimescale;
@ -208,6 +218,8 @@ public:
}
aStart = static_cast<double>(compositionRange.start) / USECS_PER_S;
aEnd = static_cast<double>(compositionRange.end) / USECS_PER_S;
MSE_DEBUG("MP4ContainerParser(%p)::ParseStartAndEndTimestamps: [%f, %f]",
this, aStart, aEnd);
return true;
}

View File

@ -19,6 +19,7 @@ MoofParser::RebuildFragmentedIndex(const nsTArray<MediaByteRange>& aByteRanges)
Box box(&context, mOffset);
for (; box.IsAvailable(); box = box.Next()) {
if (box.IsType("moov")) {
mInitRange = MediaByteRange(0, box.Range().mEnd);
ParseMoov(box);
} else if (box.IsType("moof")) {
Moof moof(box, mTrex, mMdhd);

View File

@ -138,6 +138,7 @@ public:
void ParseMdia(Box& aBox, Tkhd& aTkhd);
void ParseMvex(Box& aBox);
mozilla::MediaByteRange mInitRange;
nsRefPtr<Stream> mSource;
uint64_t mOffset;
nsTArray<uint64_t> mMoofOffsets;