remotion-dev/remotion · error · Error
Invalid ADTS header - too short
Error message
Invalid ADTS header - too short
What it means
Thrown by handle-aac-packet.ts when readAdtsHeader() returns null. readAdtsHeader returns null only when buffer.byteLength < 9 (the minimum ADTS header size), so this throw means the AAC packet buffer was too short to even attempt a header parse.
Source
Thrown at packages/media-parser/src/containers/transport-stream/handle-aac-packet.ts:38
offset,
sampleCallbacks,
logLevel,
onAudioTrack,
transportStream,
makeSamplesStartAtZero,
}: {
streamBuffer: TransportStreamPacketBuffer;
programId: number;
offset: number;
sampleCallbacks: CallbacksState;
logLevel: MediaParserLogLevel;
onAudioTrack: MediaParserOnAudioTrack | null;
transportStream: TransportStreamState;
makeSamplesStartAtZero: boolean;
}) => {
const adtsHeader = readAdtsHeader(streamBuffer.getBuffer());
if (!adtsHeader) {
throw new Error('Invalid ADTS header - too short');
}
const {channelConfiguration, codecPrivate, sampleRate, audioObjectType} =
adtsHeader;
const isTrackRegistered = sampleCallbacks.tracks.getTracks().find((t) => {
return t.trackId === programId;
});
if (!isTrackRegistered) {
const startOffset = makeSamplesStartAtZero
? Math.min(
streamBuffer.pesHeader.pts,
streamBuffer.pesHeader.dts ?? Infinity,
)
: 0;
transportStream.startOffset.setOffset({
trackId: programId,View on GitHub (pinned to 78fe4bb3fd)
Solutions
- Ensure the full TS packet (188 bytes) and complete PES payload are buffered before invoking the AAC handler.
- Re-mux or re-encode the TS: ffmpeg -i in.ts -c copy out.ts or ffmpeg -i in.ts -c:a aac out.ts.
- Add a length pre-check (>= 9 bytes) and skip short packets instead of throwing.
Example fix
// before
const adtsHeader = readAdtsHeader(streamBuffer.getBuffer());
if (!adtsHeader) throw new Error('Invalid ADTS header - too short');
// after: skip short buffers gracefully
if (streamBuffer.getBuffer().byteLength < 9) return null; // wait for / skip Defensive patterns
Strategy: validation
Validate before calling
// Require at least 9 bytes (minimum ADTS header) before invoking the AAC handler.
const ADTS_MIN_LEN = 9;
if (streamBuffer.getBuffer().byteLength < ADTS_MIN_LEN) {
// wait for more data / skip the short packet
return null;
} Type guard
function isLongEnoughForAdts(buf: Uint8Array): boolean {
return buf.byteLength >= 9;
} Try / catch
try {
const hdr = readAdtsHeader(streamBuffer.getBuffer());
if (!hdr) throw new Error('Invalid ADTS header - too short');
} catch (err) {
if (err instanceof Error && err.message === 'Invalid ADTS header - too short') {
// buffer short: wait for full PES / skip packet
} else throw err;
} Prevention
- Buffer the full TS packet and complete PES payload before invoking the AAC handler.
- Skip packets shorter than 9 bytes instead of throwing.
- Re-mux fragmented TS with ffmpeg before parsing.
When it happens
Trigger: An AAC PES payload shorter than 9 bytes fed to handleAacPacket — e.g. a truncated TS packet, a fragmented PES that has not been reassembled, or a misrouted non-AAC packet.
Common situations: Truncated network reads of TS; partial PES reassembly; corrupt TS where the payload length is wrong; very short padding packets routed as AAC.
Related errors
- Invalid ADTS header
- Only supporting MPEG-4 for .ts
- Only supporting layer 0 for .ts
- Expected length is null
- Expected length is greater than stream buffer length
AI-assisted analysis of remotion-dev/remotion@78fe4bb3fd (2026-08-12).
Data as JSON: /api/errors/7cc2b1319ef4dbb5.
Report an issue: GitHub.