Skip to content

Track Types

Package track defines types for media tracks.

Track

Represents a media stream published by a participant.

type Track struct {
    // ID is the unique track identifier.
    ID string

    // Kind is the track type.
    Kind TrackKind

    // ParticipantID is who published this track.
    ParticipantID string

    // Name is an optional track name.
    Name string

    // Muted indicates if the track is muted.
    Muted bool

    // Metadata is arbitrary key-value data.
    Metadata map[string]string
}

TrackKind

type TrackKind string

const (
    // KindAudio is a microphone or synthesized audio track.
    KindAudio TrackKind = "audio"

    // KindVideo is a camera track.
    KindVideo TrackKind = "video"

    // KindScreenShare is a screen sharing track.
    KindScreenShare TrackKind = "screenshare"

    // KindData is a data channel track.
    KindData TrackKind = "data"
)

SubscribeOptions

Options for subscribing to a track.

type SubscribeOptions struct {
    // Quality specifies the desired quality.
    Quality TrackQuality

    // Adaptive enables adaptive quality.
    Adaptive bool
}

TrackQuality

type TrackQuality string

const (
    QualityLow    TrackQuality = "low"
    QualityMedium TrackQuality = "medium"
    QualityHigh   TrackQuality = "high"
)

Example Usage

import "github.com/plexusone/omnimeet-core/track"

// Handle track published event
agent.OnTrackPublished(func(p participant.Participant, t track.Track) {
    log.Printf("%s published %s track", p.Name, t.Kind)

    switch t.Kind {
    case track.KindAudio:
        // Subscribe to audio
        agent.SubscribeToTrack(ctx, t.ID, track.SubscribeOptions{})

    case track.KindVideo:
        // Subscribe to video with quality preference
        agent.SubscribeToTrack(ctx, t.ID, track.SubscribeOptions{
            Quality:  track.QualityMedium,
            Adaptive: true,
        })

    case track.KindScreenShare:
        // Handle screen share
    }
})

// Check if track is muted
for _, t := range participant.Tracks {
    if t.Kind == track.KindAudio && t.Muted {
        log.Printf("%s has muted audio", participant.Name)
    }
}