Merged in mtsdemuxer-change-2 (pull request #351)

mjpeg-player: mtsdemuxer functionality change

Approved-by: Scott Barnard
This commit is contained in:
Trek Hopton 2020-01-28 06:47:22 +00:00
commit fdd2375808
1 changed files with 19 additions and 33 deletions

View File

@ -1,12 +1,9 @@
/*
NAME
mts-demuxer.js
AUTHOR
Trek Hopton <trek@ausocean.org>
LICENSE
This file is Copyright (C) 2019 the Australian Ocean Lab (AusOcean)
This file is Copyright (C) 2020 the Australian Ocean Lab (AusOcean)
It is free software: you can redistribute it and/or modify them
under the terms of the GNU General Public License as published by the
@ -36,10 +33,6 @@ class MTSDemuxer {
init() {
this.pmtParsed = false;
this._pmtId = -1;
this._videoTrack = MTSDemuxer.createTrack('video');
this._audioTrack = MTSDemuxer.createTrack('audio');
this._id3Track = MTSDemuxer.createTrack('id3');
}
// createTrack creates and returns a track model.
@ -55,15 +48,6 @@ class MTSDemuxer {
};
}
// _getTracks returns this MTSDemuxer's tracks.
_getTracks() {
return {
video: this._videoTrack,
audio: this._audioTrack,
id3: this._id3Track
};
}
// _syncOffset scans the first 'maxScanWindow' bytes and returns an offset to the beginning of the first three MTS packets,
// or -1 if three are not found.
// A TS fragment should contain at least 3 TS packets, a PAT, a PMT, and one PID, each starting with 0x47.
@ -81,20 +65,20 @@ class MTSDemuxer {
return -1;
}
append(data) {
demux(data) {
let start, len = data.length, pusi, pid, afc, offset, pes,
unknownPIDs = false;
let pmtParsed = this.pmtParsed,
videoTrack = this._videoTrack,
audioTrack = this._audioTrack,
id3Track = this._id3Track,
videoId = videoTrack.pid,
audioId = audioTrack.pid,
id3Id = id3Track.pid,
videoTrack = MTSDemuxer.createTrack('video'),
audioTrack = MTSDemuxer.createTrack('audio'),
id3Track = MTSDemuxer.createTrack('id3'),
videoId,
audioId,
id3Id,
pmtId = this._pmtId,
videoData = videoTrack.pesData,
audioData = audioTrack.pesData,
id3Data = id3Track.pesData,
videoData = this.videoPesData,
audioData = this.audioPesData,
id3Data = this.id3PesData,
parsePAT = this._parsePAT,
parsePMT = this._parsePMT,
parsePES = this._parsePES;
@ -209,27 +193,29 @@ class MTSDemuxer {
// Try to parse last PES packets.
if (videoData && (pes = parsePES(videoData)) && pes.pts !== undefined) {
videoTrack.data.push(pes.data);
videoTrack.pesData = null;
this.videoPesData = null;
} else {
// Either pesPkts null or PES truncated, keep it for next frag parsing.
videoTrack.pesData = videoData;
this.videoPesData = videoData;
}
if (audioData && (pes = parsePES(audioData)) && pes.pts !== undefined) {
audioTrack.data.push(pes.data);
audioTrack.pesData = null;
this.audioPesData = null;
} else {
// Either pesPkts null or PES truncated, keep it for next frag parsing.
audioTrack.pesData = audioData;
this.audioPesData = audioData;
}
if (id3Data && (pes = parsePES(id3Data)) && pes.pts !== undefined) {
id3Track.data.push(pes.data);
id3Track.pesData = null;
this.id3PesData = null;
} else {
// Either pesPkts null or PES truncated, keep it for next frag parsing.
id3Track.pesData = id3Data;
this.id3PesData = id3Data;
}
return videoTrack;
}
_parsePAT(data, offset) {