logic

package
v0.19.0 Latest Latest
Warning

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

Go to latest
Published: Jan 24, 2021 License: MIT Imports: 28 Imported by: 7

Documentation

Index

Constants

View Source
const ConfigVersion = "0.0.1"

Variables

View Source
var ErrLogic = errors.New("lal.logic: fxxk")

Functions

func Dispose added in v0.15.0

func Dispose()

func Entry added in v0.10.0

func Entry(confFile string)

Types

type Config

type Config struct {
	RTMPConfig      RTMPConfig      `json:"rtmp"`
	HTTPFLVConfig   HTTPFLVConfig   `json:"httpflv"`
	HLSConfig       HLSConfig       `json:"hls"`
	HTTPTSConfig    HTTPTSConfig    `json:"httpts"`
	RTSPConfig      RTSPConfig      `json:"rtsp"`
	RelayPushConfig RelayPushConfig `json:"relay_push"`
	RelayPullConfig RelayPullConfig `json:"relay_pull"`

	HTTPAPIConfig    HTTPAPIConfig    `json:"http_api"`
	ServerID         string           `json:"server_id"`
	HTTPNotifyConfig HTTPNotifyConfig `json:"http_notify"`
	PProfConfig      PProfConfig      `json:"pprof"`
	LogConfig        nazalog.Option   `json:"log"`
}

func LoadConf

func LoadConf(confFile string) (*Config, error)

type GOP added in v0.8.0

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

func (*GOP) Clear added in v0.10.0

func (g *GOP) Clear()

func (*GOP) Feed added in v0.8.0

func (g *GOP) Feed(msg base.RTMPMsg, b []byte)

type GOPCache added in v0.7.0

type GOPCache struct {
	Metadata       []byte
	VideoSeqHeader []byte
	AACSeqHeader   []byte
	// contains filtered or unexported fields
}

func NewGOPCache added in v0.10.0

func NewGOPCache(t string, uniqueKey string, gopNum int) *GOPCache

func (*GOPCache) Clear added in v0.8.0

func (gc *GOPCache) Clear()

func (*GOPCache) Feed added in v0.7.0

func (gc *GOPCache) Feed(msg base.RTMPMsg, lg LazyGet)

func (*GOPCache) GetGOPCount added in v0.10.0

func (gc *GOPCache) GetGOPCount() int

func (*GOPCache) GetGOPDataAt added in v0.10.0

func (gc *GOPCache) GetGOPDataAt(pos int) [][]byte

type Group

type Group struct {
	UniqueKey string // const after init
	// contains filtered or unexported fields
}

func NewGroup

func NewGroup(appName string, streamName string, pullEnable bool, pullURL string) *Group

func (*Group) AddHTTPFLVSubSession added in v0.4.0

func (group *Group) AddHTTPFLVSubSession(session *httpflv.SubSession)

func (*Group) AddHTTPTSSubSession added in v0.15.0

func (group *Group) AddHTTPTSSubSession(session *httpts.SubSession)

TODO chef:

这里应该也要考虑触发hls muxer开启
也即HTTPTS sub需要使用hls muxer,hls muxer开启和关闭都要考虑HTTPTS sub

func (*Group) AddRTMPPubSession

func (group *Group) AddRTMPPubSession(session *rtmp.ServerSession) bool

func (*Group) AddRTMPPullSession added in v0.12.0

func (group *Group) AddRTMPPullSession(session *rtmp.PullSession) bool

func (*Group) AddRTMPPushSession added in v0.12.0

func (group *Group) AddRTMPPushSession(url string, session *rtmp.PushSession)

func (*Group) AddRTMPSubSession

func (group *Group) AddRTMPSubSession(session *rtmp.ServerSession)

func (*Group) AddRTSPPubSession added in v0.14.0

func (group *Group) AddRTSPPubSession(session *rtsp.PubSession) bool

TODO chef: rtsp package中,增加回调返回值判断,如果是false,将连接关掉

func (*Group) DelHTTPFLVSubSession added in v0.4.0

func (group *Group) DelHTTPFLVSubSession(session *httpflv.SubSession)

func (*Group) DelHTTPTSSubSession added in v0.15.0

func (group *Group) DelHTTPTSSubSession(session *httpts.SubSession)

func (*Group) DelRTMPPubSession

func (group *Group) DelRTMPPubSession(session *rtmp.ServerSession)

func (*Group) DelRTMPPullSession added in v0.12.0

func (group *Group) DelRTMPPullSession(session *rtmp.PullSession)

