{"record":{"id":"f8d4bd5939c81b95","repo":"remotion-dev/remotion","slug":"unsupported-avcc-version-confversion-f8d4bd","errorCode":null,"errorMessage":"Unsupported AVCC version ${confVersion}","messagePattern":"Unsupported AVCC version (.+?)","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/media-parser/src/containers/iso-base-media/stsd/vpcc.ts","lineNumber":41,"sourceCode":"\tprofile: number;\n\tlevel: number;\n\tbitDepth: number;\n}) => {\n\treturn `${String(profile).padStart(2, '0')}.${String(level).padStart(2, '0')}.${String(bitDepth).padStart(2, '0')}`;\n};\n\nexport const parseVpcc = ({\n\tdata,\n\tsize,\n}: {\n\tdata: BufferIterator;\n\tsize: number;\n}): VpccBox => {\n\tconst box = data.startBox(size - 8);\n\n\tconst confVersion = data.getUint8();\n\tif (confVersion !== 1) {\n\t\tthrow new Error(`Unsupported AVCC version ${confVersion}`);\n\t}\n\n\tdata.discard(3); // flags\n\n\tconst profile = data.getUint8();\n\tconst level = data.getUint8();\n\tdata.startReadingBits();\n\tconst bitDepth = data.getBits(4);\n\tconst chromaSubsampling = data.getBits(3);\n\tconst videoFullRangeFlag = data.getBits(1);\n\tconst videoColorPrimaries = data.getBits(8);\n\tconst videoTransferCharacteristics = data.getBits(8);\n\tconst videoMatrixCoefficients = data.getBits(8);\n\tdata.stopReadingBits();\n\n\tconst codecInitializationDataSize = data.getUint16();\n\tconst codecInitializationData = data.getSlice(codecInitializationDataSize);\n","sourceCodeStart":23,"sourceCodeEnd":59,"githubUrl":"https://github.com/remotion-dev/remotion/blob/78fe4bb3fdb5a2cd68724393d63cb223db333fa7/packages/media-parser/src/containers/iso-base-media/stsd/vpcc.ts#L23-L59","documentation":"The VPCC (VP Codec Configuration) box parser only supports configuration version 1; any other version throws. Note the message says 'AVCC version' (copy-paste from an AVC parser) but the box is VPCC for VP8/VP9/AV1 codec configuration. The ISOBMFF VPCodecConfigurationBox spec currently defines version 1 only.","triggerScenarios":"parseVpcc reads a configurationVersion byte != 1 inside a vpcc box. Genuinely rare — could indicate a future spec revision, a corrupt box, or a non-VP file misidentified as VP.","commonSituations":"WebM-derived MP4 files with VP9/AV1, files produced by experimental encoders, or cursor desync from an earlier sample-entry mis-parse.","solutions":["Confirm the codec with `ffprobe -show_streams input.mp4` — verify it is actually VP8/VP9/AV1.","Re-mux: `ffmpeg -i input.mp4 -c copy remuxed.mp4` to normalize the vpcc box.","If the file genuinely uses a newer vpcc version, report upstream for spec support.","Transcode to H.264/AAC if VP codec support is not required: `ffmpeg -i input.mp4 -c:v libx264 out.mp4`."],"exampleFix":"// before: vpcc with configurationVersion != 1\nffmpeg -i input.mp4 -c:v libx264 -c:a aac h264_version.mp4\n// after: no vpcc box, parser proceeds with avcC","handlingStrategy":"validation","validationCode":"// Check the codec is VP-family before parsing; confirm vpcc version\n// ffprobe -show_entries stream=codec_name -select_streams v input.mp4\nfunction isValidVpccVersion(v: number): boolean {\n  return v === 1;\n}","typeGuard":"function isVpccVersionOne(v: number): v is 1 {\n  return v === 1;\n}","tryCatchPattern":"try {\n  await parseMedia({src, fields: {dimensions: true}});\n} catch (err) {\n  if (err instanceof Error && err.message.startsWith('Unsupported AVCC version') && /* vpcc context */) {\n    // message says AVCC but box is VPCC; transcode to H.264 or re-mux\n  } else throw err;\n}","preventionTips":["Transcode VP8/VP9/AV1 files to H.264 if VP support is not required.","Be aware the error message says 'AVCC' but the box is VPCC — disambiguate by context.","Validate VP-family files with mp4dump before parsing."],"tags":["media-parser","isobmff","vpcc-box","vp9","wrong-message","mp4"],"backgroundTag":null,"analyzedSha":"78fe4bb3fdb5a2cd68724393d63cb223db333fa7","analyzedAt":"2026-08-12T17:18:50.444Z","schemaVersion":2},"datasetVersion":"2026-08-12T18:17:37.767Z"}