UNPKG

mpegts-demuxer

Version:

Demuxes an MPEG Transport Stream into elementary packets.

99 lines (75 loc) 2.26 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Stream = void 0; function _defineProperty(obj, key, value) { if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } class Stream { constructor() { _defineProperty(this, "program", 0xffff); _defineProperty(this, "id", 0); _defineProperty(this, "type", 0xff); _defineProperty(this, "stream_id", 0); _defineProperty(this, "content_type", 0); _defineProperty(this, "dts", 0); _defineProperty(this, "has_dts", false); _defineProperty(this, "first_pts", 0); _defineProperty(this, "last_pts", 0); _defineProperty(this, "has_pts", false); _defineProperty(this, "frame_ticks", 0); _defineProperty(this, "frame_num", 0); _defineProperty(this, "payload", null); } finalize() { const { payload } = this; if (payload === null) return null; let data = new Uint8Array(); if (payload.buffer.length === 1) { [data] = payload.buffer; } else { data = new Uint8Array(payload.buflen); let offset = 0; payload.buffer.forEach(b => { data.set(b, offset); offset += b.byteLength; }); } return { data, pts: payload.pts, dts: payload.dts, frame_ticks: payload.frame_ticks, program: this.program, stream_number: this.id, stream_id: this.stream_id, type: this.type, content_type: this.content_type, frame_num: this.frame_num }; } write(mem, ptr, len, pstart, copy) { const { payload } = this; let data = new Uint8Array(mem.buffer, mem.byteOffset + ptr, len); if (copy) data = data.slice(); if (pstart || payload === null) { // finalize previously accumulated packet const packet = this.finalize(); // start new packet this.payload = { buffer: [data], buflen: len, pts: this.last_pts, dts: this.dts, frame_ticks: this.frame_ticks }; return packet; } payload.buffer.push(data); payload.buflen += len; return null; } } exports.Stream = Stream;