config

package
v0.0.0-...-b128a35 Latest Latest
Warning

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

Go to latest
Published: Jan 19, 2024 License: MIT Imports: 23 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

View Source
var LocalCert []byte
View Source
var LocalKey []byte

Functions

This section is empty.

Types

type Card

type Card struct {
	Type           string         `json:"type"`
	Properties     map[string]any `json:"properties,omitempty"`
	Component      string         `json:"x-component"`
	ComponentProps map[string]any `json:"x-component-props,omitempty"`
	Index          int            `json:"x-index"`
}

type Config

type Config struct {
	Ptr     reflect.Value //指向配置结构体值
	Value   any           //当前值,优先级:动态修改值>环境变量>配置文件>defaultYaml>全局配置>默认值
	Modify  any           //动态修改的值
	Env     any           //环境变量中的值
	File    any           //配置文件中的值
	Global  *Config       //全局配置中的值,指针类型
	Default any           //默认值
	Enum    []struct {
		Label string `json:"label"`
		Value any    `json:"value"`
	}
	// contains filtered or unexported fields
}

func (*Config) Get

func (config *Config) Get(key string) (v *Config)

func (*Config) GetFormily

func (config *Config) GetFormily() (r Object)

func (*Config) GetMap

func (config *Config) GetMap() map[string]any

func (Config) Has

func (config Config) Has(key string) (ok bool)

func (*Config) IsMap

func (config *Config) IsMap() bool

func (*Config) MarshalJSON

func (config *Config) MarshalJSON() ([]byte, error)

func (*Config) Parse

func (config *Config) Parse(s any, prefix ...string)

Parse 第一步读取配置结构体的默认值

func (*Config) ParseDefaultYaml

func (config *Config) ParseDefaultYaml(defaultYaml map[string]any)

ParseDefaultYaml 第三步读取内嵌默认配置

func (*Config) ParseGlobal

func (config *Config) ParseGlobal(g *Config)

ParseDefaultYaml 第二步读取全局配置

func (*Config) ParseModifyFile

func (config *Config) ParseModifyFile(conf map[string]any)

ParseModifyFile 第五步读取动态修改配置文件

func (*Config) ParseUserFile

func (config *Config) ParseUserFile(conf map[string]any)

ParseFile 第四步读取用户配置文件

func (*Config) Range

func (config *Config) Range(f func(key string, value Config))

type Console

type Console struct {
	Server        string `default:"console.monibuca.com:44944" desc:"远程控制台地址"` //远程控制台地址
	Secret        string `desc:"远程控制台密钥"`                                      //远程控制台密钥
	PublicAddr    string `desc:"远程控制台公网地址"`                                    //公网地址,提供远程控制台访问的地址,不配置的话使用自动识别的地址
	PublicAddrTLS string `desc:"远程控制台公网TLS地址"`
}

type Engine

type Engine struct {
	Publish
	Subscribe
	HTTP
	Console
	EnableAVCC          bool          `default:"true" desc:"启用AVCC格式,rtmp、http-flv协议使用"`                 //启用AVCC格式,rtmp、http-flv协议使用
	EnableRTP           bool          `default:"true" desc:"启用RTP格式,rtsp、webrtc等协议使用"`                   //启用RTP格式,rtsp、webrtc等协议使用
	EnableSubEvent      bool          `default:"true" desc:"启用订阅事件,禁用可以提高性能"`                            //启用订阅事件,禁用可以提高性能
	EnableAuth          bool          `default:"true" desc:"启用鉴权"`                                       //启用鉴权
	LogLang             string        `default:"zh" desc:"日志语言" enum:"zh:中文,en:英文"`                      //日志语言
	LogLevel            string        `default:"info" enum:"trace:跟踪,debug:调试,info:信息,warn:警告,error:错误"` //日志级别
	EventBusSize        int           `default:"10" desc:"事件总线大小"`                                       //事件总线大小
	PulseInterval       time.Duration `default:"5s" desc:"心跳事件间隔"`                                       //心跳事件间隔
	DisableAll          bool          `default:"false" desc:"禁用所有插件"`                                    //禁用所有插件
	RTPReorderBufferLen int           `default:"50" desc:"RTP重排序缓冲区长度"`                                  //RTP重排序缓冲区长度
	PoolSize            int           `desc:"内存池大小"`                                                     //内存池大小
	// contains filtered or unexported fields
}
var Global *Engine

