h264-nalu-parser
Version:
A parser for H264 NAL unit streams.
22 lines (21 loc) • 754 B
text/typescript
export default function * (bytes: Uint8Array): Generator<Uint8Array> {
const view = new DataView(bytes.buffer, bytes.byteOffset);
const len = bytes.byteLength - 3;
let start: number;
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);
}