func (*Group) DelRTMPPushSession added in v0.12.0

func (group *Group) DelRTMPPushSession(url string, session *rtmp.PushSession)

func (*Group) DelRTMPSubSession

func (group *Group) DelRTMPSubSession(session *rtmp.ServerSession)

func (*Group) DelRTSPPubSession added in v0.15.0

func (group *Group) DelRTSPPubSession(session *rtsp.PubSession)

func (*Group) DelRTSPSubSession added in v0.17.0

func (group *Group) DelRTSPSubSession(session *rtsp.SubSession)

func (*Group) Dispose

func (group *Group) Dispose()

主动释放所有资源。保证所有资源的生命周期逻辑上都在我们的控制中。降低出bug的几率,降低心智负担。 注意,Dispose后,不应再使用这个对象。 值得一提,如果是从其他协程回调回来的消息,在使用Group中的资源前,要判断资源是否存在以及可用。

TODO chef:

后续弄个协程来替换掉目前锁的方式,来做消息同步。这样有个好处,就是不用写很多的资源有效判断。统一写一个就好了。
目前Dispose在IsTotalEmpty时调用,暂时没有这个问题。

func (*Group) GetStat added in v0.16.0

func (group *Group) GetStat() base.StatGroup

func (*Group) HandleNewRTSPSubSessionDescribe added in v0.18.0

func (group *Group) HandleNewRTSPSubSessionDescribe(session *rtsp.SubSession) (ok bool, sdp []byte)

func (*Group) HandleNewRTSPSubSessionPlay added in v0.18.0

func (group *Group) HandleNewRTSPSubSessionPlay(session *rtsp.SubSession) bool

func (*Group) HasInSession added in v0.17.0

func (group *Group) HasInSession() bool

func (*Group) HasOutSession added in v0.17.0

func (group *Group) HasOutSession() bool

func (*Group) IsHLSMuxerAlive added in v0.17.0

func (group *Group) IsHLSMuxerAlive() bool

func (*Group) IsTotalEmpty

func (group *Group) IsTotalEmpty() bool

func (*Group) KickOutSession added in v0.17.0

func (group *Group) KickOutSession(sessionID string) bool

func (*Group) OnAVConfig added in v0.16.0

func (group *Group) OnAVConfig(asc, vps, sps, pps []byte)

rtsp.PubSession

func (*Group) OnAVPacket added in v0.14.0

func (group *Group) OnAVPacket(pkt base.AVPacket)

rtsp.PubSession

func (*Group) OnRTPPacket added in v0.17.0

func (group *Group) OnRTPPacket(pkt rtprtcp.RTPPacket)

rtsp.PubSession

func (*Group) OnReadRTMPAVMsg added in v0.5.0

func (group *Group) OnReadRTMPAVMsg(msg base.RTMPMsg)

rtmp.PubSession or rtmp.PullSession

func (*Group) OnTSPackets added in v0.15.0

func (group *Group) OnTSPackets(rawFrame []byte, boundary bool)

hls.Muxer

func (*Group) RunLoop

func (group *Group) RunLoop()

func (*Group) StartPull added in v0.17.0

func (group *Group) StartPull(url string)

func (*Group) StringifyDebugStats added in v0.19.0

func (group *Group) StringifyDebugStats() string

func (*Group) Tick added in v0.12.0

func (group *Group) Tick()

TODO chef: 传入时间 目前每秒触发一次

type HLSConfig added in v0.10.0

type HLSConfig struct {
	SubListenAddr string `json:"sub_listen_addr"`
	hls.MuxerConfig
	CleanupFlag bool `json:"cleanup_flag"`
}

type HTTPAPIConfig added in v0.16.0

type HTTPAPIConfig struct {
	Enable bool   `json:"enable"`
	Addr   string `json:"addr"`
}

type HTTPAPIServer added in v0.16.0

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

func NewHTTPAPIServer added in v0.16.0

func NewHTTPAPIServer(addr string, observer HTTPAPIServerObserver) *HTTPAPIServer

func (*HTTPAPIServer) Listen added in v0.16.0

func (h *HTTPAPIServer) Listen() (err error)

func (*HTTPAPIServer) Runloop added in v0.16.0

func (h *HTTPAPIServer) Runloop() error

type HTTPAPIServerObserver added in v0.16.0

