mirror of https://bitbucket.org/ausocean/av.git
Merged in mtsdemuxer-change-2 (pull request #351)
mjpeg-player: mtsdemuxer functionality change Approved-by: Scott Barnard
This commit is contained in:
commit
fdd2375808
|
@ -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) {
|
||||
|
|
Loading…
Reference in New Issue