m1k1o/neko · error
no pipeline found for a codec
Error message
no pipeline found for a codec
What it means
StreamSrcManagerCtx.Start iterates manager.codecPipeline looking for an entry matching the requested codec name. If no pipeline string is registered for that codec, it returns 'no pipeline found for a codec'. The manager only knows how to build pipelines for codecs present in its configuration map.
Source
Thrown at server/internal/capture/streamsrc.go:137
return types.ErrCapturePipelineAlreadyExists
}
if !manager.enabled {
return errors.New("stream-src not enabled")
}
found := false
for codecName, pipeline := range manager.codecPipeline {
if codecName == codec.Name {
manager.pipelineStr = pipeline
manager.codec = codec
found = true
break
}
}
if !found {
return errors.New("no pipeline found for a codec")
}
var err error
manager.logger.Info().
Str("codec", manager.codec.Name).
Str("src", manager.pipelineStr).
Msgf("creating pipeline")
manager.pipeline, err = gst.CreatePipeline(manager.pipelineStr)
if err != nil {
return err
}
manager.pipeline.AttachAppsrc("appsrc")
manager.pipeline.Play()
manager.pipelinesCounter[manager.codec.Name].Inc()View on GitHub (pinned to b0f01cedea)
Solutions
- Add a pipeline entry for the requested codec to the stream-src codecPipeline configuration
- Request a codec that is configured (check available keys in codecPipeline)
- Ensure GStreamer codec plugins are installed so config generation includes the pipeline for that codec
- Normalize codec name casing/spelling between client and config
Example fix
// before
if err := streamSrc.Start(h264Codec); err != nil { return err } // no pipeline for h264
// after
if !streamSrc.SupportsCodec(h264Codec.Name) {
return fmt.Errorf("codec %s unsupported; available: %v", h264Codec.Name, configuredCodecs)
}
if err := streamSrc.Start(h264Codec); err != nil { return err } Defensive patterns
Strategy: validation
Validate before calling
// Ensure the codec has a configured pipeline before calling Start.
var pipelineForCodec bool
for name := range configuredCodecs {
if strings.EqualFold(name, codec.Name) { pipelineForCodec = true; break }
}
if !pipelineForCodec {
return fmt.Errorf("codec %s has no configured pipeline", codec.Name)
}
if err := streamSrc.Start(codec); err != nil { return err } Try / catch
if err := streamSrc.Start(codec); err != nil {
if err.Error() == "no pipeline found for a codec" {
return fmt.Errorf("codec %s unsupported by server config: %w", codec.Name, err)
}
return err
} Prevention
- Mirror the negotiated codec against the codecPipeline config keys before starting
- Normalize codec name casing between client and server config
- Install the GStreamer plugins needed so pipelines exist for all advertised codecs
- Only advertise codecs in SDP negotiation that the stream-src config supports
When it happens
Trigger: Calling Start(codec) with a codec whose name has no corresponding entry in the codecPipeline map — e.g. requesting H264 when only VP8 pipelines are configured, or a codec name mismatch.
Common situations: Client negotiates a codec the server stream-src config doesn't cover; typos/case mismatch in codec names between config and request; deployments stripped of certain codec pipelines (missing GStreamer plugins at install time).
Related errors
- stream-src not enabled
- screencast not enabled
- unable to unmarshal %s plugin settings from global settings:
- unable to unmarshal %s plugin settings from profile: %w
- image data not found
AI-assisted analysis of m1k1o/neko@b0f01cedea (2026-09-01).
Data as JSON: /api/errors/43ca6c7469dfdab5.
Report an issue: GitHub.