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 AUTHOR
Trek Hopton <trek@ausocean.org> Trek Hopton <trek@ausocean.org>
LICENSE 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 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 under the terms of the GNU General Public License as published by the
@ -36,10 +33,6 @@ class MTSDemuxer {
init() { init() {
this.pmtParsed = false; this.pmtParsed = false;
this._pmtId = -1; 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. // 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, // _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. // 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. // 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; return -1;
} }
append(data) { demux(data) {
let start, len = data.length, pusi, pid, afc, offset, pes, let start, len = data.length, pusi, pid, afc, offset, pes,
unknownPIDs = false; unknownPIDs = false;
let pmtParsed = this.pmtParsed, let pmtParsed = this.pmtParsed,
videoTrack = this._videoTrack, videoTrack = MTSDemuxer.createTrack('video'),
audioTrack = this._audioTrack, audioTrack = MTSDemuxer.createTrack('audio'),
id3Track = this._id3Track, id3Track = MTSDemuxer.createTrack('id3'),
videoId = videoTrack.pid, videoId,
audioId = audioTrack.pid, audioId,
id3Id = id3Track.pid, id3Id,
pmtId = this._pmtId, pmtId = this._pmtId,
videoData = videoTrack.pesData, videoData = this.videoPesData,
audioData = audioTrack.pesData, audioData = this.audioPesData,
id3Data = id3Track.pesData, id3Data = this.id3PesData,
parsePAT = this._parsePAT, parsePAT = this._parsePAT,
parsePMT = this._parsePMT, parsePMT = this._parsePMT,
parsePES = this._parsePES; parsePES = this._parsePES;
@ -209,27 +193,29 @@ class MTSDemuxer {
// Try to parse last PES packets. // Try to parse last PES packets.
if (videoData && (pes = parsePES(videoData)) && pes.pts !== undefined) { if (videoData && (pes = parsePES(videoData)) && pes.pts !== undefined) {
videoTrack.data.push(pes.data); videoTrack.data.push(pes.data);
videoTrack.pesData = null; this.videoPesData = null;
} else { } else {
// Either pesPkts null or PES truncated, keep it for next frag parsing. // 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) { if (audioData && (pes = parsePES(audioData)) && pes.pts !== undefined) {
audioTrack.data.push(pes.data); audioTrack.data.push(pes.data);
audioTrack.pesData = null; this.audioPesData = null;
} else { } else {
// Either pesPkts null or PES truncated, keep it for next frag parsing. // 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) { if (id3Data && (pes = parsePES(id3Data)) && pes.pts !== undefined) {
id3Track.data.push(pes.data); id3Track.data.push(pes.data);
id3Track.pesData = null; this.id3PesData = null;
} else { } else {
// Either pesPkts null or PES truncated, keep it for next frag parsing. // Either pesPkts null or PES truncated, keep it for next frag parsing.
id3Track.pesData = id3Data; this.id3PesData = id3Data;
} }
return videoTrack;
} }
_parsePAT(data, offset) { _parsePAT(data, offset) {