func (*Engine) GetEnableReport

func (cfg *Engine) GetEnableReport() bool

func (*Engine) GetInstanceId

func (cfg *Engine) GetInstanceId() string

func (*Engine) InitDefaultHttp

func (cfg *Engine) InitDefaultHttp()

func (*Engine) OnEvent

func (cfg *Engine) OnEvent(event any)

func (*Engine) ReceiveRequest

func (cfg *Engine) ReceiveRequest(s quic.Stream, conn quic.Connection) error

func (*Engine) Remote

func (cfg *Engine) Remote(ctx context.Context) (wasConnected bool, err error)

func (*Engine) WsRemote

func (cfg *Engine) WsRemote()

func (*Engine) WtRemote

func (cfg *Engine) WtRemote(ctx context.Context)

type HTTP

type HTTP struct {
	ListenAddr    string        `desc:"监听地址"`
	ListenAddrTLS string        `desc:"监听地址HTTPS"`
	CertFile      string        `desc:"HTTPS证书文件"`
	KeyFile       string        `desc:"HTTPS密钥文件"`
	CORS          bool          `default:"true" desc:"是否自动添加CORS头"` //是否自动添加CORS头
	UserName      string        `desc:"基本身份认证用户名"`
	Password      string        `desc:"基本身份认证密码"`
	ReadTimeout   time.Duration `desc:"读取超时"`
	WriteTimeout  time.Duration `desc:"写入超时"`
	IdleTimeout   time.Duration `desc:"空闲超时"`
	// contains filtered or unexported fields
}

func (*HTTP) AddMiddleware

func (config *HTTP) AddMiddleware(middleware Middleware)

func (*HTTP) GetHTTPConfig

func (config *HTTP) GetHTTPConfig() *HTTP

func (*HTTP) Handle

func (config *HTTP) Handle(path string, f http.Handler)

func (*HTTP) Handler

func (config *HTTP) Handler(r *http.Request) (h http.Handler, pattern string)

func (*HTTP) Listen

func (config *HTTP) Listen(ctx context.Context) error

ListenAddrs Listen http and https

type HTTPConfig

type HTTPConfig interface {
	GetHTTPConfig() *HTTP
	Listen(ctx context.Context) error
	Handle(string, http.Handler)
	Handler(*http.Request) (http.Handler, string)
	AddMiddleware(Middleware)
}

type HTTPPlugin

type HTTPPlugin interface {
	Plugin
	http.Handler
}

type Middleware

type Middleware func(string, http.Handler) http.Handler

type Object

type Object struct {
	Type       string         `json:"type"`
	Properties map[string]any `json:"properties"`
}

type Plugin

type Plugin interface {
	// 可能的入参类型:FirstConfig 第一次初始化配置,Config 后续配置更新,SE系列(StateEvent)流状态变化事件
	OnEvent(any)
}

type Property

type Property struct {
	Type        string `json:"type"`
	Title       string `json:"title"`
	Description string `json:"description"`
	Enum        []struct {
		Label string `json:"label"`
		Value any    `json:"value"`
	} `json:"enum,omitempty"`
	Items          *Object        `json:"items,omitempty"`
	Properties     map[string]any `json:"properties,omitempty"`
	Default        any            `json:"default,omitempty"`
	Decorator      string         `json:"x-decorator"`
	DecoratorProps map[string]any `json:"x-decorator-props,omitempty"`
	Component      string         `json:"x-component"`
	ComponentProps map[string]any `json:"x-component-props,omitempty"`
	Index          int            `json:"x-index"`
}

type Publish

