media

package
v0.0.20 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Mar 19, 2026 License: Apache-2.0 Imports: 32 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Bridge

type Bridge struct {
	// contains filtered or unexported fields
}

Bridge manages a single video source and fans out RTP packets to multiple consumers (WebRTC peers, RTSP server streams, etc.) via a shared track.

func (*Bridge) AddPeer

func (b *Bridge) AddPeer(offerSDP string) (string, error)

AddPeer creates a new WebRTC PeerConnection, adds the shared video track, performs SDP negotiation, and returns the SDP answer.

func (*Bridge) Codec

func (b *Bridge) Codec() string

Codec returns the codec MIME type (e.g., "video/H264").

func (*Bridge) OffRTP

func (b *Bridge) OffRTP(key string)

OffRTP removes an RTP tap.

func (*Bridge) OnRTP

func (b *Bridge) OnRTP(key string, cb func(*rtp.Packet))

OnRTP registers a callback that receives every RTP packet written to this bridge. Returns a key that can be passed to OffRTP to unregister.

func (*Bridge) PPS

func (b *Bridge) PPS() []byte

PPS returns the last seen H264 PPS NALU (may be nil).

func (*Bridge) SPS

func (b *Bridge) SPS() []byte

SPS returns the last seen H264 SPS NALU (may be nil).

type BridgeManager

type BridgeManager struct {
	// contains filtered or unexported fields
}

BridgeManager is the registry of active bridges keyed by "entityId/cameraIndex".

func NewBridgeManager

func NewBridgeManager() *BridgeManager

func (*BridgeManager) GetOrCreate

func (bm *BridgeManager) GetOrCreate(key, sourceURL string) (*Bridge, error)

GetOrCreate returns an existing bridge or creates a new one. Supports rtsp://, rtsps://, and v4l2:// source URLs.

func (*BridgeManager) SetupWebRTCMux

func (bm *BridgeManager) SetupWebRTCMux(conn net.PacketConn)

SetupWebRTCMux configures a shared WebRTC API that multiplexes all ICE UDP traffic through the given listener. This allows WebRTC to work with a single open port in the firewall.

type EntityLookup

type EntityLookup interface {
	GetHead(id string) *pb.Entity
	// GetSourceURL returns the original source URL for a camera stream
	// before the MediaTransformer rewrote it to a proxy URL.
	GetSourceURL(entityID string, streamIndex int) string
}

EntityLookup provides entity access without importing the engine package.

type Handler

type Handler struct {
	// contains filtered or unexported fields
}

Handler is the HTTP handler for WHEP requests.

func NewHandler

func NewHandler(lookup EntityLookup, bridges *BridgeManager) *Handler

func (*Handler) ServeHTTP

func (h *Handler) ServeHTTP(w http.ResponseWriter, r *http.Request)

type ImageProxyHandler

type ImageProxyHandler struct {
	// contains filtered or unexported fields
}

ImageProxyHandler serves camera images by proxying the entity's image stream URL.

func NewImageProxyHandler

func NewImageProxyHandler(lookup EntityLookup) *ImageProxyHandler

func (*ImageProxyHandler) ServeHTTP

func (h *ImageProxyHandler) ServeHTTP(w http.ResponseWriter, r *http.Request)

type Peer

type Peer struct {
	// contains filtered or unexported fields
}

Peer represents a single WHEP viewer connected to a Bridge.

type RTSPServer

type RTSPServer struct {
	// contains filtered or unexported fields
}

RTSPServer relays camera streams from entities as an RTSP server. Clients connect to rtsp://host:port/media/rtsp/{entityId}/{cameraIndex}. Supports both RTSP sources (direct relay) and HTTP MJPEG sources (fetches MJPEG, packetizes as RTP/JPEG).

func NewRTSPServer

func NewRTSPServer(lookup EntityLookup, bridges *BridgeManager, isRemoteAllowed func() bool) *RTSPServer

NewRTSPServer creates an RTSP relay server. isRemoteAllowed is called on each connection to check if non-loopback access is permitted.

func (*RTSPServer) Close

func (rs *RTSPServer) Close()

Close shuts down the RTSP server.

func (*RTSPServer) OnConnOpen

func (rs *RTSPServer) OnConnOpen(ctx *gortsplib.ServerHandlerOnConnOpenCtx)

OnConnOpen rejects non-loopback connections when remote sharing is disabled.

func (*RTSPServer) OnDescribe

OnDescribe handles DESCRIBE requests.

func (*RTSPServer) OnPlay

OnPlay handles PLAY requests.

func (*RTSPServer) OnSessionClose

func (rs *RTSPServer) OnSessionClose(ctx *gortsplib.ServerHandlerOnSessionCloseCtx)

OnSessionClose handles session disconnection (RTCP timeout, TCP close, TEARDOWN).

func (*RTSPServer) OnSetup

OnSetup handles SETUP requests.

func (*RTSPServer) Start

func (rs *RTSPServer) Start(ln net.Listener) error

Start starts the RTSP server using the provided listener. UDP RTP/RTCP need consecutive even/odd ports. We pick the nearest even port at or above the TCP port.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL