models

package
v0.1.10 Latest Latest
Warning

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

Go to latest
Published: Oct 5, 2021 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func GetAllSocialHandles

func GetAllSocialHandles() map[string]SocialHandle

GetAllSocialHandles will return a list of all the social platforms we support.

func GetLatencyConfigs

func GetLatencyConfigs() map[int]LatencyLevel

GetLatencyConfigs will return the available latency level options.

func HasValidEvents

func HasValidEvents(events []EventType) bool

HasValidEvents will verify that all the events provided are valid. This is not a efficient method.

Types

type BaseAPIResponse

type BaseAPIResponse struct {
	Success bool   `json:"success"`
	Message string `json:"message"`
}

BaseAPIResponse is a simple response to API requests.

type Broadcaster

type Broadcaster struct {
	RemoteAddr    string               `json:"remoteAddr"`
	StreamDetails InboundStreamDetails `json:"streamDetails"`
	Time          time.Time            `json:"time"`
}

Broadcaster represents the details around the inbound broadcasting connection.

type Client

type Client struct {
	ConnectedAt  time.Time         `json:"connectedAt"`
	LastSeen     time.Time         `json:"-"`
	MessageCount int               `json:"messageCount"`
	UserAgent    string            `json:"userAgent"`
	IPAddress    string            `json:"ipAddress"`
	Username     *string           `json:"username"`
	ClientID     string            `json:"clientID"`
	Geo          *geoip.GeoDetails `json:"geo"`
}

Client represents a single chat client.

func GenerateClientFromRequest

func GenerateClientFromRequest(req *http.Request) Client

GenerateClientFromRequest will return a chat client from a http request.

type ConnectedClientsResponse

type ConnectedClientsResponse struct {
	Clients []Client `json:"clients"`
}

ConnectedClientsResponse is the response of the currently connected chat clients.

type CurrentBroadcast

type CurrentBroadcast struct {
	OutputSettings []StreamOutputVariant `json:"outputSettings"`
	LatencyLevel   LatencyLevel          `json:"latencyLevel"`
}

CurrentBroadcast represents the configuration associated with the currently active stream.

type CustomEmoji

type CustomEmoji struct {
	Name  string `json:"name"`
	Emoji string `json:"emoji"`
}

CustomEmoji represents an image that can be used in chat as a custom emoji.

type EventType

type EventType = string

EventType is the type of a websocket event.

const (
	// MessageSent is the event sent when a chat event takes place.
	MessageSent EventType = "CHAT"
	// UserJoined is the event sent when a chat user join action takes place.
	UserJoined EventType = "USER_JOINED"
	// UserNameChanged is the event sent when a chat username change takes place.
	UserNameChanged EventType = "NAME_CHANGE"
	// VisibiltyToggled is the event sent when a chat message's visibility changes.
	VisibiltyToggled EventType = "VISIBILITY-UPDATE"
	// PING is a ping message.
	PING EventType = "PING"
	// PONG is a pong message.
	PONG EventType = "PONG"
	// StreamStarted represents a stream started event.
	StreamStarted EventType = "STREAM_STARTED"
	// StreamStopped represents a stream stopped event.
	StreamStopped EventType = "STREAM_STOPPED"
	// SystemMessageSent is the event sent when a system message is sent.
	SystemMessageSent EventType = "SYSTEM"
	// ChatActionSent is a generic chat action that can be used for anything that doesn't need specific handling or formatting.
	ChatActionSent EventType = "CHAT_ACTION"
)

type ExternalAction

type ExternalAction struct {
	// URL is the URL to load.
	URL string `json:"url"`
	// Title is the name of this action, displayed in the modal.
	Title string `json:"title"`
	// Description is the description of this action.
	Description string `json:"description"`
	// Icon is the optional icon for the button associated with this action.
	Icon string `json:"icon"`
	// Color is the optional color for the button associated with this action.
	Color string `json:"color"`
	// OpenExternally states if the action should open a new tab/window instead of an internal modal.
	OpenExternally bool `json:"openExternally"`
}

ExternalAction is a link that will open as a 3rd party action.

type InboundStreamDetails

type InboundStreamDetails struct {
	Width          int     `json:"width"`
	Height         int     `json:"height"`
	VideoFramerate float32 `json:"framerate"`
	VideoBitrate   int     `json:"videoBitrate"`
	VideoCodec     string  `json:"videoCodec"`
	AudioBitrate   int     `json:"audioBitrate"`
	AudioCodec     string  `json:"audioCodec"`
	Encoder        string  `json:"encoder"`
	VideoOnly      bool    `json:"-"`
}

InboundStreamDetails represents an inbound broadcast stream.

type LatencyLevel

type LatencyLevel struct {
	Level             int `json:"level"`
	SecondsPerSegment int `json:"-"`
	SegmentCount      int `json:"-"`
}

LatencyLevel is a representation of HLS configuration values.

func GetLatencyLevel

func GetLatencyLevel(index int) LatencyLevel

GetLatencyLevel will return the latency level at index.

type PingMessage

type PingMessage struct {
	MessageType EventType `json:"type"`
}

PingMessage represents a ping message between the client and server.

type RTMPStreamMetadata

type RTMPStreamMetadata struct {
	Width          int         `json:"width"`
	Height         int         `json:"height"`
	VideoBitrate   float32     `json:"videodatarate"`
	VideoCodec     interface{} `json:"videocodecid"`
	VideoFramerate float32     `json:"framerate"`
	AudioBitrate   float32     `json:"audiodatarate"`
	AudioCodec     interface{} `json:"audiocodecid"`
	Encoder        string      `json:"encoder"`
}

