capsule AI-native Unix-like composition layer

src/server/internal/mediapeer/mediapeer.go

1,280 bytes · 40 lines · capsule://quake0day/[email protected] raw on github

// Package mediapeer defines the common interface for media transport backends.
// Both LiveKit Bot and DirectPeer (pion/webrtc P2P) implement this interface,
// allowing the orchestrator to be transport-agnostic.
package mediapeer

import (
	"context"
	"time"
)

// MediaPeer is the common interface for media transport backends.
type MediaPeer interface {
	// Connect establishes the media connection.
	Connect(ctx context.Context) error

	// StartAVPipeline launches encode and publish goroutines.
	StartAVPipeline(ctx context.Context)

	// SendAVSegment enqueues a raw AV segment for encode+publish.
	SendAVSegment(seg *RawAVSegment) error

	// AdvancePlaybackEpoch invalidates any older queued or in-flight AV segments.
	AdvancePlaybackEpoch(epoch uint64)

	// WaitAVDrain blocks until all queued segments are published.
	WaitAVDrain(timeout time.Duration)

	// StopAVPipeline shuts down the AV pipeline goroutines.
	StopAVPipeline()

	// PublishAudioFrame publishes raw PCM audio (for TTS in standard pipeline).
	PublishAudioFrame(pcm []byte, sampleRate int) error

	// SubscribeUserAudio returns a channel receiving decoded PCM from the user's mic.
	SubscribeUserAudio() <-chan []byte

	// Disconnect tears down the connection and releases resources.
	Disconnect() error
}