engine

package module
v1.0.1 Latest Latest
Warning

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

Go to latest
Published: Feb 27, 2020 License: GPL-3.0 Imports: 17 Imported by: 10

README

Monibuca核心引擎

该项目为Monibuca的引擎部分,该部分逻辑是流媒体服务器的核心转发逻辑。仅包含最基础的功能,不含任何网络协议部分,但包含了一个插件的引入机制,其他功能均由插件实现

Documentation

Index

Constants

View Source
const (
	PLUGIN_SUBSCRIBER = 1
	PLUGIN_PUBLISHER  = 1 << 1
	PLUGIN_HOOK       = 1 << 2
)

Variables

View Source
var (
	AllRoom = Collection{}
)
View Source
var AuthHooks = make(AuthHook, 0)
View Source
var ConfigRaw []byte
View Source
var EngineInfo = &struct {
	Version   string
	StartTime time.Time
}{Version, time.Now()}
View Source
var OnDropHooks = make(OnDropHook, 0)
View Source
var OnPublishHooks = make(OnPublishHook, 0)
View Source
var OnSubscribeHooks = make(OnSubscribeHook, 0)
View Source
var OnSummaryHooks = make(OnSummaryHook, 0)
View Source
var (
	Plugins = make(map[string]*PluginConfig)
)
View Source
var (
	Summary = ServerSummary{}
)
View Source
var Version = "1.0.0"

Functions

func AddWriter

func AddWriter(wn io.Writer)

func InstallPlugin

func InstallPlugin(opt *PluginConfig)

func MayBeError

func MayBeError(info error) (hasError bool)

func Run

func Run(configFile string) (err error)

Types

type AuthHook

type AuthHook []func(string) error

func (AuthHook) AddHook

func (h AuthHook) AddHook(hook func(string) error)

func (AuthHook) Trigger

func (h AuthHook) Trigger(sign string) error

type ChangeRoomCmd

type ChangeRoomCmd struct {
	*OutputStream
	NewRoom *Room
}

type Collection

type Collection struct {
	sync.Map
}

func (*Collection) Get

func (c *Collection) Get(name string) (result *Room)

type Config

type Config struct {
	Plugins map[string]interface{}
}

type InputStream

type InputStream struct {
	*Room
}

func (*InputStream) Close

func (p *InputStream) Close()

func (*InputStream) OnClosed

func (p *InputStream) OnClosed()

func (*InputStream) Publish

func (p *InputStream) Publish(streamPath string, publisher Publisher) bool

func (*InputStream) Running

func (p *InputStream) Running() bool

type ListenerConfig

type ListenerConfig struct {
	ListenAddr string
}

type LogWriter

type LogWriter struct {
	io.Writer
	// contains filtered or unexported fields
}

func (*LogWriter) Write

func (w *LogWriter) Write(data []byte) (n int, err error)

type NetWorkInfo

type NetWorkInfo struct {
	Name         string
	Receive      uint64
	Sent         uint64
	ReceiveSpeed uint64
	SentSpeed    uint64
}

type OnDropHook

type OnDropHook []func(s *OutputStream)

func (OnDropHook) AddHook

func (h OnDropHook) AddHook(hook func(s *OutputStream))

func (OnDropHook) Trigger

func (h OnDropHook) Trigger(s *OutputStream)

type OnPublishHook

type OnPublishHook []func(r *Room)

func (OnPublishHook) AddHook

func (h OnPublishHook) AddHook(hook func(r *Room))

func (OnPublishHook) Trigger

func (h OnPublishHook) Trigger(r *Room)

type OnSubscribeHook

type OnSubscribeHook []func(s *OutputStream)

func (OnSubscribeHook) AddHook

func (h OnSubscribeHook) AddHook(hook func(s *OutputStream))

func (OnSubscribeHook) Trigger

func (h OnSubscribeHook) Trigger(s *OutputStream)

type OnSummaryHook

type OnSummaryHook []func(bool)

func (OnSummaryHook) AddHook

func (h OnSummaryHook) AddHook(hook func(bool))

func (OnSummaryHook) Trigger

