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
- Treat it as end-of-stream/truncation and stop parsing
- Re-download or re-capture the file; check producer finished writing
- 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
- Detect EOF vs truncation in your stream plumbing before feeding the reader
- Check file size/completeness after downloads
- Keep readers and producers on the same connection lifetime
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.