type HTTPAPIServerObserver interface {
	OnStatAllGroup() []base.StatGroup
	OnStatGroup(streamName string) *base.StatGroup
	OnCtrlStartPull(info base.APICtrlStartPullReq)
	OnCtrlKickOutSession(info base.APICtrlKickOutSession) base.HTTPResponseBasic
}

type HTTPFLVConfig added in v0.10.0

type HTTPFLVConfig struct {
	httpflv.ServerConfig
	GOPNum int `json:"gop_num"`
}

type HTTPNotify added in v0.17.0

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

func (*HTTPNotify) OnPubStart added in v0.17.0

func (h *HTTPNotify) OnPubStart(info base.PubStartInfo)

func (*HTTPNotify) OnPubStop added in v0.17.0

func (h *HTTPNotify) OnPubStop(info base.PubStopInfo)

func (*HTTPNotify) OnRTMPConnect added in v0.17.0

func (h *HTTPNotify) OnRTMPConnect(info base.RTMPConnectInfo)

func (*HTTPNotify) OnServerStart added in v0.17.0

func (h *HTTPNotify) OnServerStart()

func (*HTTPNotify) OnSubStart added in v0.17.0

func (h *HTTPNotify) OnSubStart(info base.SubStartInfo)

func (*HTTPNotify) OnSubStop added in v0.17.0

func (h *HTTPNotify) OnSubStop(info base.SubStopInfo)

func (*HTTPNotify) OnUpdate added in v0.17.0

func (h *HTTPNotify) OnUpdate(info base.UpdateInfo)

func (*HTTPNotify) RunLoop added in v0.17.0

func (h *HTTPNotify) RunLoop()

type HTTPNotifyConfig added in v0.17.0

type HTTPNotifyConfig struct {
	Enable            bool   `json:"enable"`
	UpdateIntervalSec int    `json:"update_interval_sec"`
	OnServerStart     string `json:"on_server_start"`
	OnUpdate          string `json:"on_update"`
	OnPubStart        string `json:"on_pub_start"`
	OnPubStop         string `json:"on_pub_stop"`
	OnSubStart        string `json:"on_sub_start"`
	OnSubStop         string `json:"on_sub_stop"`
	OnRTMPConnect     string `json:"on_rtmp_connect"`
}

type HTTPTSConfig added in v0.15.0

type HTTPTSConfig struct {
	Enable        bool   `json:"enable"`
	SubListenAddr string `json:"sub_listen_addr"`
}

type LazyChunkDivider added in v0.7.0

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

考虑以下两种场景: - 只有上行,没有下行,没有必要做rtmp chunk切片的操作 - 有多个下行,只需要做一次rtmp chunk切片 所以这一步做了懒处理

func (*LazyChunkDivider) Get added in v0.7.0

func (lcd *LazyChunkDivider) Get() []byte

func (*LazyChunkDivider) Init added in v0.7.0

func (lcd *LazyChunkDivider) Init(message []byte, header *base.RTMPHeader)

type LazyGet added in v0.8.0

type LazyGet func() []byte

type LazyRTMPMsg2FLVTag added in v0.8.0

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

懒转换

func (*LazyRTMPMsg2FLVTag) Get added in v0.8.0

func (l *LazyRTMPMsg2FLVTag) Get() []byte

func (*LazyRTMPMsg2FLVTag) Init added in v0.8.0

func (l *LazyRTMPMsg2FLVTag) Init(msg base.RTMPMsg)

type PProfConfig added in v0.10.0

type PProfConfig struct {
	Enable bool   `json:"enable"`
	Addr   string `json:"addr"`
}

type PostTask added in v0.17.0

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

type RTMPConfig added in v0.10.0

type RTMPConfig struct {
	Enable bool   `json:"enable"`
	Addr   string `json:"addr"`
	GOPNum int    `json:"gop_num"`
}

type RTSPConfig added in v0.14.0

type RTSPConfig struct {
	Enable bool   `json:"enable"`
	Addr   string `json:"addr"`
}

type RelayPullConfig added in v0.12.0

type RelayPullConfig struct {
	Enable bool   `json:"enable"`
	Addr   string `json:"addr"`
}

type RelayPushConfig added in v0.11.0

type RelayPushConfig struct {
	Enable   bool     `json:"enable"`
	AddrList []string `json:"addr_list"`
}

type ServerManager

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

func NewServerManager

func NewServerManager() *ServerManager

func (*ServerManager) Dispose

func (sm *ServerManager) Dispose()

func (*ServerManager) GetGroup added in v0.17.0

func (sm *ServerManager) GetGroup(appName string, streamName string) *Group

