UNPKG

numquamab

Version:
45 lines (37 loc) 1.37 kB
import { PACKET_SIZE, HEADER_SIZE, SYNC_BYTE, STUFFING_BYTE, } from './ts-packet' export default class SectionPacketizer { static packetize ( section: Buffer, transport_error_indicator: boolean, transport_priority: boolean, pid: number, transport_scrambling_control: number, continuity_counter: number, ): Buffer[] { const result: Buffer[] = []; let begin = 0; while (begin < section.length) { const header = Buffer.from([ SYNC_BYTE, ((transport_error_indicator ? 1 : 0) << 7) | ((begin === 0 ? 1 : 0) << 6) | ((transport_priority ? 1 : 0) << 5) | ((pid & 0x1F00) >> 8), (pid & 0x00FF), (transport_scrambling_control << 6) | (1 << 4) | (continuity_counter & 0x0F), ]); continuity_counter = (continuity_counter + 1) & 0x0F; const next = Math.min(section.length, begin + ((PACKET_SIZE - HEADER_SIZE) - (begin === 0 ? 1 : 0))); let payload = section.slice(begin, next); if (begin === 0) { payload = Buffer.concat([Buffer.alloc(1), payload]); } const fillStuffingSize = Math.max(0, PACKET_SIZE - (HEADER_SIZE + payload.length)) payload = Buffer.concat([payload, Buffer.alloc(fillStuffingSize, STUFFING_BYTE)]); const packet = Buffer.concat([header, payload]); result.push(packet) begin = next; } return result; } }