RTMPStreamMetadata is the raw metadata that comes in with a RTMP connection.

type S3

type S3 struct {
	Enabled         bool   `json:"enabled"`
	Endpoint        string `json:"endpoint,omitempty"`
	ServingEndpoint string `json:"servingEndpoint,omitempty"`
	AccessKey       string `json:"accessKey,omitempty"`
	Secret          string `json:"secret,omitempty"`
	Bucket          string `json:"bucket,omitempty"`
	Region          string `json:"region,omitempty"`
	ACL             string `json:"acl,omitempty"`
}

S3 is the storage configuration.

type Segment

type Segment struct {
	VariantIndex       int    // The bitrate variant
	FullDiskPath       string // Where it lives on disk
	RelativeUploadPath string // Path it should have remotely
	RemoteURL          string
}

Segment represents a segment of the live stream.

type SocialHandle

type SocialHandle struct {
	Platform string `yaml:"platform" json:"platform,omitempty"`
	URL      string `yaml:"url" json:"url,omitempty"`
	Icon     string `json:"icon,omitempty"`
}

SocialHandle represents an external link.

func GetSocialHandle

func GetSocialHandle(platform string) *SocialHandle

GetSocialHandle will return the details for a supported platform.

type Stats

type Stats struct {
	SessionMaxViewerCount int             `json:"sessionMaxViewerCount"`
	OverallMaxViewerCount int             `json:"overallMaxViewerCount"`
	LastDisconnectTime    *utils.NullTime `json:"lastDisconnectTime"`

	StreamConnected bool                 `json:"-"`
	LastConnectTime *utils.NullTime      `json:"-"`
	ChatClients     map[string]Client    `json:"-"`
	Viewers         map[string]time.Time `json:"-"`
}

Stats holds the stats for the system.

type Status

type Status struct {
	Online                bool `json:"online"`
	ViewerCount           int  `json:"viewerCount"`
	OverallMaxViewerCount int  `json:"overallMaxViewerCount"`
	SessionMaxViewerCount int  `json:"sessionMaxViewerCount"`

	LastConnectTime    *utils.NullTime `json:"lastConnectTime"`
	LastDisconnectTime *utils.NullTime `json:"lastDisconnectTime"`

	VersionNumber string `json:"versionNumber"`
	StreamTitle   string `json:"streamTitle"`
}

Status represents the status of the system.

type StorageProvider

type StorageProvider interface {
	Setup() error
	Save(filePath string, retryCount int) (string, error)

	SegmentWritten(localFilePath string)
	VariantPlaylistWritten(localFilePath string)
	MasterPlaylistWritten(localFilePath string)
}

StorageProvider is how a chunk storage provider should be implemented.

type StreamOutputVariant

type StreamOutputVariant struct {
	// Name is an optional human-readable label for this stream output.
	Name string `json:"name"`

	// Enable passthrough to copy the video and/or audio directly from the
	// incoming stream and disable any transcoding.  It will ignore any of
	// the below settings.
	IsVideoPassthrough bool `yaml:"videoPassthrough" json:"videoPassthrough"`
	IsAudioPassthrough bool `yaml:"audioPassthrough" json:"audioPassthrough"`

	VideoBitrate int `yaml:"videoBitrate" json:"videoBitrate"`
	AudioBitrate int `yaml:"audioBitrate" json:"audioBitrate"`

	// Set only one of these in order to keep your current aspect ratio.
	// Or set neither to not scale the video.
	ScaledWidth  int `yaml:"scaledWidth" json:"scaledWidth,omitempty"`
	ScaledHeight int `yaml:"scaledHeight" json:"scaledHeight,omitempty"`

	Framerate int `yaml:"framerate" json:"framerate"`
	// CPUUsageLevel represents a codec preset to configure CPU usage.
	CPUUsageLevel int `json:"cpuUsageLevel"`
}

StreamOutputVariant defines the output specifics of a single HLS stream variant.

func (*StreamOutputVariant) GetFramerate

func (q *StreamOutputVariant) GetFramerate() int

GetFramerate returns the framerate or default.

func (*StreamOutputVariant) GetIsAudioPassthrough

func (q *StreamOutputVariant) GetIsAudioPassthrough() bool

GetIsAudioPassthrough will return if this variant audio is passthrough.

func (*StreamOutputVariant) GetName

func (q *StreamOutputVariant) GetName() string

GetName will return the human readable name for this stream output.

func (*StreamOutputVariant) MarshalJSON

func (q *StreamOutputVariant) MarshalJSON() ([]byte, error)

MarshalJSON is a custom JSON marshal function for video stream qualities.

type UserJoinedEvent

type UserJoinedEvent struct {
	Username  string    `json:"username"`
	Type      EventType `json:"type"`
	ID        string    `json:"id"`
	Timestamp time.Time `json:"timestamp,omitempty"`
}

UserJoinedEvent represents an event when a user joins the chat.

type Variant

type Variant struct {
	VariantIndex int
	Segments     map[string]*Segment
}

Variant represents a single video variant and the segments that make it up.

func (*Variant) GetSegmentForFilename

func (v *Variant) GetSegmentForFilename(filename string) *Segment

GetSegmentForFilename gets the segment for the provided filename.

type Webhook

type Webhook struct {
	ID        int         `json:"id"`
	URL       string      `json:"url"`
	Events    []EventType `json:"events"`
	Timestamp time.Time   `json:"timestamp"`
	LastUsed  *time.Time  `json:"lastUsed"`
}

Webhook is an event that is sent to 3rd party, external services with details about something that took place within an Owncast server.

Jump to

Keyboard shortcuts

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