This tests that audio samples outside the appendWindow's interval are properly ignored.

RUN(video.src = URL.createObjectURL(source))
EVENT(sourceopen)
RUN(sourceBuffer = source.addSourceBuffer(loader.type()))
RUN(sourceBuffer.appendBuffer(loader.initSegment()))
EVENT(update)
RUN(sourceBuffer.timestampOffset = -(framesToBeDroppedBeginning * framesInAACPacket) / sampleRate)
Append a media segment negative offset.
RUN(sourceBuffer.appendBuffer(loader.mediaSegment(0)))
EVENT(update)
EXPECTED (sourceBuffer.buffered.length == '1') OK
EXPECTED (sourceBuffer.buffered.start(0) == '0') OK
EXPECTED (sourceBuffer.buffered.end(0) == '0.896') OK
RUN(sourceBuffer.remove(0, Infinity))
EVENT(update)
RUN(sourceBuffer.timestampOffset = 0)
RUN(sourceBuffer.appendWindowStart = 0)
RUN(sourceBuffer.appendWindowEnd = Infinity)
RUN(sourceBuffer.appendWindowStart = (framesToBeDroppedBeginning * framesInAACPacket) / sampleRate)
Append a media segment with appendWindowStart set.
RUN(sourceBuffer.appendBuffer(loader.mediaSegment(0)))
EVENT(update)
EXPECTED (sourceBuffer.buffered.length == '1') OK
EXPECTED (sourceBuffer.buffered.start(0) == '0.10666666666666667') OK
EXPECTED (sourceBuffer.buffered.end(0) == '1.0026666666666666') OK
RUN(sourceBuffer.remove(0, Infinity))
EVENT(update)
RUN(sourceBuffer.timestampOffset = 0)
RUN(sourceBuffer.appendWindowStart = 0)
RUN(sourceBuffer.appendWindowEnd = Infinity)
RUN(sourceBuffer.appendWindowEnd = ((totalFramesInSegment - framesToBeDroppedEnd) * framesInAACPacket) / sampleRate)
Append a media segment with appendWindowEnd set.
RUN(sourceBuffer.appendBuffer(loader.mediaSegment(0)))
EVENT(update)
EXPECTED (sourceBuffer.buffered.length == '1') OK
EXPECTED (sourceBuffer.buffered.start(0) == '0') OK
EXPECTED (sourceBuffer.buffered.end(0) == '0.896') OK
END OF TEST