func (*ServerManager) OnCtrlKickOutSession added in v0.17.0

func (sm *ServerManager) OnCtrlKickOutSession(info base.APICtrlKickOutSession) base.HTTPResponseBasic

HTTPAPIServerObserver

func (*ServerManager) OnCtrlStartPull added in v0.17.0

func (sm *ServerManager) OnCtrlStartPull(info base.APICtrlStartPullReq)

HTTPAPIServerObserver

func (*ServerManager) OnDelHTTPFLVSubSession added in v0.13.0

func (sm *ServerManager) OnDelHTTPFLVSubSession(session *httpflv.SubSession)

ServerObserver of httpflv.Server

func (*ServerManager) OnDelHTTPTSSubSession added in v0.15.0

func (sm *ServerManager) OnDelHTTPTSSubSession(session *httpts.SubSession)

ServerObserver of httpts.Server

func (*ServerManager) OnDelRTMPPubSession added in v0.13.0

func (sm *ServerManager) OnDelRTMPPubSession(session *rtmp.ServerSession)

ServerObserver of rtmp.Server

func (*ServerManager) OnDelRTMPSubSession added in v0.13.0

func (sm *ServerManager) OnDelRTMPSubSession(session *rtmp.ServerSession)

ServerObserver of rtmp.Server

func (*ServerManager) OnDelRTSPPubSession added in v0.14.0

func (sm *ServerManager) OnDelRTSPPubSession(session *rtsp.PubSession)

ServerObserver of rtsp.Server

func (*ServerManager) OnDelRTSPSession added in v0.18.0

func (sm *ServerManager) OnDelRTSPSession(session *rtsp.ServerCommandSession)

ServerObserver of rtsp.Server

func (*ServerManager) OnDelRTSPSubSession added in v0.17.0

func (sm *ServerManager) OnDelRTSPSubSession(session *rtsp.SubSession)

ServerObserver of rtsp.Server

func (*ServerManager) OnNewHTTPFLVSubSession added in v0.13.0

func (sm *ServerManager) OnNewHTTPFLVSubSession(session *httpflv.SubSession) bool

ServerObserver of httpflv.Server

func (*ServerManager) OnNewHTTPTSSubSession added in v0.15.0

func (sm *ServerManager) OnNewHTTPTSSubSession(session *httpts.SubSession) bool

ServerObserver of httpts.Server

func (*ServerManager) OnNewRTMPPubSession added in v0.13.0

func (sm *ServerManager) OnNewRTMPPubSession(session *rtmp.ServerSession) bool

ServerObserver of rtmp.Server

func (*ServerManager) OnNewRTMPSubSession added in v0.13.0

func (sm *ServerManager) OnNewRTMPSubSession(session *rtmp.ServerSession) bool

ServerObserver of rtmp.Server

func (*ServerManager) OnNewRTSPPubSession added in v0.14.0

func (sm *ServerManager) OnNewRTSPPubSession(session *rtsp.PubSession) bool

ServerObserver of rtsp.Server

func (*ServerManager) OnNewRTSPSessionConnect added in v0.18.0

func (sm *ServerManager) OnNewRTSPSessionConnect(session *rtsp.ServerCommandSession)

ServerObserver of rtsp.Server

func (*ServerManager) OnNewRTSPSubSessionDescribe added in v0.18.0

func (sm *ServerManager) OnNewRTSPSubSessionDescribe(session *rtsp.SubSession) (ok bool, sdp []byte)

ServerObserver of rtsp.Server

func (*ServerManager) OnNewRTSPSubSessionPlay added in v0.18.0

func (sm *ServerManager) OnNewRTSPSubSessionPlay(session *rtsp.SubSession) bool

ServerObserver of rtsp.Server

func (*ServerManager) OnRTMPConnect added in v0.17.0

func (sm *ServerManager) OnRTMPConnect(session *rtmp.ServerSession, opa rtmp.ObjectPairArray)

ServerObserver of rtmp.Server

func (*ServerManager) OnStatAllGroup added in v0.16.0

func (sm *ServerManager) OnStatAllGroup() (sgs []base.StatGroup)

HTTPAPIServerObserver

func (*ServerManager) OnStatGroup added in v0.16.0

func (sm *ServerManager) OnStatGroup(streamName string) *base.StatGroup

HTTPAPIServerObserver

func (*ServerManager) RunLoop

func (sm *ServerManager) RunLoop()

Jump to

Keyboard shortcuts

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