{"record":{"id":"97f71d99188b6417","repo":"remotion-dev/remotion","slug":"expected-av1-private-data-to-be-version-1-got-v","errorCode":null,"errorMessage":"Expected av1 private data to be version 1, got ${version}","messagePattern":"Expected av1 private data to be version 1, got (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/media-parser/src/containers/webm/av1-codec-private.ts","lineNumber":22,"sourceCode":"export const parseAv1PrivateData = (\n\tdata: Uint8Array,\n\tcolrAtom: ColorParameterBox | null,\n) => {\n\tconst iterator = getArrayBufferIterator({\n\t\tinitialData: data,\n\t\tmaxBytes: data.byteLength,\n\t\tlogLevel: 'error',\n\t});\n\titerator.startReadingBits();\n\tif (iterator.getBits(1) !== 1) {\n\t\titerator.destroy();\n\t\tthrow new Error('Expected av1 private data to be version 1');\n\t}\n\n\tconst version = iterator.getBits(7);\n\tif (version !== 1) {\n\t\titerator.destroy();\n\t\tthrow new Error(\n\t\t\t`Expected av1 private data to be version 1, got ${version}`,\n\t\t);\n\t}\n\n\tlet str = 'av01.';\n\n\t// https://aomediacodec.github.io/av1-isobmff/#codecsparam\n\n\tconst seqProfile = iterator.getBits(3);\n\t// Profile\n\tstr += seqProfile;\n\tstr += '.';\n\n\tconst seq_level_idx = iterator.getBits(5);\n\tconst seq_tier_0 = iterator.getBits(1);\n\t// Level\n\t// The level parameter value SHALL equal the first level value indicated by seq_level_idx in the Sequence Header OBU\n\tstr += String(seq_level_idx).padStart(2, '0');","sourceCodeStart":4,"sourceCodeEnd":40,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/media-parser/src/containers/webm/av1-codec-private.ts#L4-L40","documentation":"After the leading marker bit, parseAv1PrivateData reads the next 7 bits as the AV1 codec-private version, which the spec fixes at 1. Any other version is rejected. The thrown value is the parsed version so you can see what was found.","triggerScenarios":"An AV1 track whose CodecPrivate version field (bits 1-7) is not 1: a future/draft codec-private version, a corrupted header, or a non-conformant muxer.","commonSituations":"Newer AV1 packaging draft; corrupted bytes; older or non-standard muxers.","solutions":["Re-mux with a current ffmpeg/av1 toolchain.","Validate headers with ffprobe.","Use Mediabunny; try/catch fallback."],"exampleFix":"# re-mux with current ffmpeg\nffmpeg -i in.webm -c copy out.webm\n\nawait parseMedia({ src: 'out.webm' });","handlingStrategy":"try-catch","validationCode":"// ffprobe validates AV1 codec-private headers\n// ffprobe -v error -show_streams in.mkv","typeGuard":null,"tryCatchPattern":"try {\n  await parseMedia({ src: 'in.mkv' });\n} catch (err) {\n  if (err instanceof Error && /av1 private data to be version/i.test(err.message)) {\n    // re-mux with current toolchain\n  } else throw err;\n}","preventionTips":["Keep your muxer/ffmpeg current for AV1 packaging.","Probe files before parsing.","Use Mediabunny."],"tags":["webm","matroska","media-parser","av1","corrupt-file","codec"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}