engine

package module
v1.2.2 Latest Latest
Warning

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

Go to latest
Published: Apr 29, 2020 License: GPL-3.0 Imports: 23 Imported by: 9

README

Monibuca核心引擎

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

示意图

Documentation

Index

Constants

View Source
const (
	PLUGIN_NONE       = 0      //独立插件
	PLUGIN_SUBSCRIBER = 1      //订阅者插件
	PLUGIN_PUBLISHER  = 1 << 1 //发布者插件
	PLUGIN_HOOK       = 1 << 2 //钩子插件
)

Variables

View Source
var (
	// ConfigRaw 配置信息的原始数据
	ConfigRaw []byte
	// Version 引擎版本号
	Version string
	// EngineInfo 引擎信息
	EngineInfo = &struct {
		Version   *string
		StartTime time.Time //启动时间
	}{&Version, time.Now()}
)
View Source
var (
	AllRoom = Collection{}
)
View Source
var AuthHooks = make(AuthHook, 0)
View Source
var OnDropHooks = make(OnDropHook, 0)
View Source
var OnPublishHooks = make(OnPublishHook, 0)
View Source
var OnRoomClosedHooks = make(OnRoomClosedHook, 0)
View Source
var OnSubscribeHooks = make(OnSubscribeHook, 0)
View Source
var OnSummaryHooks = make(OnSummaryHook, 0)
View Source
var OnUnSubscribeHooks = make(OnUnSubscribeHook, 0)
View Source
var Plugins = make(map[string]*PluginConfig)

Plugins 所有的插件配置

View Source
var Summary = ServerSummary{}

Summary 系统摘要数据

Functions

func AddWriter

func AddWriter(wn io.Writer)

AddWriter 添加日志输出端

func InstallPlugin

func InstallPlugin(opt *PluginConfig)

InstallPlugin 安装插件

func MayBeError

func MayBeError(info error) (hasError bool)

MayBeError 优雅错误判断加日志辅助函数

func Print added in v1.2.0

func Print(v ...interface{})

Print 带颜色识别

func Printf added in v1.2.0

func Printf(format string, v ...interface{})

Printf calls Output to print to the standard logger. Arguments are handled in the manner of fmt.Printf.

func Println added in v1.2.0

func Println(v ...interface{})

Println calls Output to print to the standard logger. Arguments are handled in the manner of fmt.Println.

func Run

func Run(configFile string) (err error)

Run 启动Monibuca引擎

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
}

ChangeRoomCmd 切换房间命令

type Collection

type Collection struct {
	sync.Map
}

Collection 对sync.Map的包装

func (*Collection) Get

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

Get 根据流名称获取房间

type InputStream

type InputStream struct {
	*Room
}

InputStream 发布者实体定义

func (*InputStream) Close

func (p *InputStream) Close()

Close 关闭发布者

func (*InputStream) OnClosed

func (p *InputStream) OnClosed()

OnClosed 发布者关闭事件,用于回收资源

func (*InputStream) Publish

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

Publish 发布者进行发布操作

func (*InputStream) Running

func (p *InputStream) Running() bool

Running 发布者是否正在发布

type ListenerConfig

type ListenerConfig struct {
	ListenAddr string
}

ListenerConfig 带有监听地址端口的插件配置类型

type LogWriter

type LogWriter struct {
	*MultiLogWriter
}

LogWriter 多端写日志类

func (*LogWriter) Write

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

type MultiLogWriter added in v1.2.0

type MultiLogWriter struct {
	sync.Map
}

func (*MultiLogWriter) Write added in v1.2.0

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

type NetWorkInfo

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

NetWorkInfo 网速信息

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 OnRoomClosedHook added in v1.1.2

type OnRoomClosedHook []func(*Room)

func (OnRoomClosedHook) AddHook added in v1.1.2

func (h OnRoomClosedHook) AddHook(hook func(*Room))

func (OnRoomClosedHook) Trigger added in v1.1.2

func (h OnRoomClosedHook) Trigger(v *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 OnUnSubscribeHook added in v1.1.2

type OnUnSubscribeHook []func(s *OutputStream)

func (OnUnSubscribeHook) AddHook added in v1.1.2

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

func (OnUnSubscribeHook) Trigger added in v1.1.2

func (h OnUnSubscribeHook) Trigger(s *OutputStream)

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
}

OutputStream 订阅者实体定义

func (*OutputStream) Close

func (s *OutputStream) Close()

Close 关闭订阅者

func (*OutputStream) IsClosed

func (s *OutputStream) IsClosed() bool

IsClosed 检查订阅者是否已经关闭

func (*OutputStream) Play

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

Play 开始订阅

type PluginConfig

type PluginConfig struct {
	Name   string      //插件名称
	Type   byte        //类型
	Config interface{} //插件配置
	UIDir  string      //界面目录
	// Deprecated: 界面文件,兼容老版本
	UI      string
	Version string //插件版本
	Dir     string //插件代码路径
	Run     func() //插件启动函数
}

PluginConfig 插件配置定义

type Publisher

type Publisher interface {
	OnClosed()
}

Publisher 发布者接口

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 //是否采用数据包中的时间戳
}

Room 房间定义

func (*Room) PushAudio

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

PushAudio 来自发布者推送的音频

func (*Room) PushVideo

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

PushVideo 来自发布者推送的视频

func (*Room) Run

func (r *Room) Run()

Run 房间运行,转发逻辑

func (*Room) Subscribe

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

Subscribe 订阅房间

func (*Room) UnSubscribe

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

UnSubscribe 取消订阅房间

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
	}
}

RoomInfo 房间可序列化信息,用于控制台显示

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
}

ServerSummary 系统摘要定义

func (*ServerSummary) Add

func (s *ServerSummary) Add()

Add 增加订阅者

func (*ServerSummary) Done

func (s *ServerSummary) Done()

Done 删除订阅者

func (*ServerSummary) Report

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

Report 上报数据

func (*ServerSummary) Running

func (s *ServerSummary) Running() bool

Running 是否正在采集数据

func (*ServerSummary) StartSummary

func (s *ServerSummary) StartSummary()

StartSummary 开始定时采集数据,每秒一次

type SubscribeCmd

type SubscribeCmd struct {
	*OutputStream
}

SubscribeCmd 订阅房间命令

type Subscriber

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

Subscriber 订阅者

type SubscriberInfo

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

SubscriberInfo 订阅者可序列化信息,用于控制台输出

type UnSubscribeCmd

type UnSubscribeCmd struct {
	*OutputStream
}

UnSubscribeCmd 取消订阅命令

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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