pion/webrtc · error

not enough data for payload header

Error message

not enough data for payload header

What it means

errShortPageHeader is returned by ParseNextPage when the underlying stream yields fewer bytes than the fixed 27-byte Ogg page header before the segment table. This means the stream ended mid-header or delivered a truncated page.

Source

Thrown at pkg/media/oggreader/oggreader.go:30

	"strings"
)

const (
	pageHeaderTypeBeginningOfStream = 0x02
	pageHeaderSignature             = "OggS"

	idPageBasePayloadLength = 19
	pageHeaderLen           = 27
)

var (
	errNilStream                       = errors.New("stream is nil")
	errBadIDPageSignature              = errors.New("bad header signature")
	errBadOpusTagsSignature            = errors.New("bad opus tags signature")
	errBadIDPageType                   = errors.New("wrong header, expected beginning of stream")
	errBadIDPageLength                 = errors.New("payload for id page must be 19 bytes")
	errBadIDPagePayloadSignature       = errors.New("bad payload signature")
	errShortPageHeader                 = errors.New("not enough data for payload header")
	errChecksumMismatch                = errors.New("expected and actual checksum do not match")
	errUnsupportedChannelMappingFamily = errors.New("unsupported channel mapping family")
)

// OggReader is used to read Ogg files and return page payloads.
type OggReader struct {
	stream               io.Reader
	bytesReadSuccesfully int64
	checksumTable        *[256]uint32
	doChecksum           bool
}

// OggHeader contains Opus codec metadata parsed from an Opus ID page.
// This header is extracted from an Ogg page payload that starts with the OpusHead
// signature (the first page of an Opus stream in an Ogg container).
//
// Use OggPageHeader.OpusPacketType() to classify a page payload as OpusHead,
// and OggPageHeader.ParseOpusHeader() to parse the OpusHead payload.

View on GitHub (pinned to 8c25dc09fa)

Solutions

  1. Treat it as end-of-stream/truncation and stop parsing
  2. Re-download or re-capture the file; check producer finished writing
  3. Inspect the reader source (socket/file) for premature closure
Defensive patterns

Strategy: try-catch

Try / catch

page, payload, err := reader.ParseNextPage()
if errors.Is(err, oggreader.ErrShortPageHeader) {
    // treat as truncated/end-of-stream: stop and finalize
    return nil
}
if err != nil { return err }

Prevention

When it happens

Trigger: ParseNextPage (oggreader.go:281) reads len(header) bytes from the stream and gets n < len(header): end-of-file mid-page or a truncated read.

Common situations: Network stream cut off mid-page, partially downloaded/truncated file, passing a closed or exhausted reader back to ParseNextPage expecting more data.

Related errors


AI-assisted analysis of pion/webrtc@8c25dc09fa (2026-09-03). Data as JSON: /api/errors/bccd00384ffaf72a. Report an issue: GitHub.