This tests the ability of the SourceBuffer to change trackIds when a single videoTrack with a different trackId is appended.

RUN(video.src = URL.createObjectURL(source))
EVENT(sourceopen)
RUN(source.duration = loader.duration())
RUN(sourceBuffer = source.addSourceBuffer(loader.type()))
RUN(sourceBuffer.appendBuffer(loader.initSegment()))
EVENT(update)
Append a media segment.
RUN(sourceBuffer.appendBuffer(loader.mediaSegment(0)))
EVENT(update)
Get the current buffered range
RUN(initialBufferedEnd = sourceBuffer.buffered.end(0))
Modify an Init Segment to have a different trackID
RUN(modifiedInitSegment = loader.initSegment().slice(0))
RUN(initSegmentView = new DataView(modifiedInitSegment))
EXPECTED (initSegmentView.getInt32(180) == '1') OK
RUN(initSegmentView.setInt32(180, 3))
EXPECTED (initSegmentView.getInt32(693) == '2') OK
RUN(initSegmentView.setInt32(693, 4))
EXPECTED (initSegmentView.getInt32(1109) == '1') OK
RUN(initSegmentView.setInt32(1109, 3))
EXPECTED (initSegmentView.getInt32(1141) == '2') OK
RUN(initSegmentView.setInt32(1141, 4))
Append the modified Init Segment
RUN(sourceBuffer.appendBuffer(modifiedInitSegment))
EVENT(update)
EXPECTED (video.videoTracks[0].id == '3') OK
EXPECTED (video.audioTracks[0].id == '4') OK
Modify a Media Segment to have a different trackID
RUN(modifiedMediaSegment = loader.mediaSegment(0).slice(0))
RUN(mediaSegmentView = new DataView(modifiedMediaSegment))
EXPECTED (mediaSegmentView.getInt32(44) == '1') OK
RUN(mediaSegmentView.setInt32(44, 3))
EXPECTED (mediaSegmentView.getInt32(324) == '2') OK
RUN(mediaSegmentView.setInt32(324, 4))
RUN(sourceBuffer.timestampOffset = sourceBuffer.buffered.end(0))
Append a media segment.
RUN(sourceBuffer.appendBuffer(modifiedMediaSegment))
EVENT(update)
EXPECTED (sourceBuffer.buffered.end(0) > '1') OK
END OF TEST