type Publish struct {
	PubAudio          bool          `default:"true" desc:"是否发布音频"`
	PubVideo          bool          `default:"true" desc:"是否发布视频"`
	InsertSEI         bool          `desc:"是否启用SEI插入"`                        // 是否启用SEI插入
	KickExist         bool          `desc:"是否踢掉已经存在的发布者"`                     // 是否踢掉已经存在的发布者
	PublishTimeout    time.Duration `default:"10s" desc:"发布无数据超时"`            // 发布无数据超时
	WaitCloseTimeout  time.Duration `desc:"延迟自动关闭(等待重连)"`                     // 延迟自动关闭(等待重连)
	DelayCloseTimeout time.Duration `desc:"延迟自动关闭(无订阅时)"`                     // 延迟自动关闭(无订阅时)
	IdleTimeout       time.Duration `desc:"空闲(无订阅)超时"`                        // 空闲(无订阅)超时
	PauseTimeout      time.Duration `default:"30s" desc:"暂停超时时间"`             // 暂停超时
	BufferTime        time.Duration `desc:"缓冲长度(单位:秒),0代表取最近关键帧"`             // 缓冲长度(单位:秒),0代表取最近关键帧
	SpeedLimit        time.Duration `default:"500ms" desc:"速度限制最大等待时间,0则不等待"` //速度限制最大等待时间
	Key               string        `desc:"发布鉴权key"`                          // 发布鉴权key
	SecretArgName     string        `default:"secret" desc:"发布鉴权参数名"`         // 发布鉴权参数名
	ExpireArgName     string        `default:"expire" desc:"发布鉴权失效时间参数名"`     // 发布鉴权失效时间参数名
	RingSize          string        `default:"256-1024" desc:"缓冲范围"`          // 初始缓冲区大小
}

func (Publish) GetPublishConfig

func (c Publish) GetPublishConfig() Publish

type PublishConfig

type PublishConfig interface {
	GetPublishConfig() Publish
}

type Pull

type Pull struct {
	RePull            int               `desc:"断开后自动重试次数,0:不重试,-1:无限重试"` // 断开后自动重拉,0 表示不自动重拉,-1 表示无限重拉,高于0 的数代表最大重拉次数
	EnableRegexp      bool              `desc:"是否启用正则表达式"`               // 是否启用正则表达式
	PullOnStart       map[string]string `desc:"启动时拉流的列表"`                // 启动时拉流的列表
	PullOnSub         map[string]string `desc:"订阅时自动拉流的列表"`              // 订阅时自动拉流的列表
	Proxy             string            `desc:"代理地址"`                    // 代理地址
	PullOnSubLocker   sync.RWMutex      `yaml:"-" json:"-"`
	PullOnStartLocker sync.RWMutex      `yaml:"-" json:"-"`
}

func (*Pull) CheckPullOnStart

func (p *Pull) CheckPullOnStart(streamPath string) string

func (*Pull) CheckPullOnSub

func (p *Pull) CheckPullOnSub(streamPath string) string

func (*Pull) GetPullConfig

func (p *Pull) GetPullConfig() *Pull

type PullConfig

type PullConfig interface {
	GetPullConfig() *Pull
}

type Push

type Push struct {
	EnableRegexp bool              `desc:"是否启用正则表达式"`               // 是否启用正则表达式
	RePush       int               `desc:"断开后自动重试次数,0:不重试,-1:无限重试"` // 断开后自动重推,0 表示不自动重推,-1 表示无限重推,高于0 的数代表最大重推次数
	PushList     map[string]string `desc:"自动推流列表"`                  // 自动推流列表
	Proxy        string            `desc:"代理地址"`                    // 代理地址
}

func (*Push) AddPush

func (p *Push) AddPush(url string, streamPath string)

func (*Push) CheckPush

func (p *Push) CheckPush(streamPath string) string

func (*Push) GetPushConfig

func (p *Push) GetPushConfig() *Push

type PushConfig

type PushConfig interface {
	GetPushConfig() *Push
}

type Quic

type Quic struct {
	ListenAddr string `desc:"监听地址,格式为ip:port,ip 可省略默认监听所有网卡"`
	CertFile   string `desc:"证书文件"`
	KeyFile    string `desc:"私钥文件"`
}

func (*Quic) ListenQuic

func (q *Quic) ListenQuic(ctx context.Context, plugin QuicPlugin) error

type QuicConfig

type QuicConfig interface {
	ListenQuic(context.Context, QuicPlugin) error
}

type QuicPlugin

type QuicPlugin interface {
	Plugin
	ServeQuic(quic.Connection)
}

type Regexp

type Regexp struct {
	*regexp.Regexp
}

func (Regexp) MarshalJSON

