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

  1. Add a pipeline entry for the requested codec to the stream-src codecPipeline configuration
  2. Request a codec that is configured (check available keys in codecPipeline)
  3. Ensure GStreamer codec plugins are installed so config generation includes the pipeline for that codec
  4. 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

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


AI-assisted analysis of m1k1o/neko@b0f01cedea (2026-09-01). Data as JSON: /api/errors/43ca6c7469dfdab5. Report an issue: GitHub.