UNPKG

ts-nalstream

Version:

Parse NAL units out of MPEG-TS Video Stream Packets

33 lines (32 loc) 1.16 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseNALStream = void 0; function* parseNALUsFromPacket(bytes) { const view = new DataView(bytes.buffer, bytes.byteOffset); const len = bytes.byteLength - 3; let start; let end = 1; do { // Check # of sync bytes (0x000001 or 0x00000001) end += view.getUint16(end + 1) ? 3 : 4; for (start = end; end < len; end++) { // Step forward until we hit another 3- or 4-byte header if (view.getUint16(end) === 0 && (bytes[end + 2] === 1 || (view.getUint16(end + 2) === 1))) { yield bytes.subarray(start, end); break; } } } while (end < len); // A packet can't end with a header, // so one last NAL Unit extends to the end yield bytes.subarray(start); } function* parseNALStream(bytes) { if (bytes instanceof Uint8Array) yield* parseNALUsFromPacket(bytes); else for (const packet of bytes) yield* parseNALUsFromPacket(packet); } exports.parseNALStream = parseNALStream;