func (r Regexp) MarshalJSON() ([]byte, error)

func (Regexp) MarshalYAML

func (r Regexp) MarshalYAML() (interface{}, error)

func (Regexp) String

func (r Regexp) String() string

func (*Regexp) UnmarshalJSON

func (r *Regexp) UnmarshalJSON(b []byte) error

func (*Regexp) UnmarshalYAML

func (r *Regexp) UnmarshalYAML(node *yaml.Node) error

func (*Regexp) Valid

func (r *Regexp) Valid() bool

type Subscribe

type Subscribe struct {
	SubAudio        bool          `default:"true" desc:"是否订阅音频"`
	SubVideo        bool          `default:"true" desc:"是否订阅视频"`
	SubVideoArgName string        `default:"vts" desc:"定订阅的视频轨道参数名"`                     // 指定订阅的视频轨道参数名
	SubAudioArgName string        `default:"ats" desc:"指定订阅的音频轨道参数名"`                    // 指定订阅的音频轨道参数名
	SubDataArgName  string        `default:"dts" desc:"指定订阅的数据轨道参数名"`                    // 指定订阅的数据轨道参数名
	SubModeArgName  string        `desc:"指定订阅的模式参数名"`                                    // 指定订阅的模式参数名
	SubAudioTracks  []string      `desc:"指定订阅的音频轨道"`                                     // 指定订阅的音频轨道
	SubVideoTracks  []string      `desc:"指定订阅的视频轨道"`                                     // 指定订阅的视频轨道
	SubDataTracks   []string      `desc:"指定订阅的数据轨道"`                                     // 指定订阅的数据轨道
	SubMode         int           `desc:"订阅模式" enum:"0:实时模式,1:首屏后不进行追赶,2:从缓冲最大的关键帧开始播放"` // 0,实时模式:追赶发布者进度,在播放首屏后等待发布者的下一个关键帧,然后跳到该帧。1、首屏后不进行追赶。2、从缓冲最大的关键帧开始播放,也不追赶,需要发布者配置缓存长度
	SyncMode        int           `desc:"同步模式" enum:"0:采用时间戳同步,1:采用写入时间同步"`              // 0,采用时间戳同步,1,采用写入时间同步
	IFrameOnly      bool          `desc:"只要关键帧"`                                         // 只要关键帧
	WaitTimeout     time.Duration `default:"10s" desc:"等待流超时时间"`                         // 等待流超时
	WriteBufferSize int           `desc:"写缓冲大小"`                                         // 写缓冲大小
	Key             string        `desc:"订阅鉴权key"`                                       // 订阅鉴权key
	SecretArgName   string        `default:"secret" desc:"订阅鉴权参数名"`                      // 订阅鉴权参数名
	ExpireArgName   string        `default:"expire" desc:"订阅鉴权失效时间参数名"`                  // 订阅鉴权失效时间参数名
	Internal        bool          `default:"false" desc:"是否内部订阅"`                        // 是否内部订阅
}

func (*Subscribe) GetSubscribeConfig

func (c *Subscribe) GetSubscribeConfig() *Subscribe

type SubscribeConfig

type SubscribeConfig interface {
	GetSubscribeConfig() *Subscribe
}

type TCP

type TCP struct {
	ListenAddr    string `desc:"监听地址,格式为ip:port,ip 可省略默认监听所有网卡"`
	ListenAddrTLS string `desc:"监听地址,格式为ip:port,ip 可省略默认监听所有网卡"`
	CertFile      string `desc:"证书文件"`
	KeyFile       string `desc:"私钥文件"`
	ListenNum     int    `desc:"同时并行监听数量,0为CPU核心数量"` //同时并行监听数量,0为CPU核心数量
	NoDelay       bool   `desc:"是否禁用Nagle算法"`        //是否禁用Nagle算法
}

func (*TCP) ListenTCP

func (tcp *TCP) ListenTCP(ctx context.Context, plugin TCPPlugin) error

type TCPConfig

type TCPConfig interface {
	ListenTCP(context.Context, TCPPlugin) error
}

type TCPPlugin

type TCPPlugin interface {
	Plugin
	ServeTCP(net.Conn)
}

Jump to

Keyboard shortcuts

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