func (h OnSummaryHook) Trigger(v bool)

type OutputStream

type OutputStream struct {
	context.Context
	*Room
	SubscriberInfo
	SendHandler func(*avformat.SendPacket) error
	Cancel      context.CancelFunc
	Sign        string
	VTSent      bool
	ATSent      bool
	VSentTime   uint32
	ASentTime   uint32

	OffsetTime uint32
	// contains filtered or unexported fields
}

func (*OutputStream) Close

func (s *OutputStream) Close()

func (*OutputStream) IsClosed

func (s *OutputStream) IsClosed() bool

func (*OutputStream) Play

func (s *OutputStream) Play(streamPath string) (err error)

type PluginConfig

type PluginConfig struct {
	Name   string      //插件名称
	Type   byte        //类型
	Config interface{} //插件配置
	UI     string      //界面路径
	Run    func()      //插件启动函数
}

type Publisher

type Publisher interface {
	OnClosed()
}

type Room

type Room struct {
	context.Context
	Publisher
	RoomInfo
	Control      chan interface{}
	Cancel       context.CancelFunc
	Subscribers  map[string]*OutputStream // 订阅者
	VideoTag     *avformat.AVPacket       // 每个视频包都是这样的结构,区别在于Payload的大小.FMS在发送AVC sequence header,需要加上 VideoTags,这个tag 1个字节(8bits)的数据
	AudioTag     *avformat.AVPacket       // 每个音频包都是这样的结构,区别在于Payload的大小.FMS在发送AAC sequence header,需要加上 AudioTags,这个tag 1个字节(8bits)的数据
	FirstScreen  []*avformat.AVPacket
	AudioChan    chan *avformat.AVPacket
	VideoChan    chan *avformat.AVPacket
	UseTimestamp bool //是否采用数据包中的时间戳
}

func (*Room) PushAudio

func (r *Room) PushAudio(audio *avformat.AVPacket)

func (*Room) PushVideo

func (r *Room) PushVideo(video *avformat.AVPacket)

func (*Room) Run

func (r *Room) Run()

func (*Room) Subscribe

func (r *Room) Subscribe(s *OutputStream)

func (*Room) UnSubscribe

func (r *Room) UnSubscribe(s *OutputStream)

type RoomInfo

type RoomInfo struct {
	StreamPath     string
	StartTime      time.Time
	SubscriberInfo []*SubscriberInfo
	Type           string
	VideoInfo      struct {
		PacketCount int
		CodecID     byte
		SPSInfo     avformat.SPSInfo
	}
	AudioInfo struct {
		PacketCount int
		SoundFormat byte //4bit
		SoundRate   int  //2bit
		SoundSize   byte //1bit
		SoundType   byte //1bit
	}
}

type ServerSummary

type ServerSummary struct {
	Address string
	Memory  struct {
		Total uint64
		Free  uint64
		Used  uint64
		Usage float64
	}
	CPUUsage float64
	HardDisk struct {
		Total uint64
		Free  uint64
		Used  uint64
		Usage float64
	}
	NetWork []NetWorkInfo
	Rooms   []*RoomInfo

	Children map[string]*ServerSummary
	// contains filtered or unexported fields
}

func (*ServerSummary) Add

func (s *ServerSummary) Add()

func (*ServerSummary) Done

func (s *ServerSummary) Done()

func (*ServerSummary) Report

func (s *ServerSummary) Report(slave *ServerSummary)

func (*ServerSummary) Running

func (s *ServerSummary) Running() bool

func (*ServerSummary) StartSummary

func (s *ServerSummary) StartSummary()

type SubscribeCmd

type SubscribeCmd struct {
	*OutputStream
}

type Subscriber

type Subscriber interface {
	Send(*avformat.SendPacket) error
}

type SubscriberInfo

type SubscriberInfo struct {
	ID            string
	TotalDrop     int //总丢帧
	TotalPacket   int
	Type          string
	BufferLength  int
	SubscribeTime time.Time
}

type UnSubscribeCmd

type UnSubscribeCmd struct {
	*OutputStream
}

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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