1 Star 0 Fork 0

irishcoffeeguo/RTSPtoWeb

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
storageStream.go 2.90 KB
一键复制 编辑 原始数据 按行查看 历史
package main
//StreamsList list all stream
func (obj *StorageST) StreamsList() map[string]StreamST {
obj.mutex.RLock()
defer obj.mutex.RUnlock()
tmp := make(map[string]StreamST)
for i, i2 := range obj.Streams {
tmp[i] = i2
}
return tmp
}
//StreamAdd add stream
func (obj *StorageST) StreamAdd(uuid string, val StreamST) error {
obj.mutex.Lock()
defer obj.mutex.Unlock()
//TODO create empty map bug save https://github.com/liip/sheriff empty not nil map[] != {} json
//data, err := sheriff.Marshal(&sheriff.Options{
// Groups: []string{"config"},
// ApiVersion: v2,
// }, obj)
//Not Work map[] != {}
if obj.Streams == nil {
obj.Streams = make(map[string]StreamST)
}
if _, ok := obj.Streams[uuid]; ok {
return ErrorStreamAlreadyExists
}
for i, i2 := range val.Channels {
i2 = obj.StreamChannelMake(i2)
if !i2.OnDemand {
i2.runLock = true
val.Channels[i] = i2
go StreamServerRunStreamDo(uuid, i)
} else {
val.Channels[i] = i2
}
}
obj.Streams[uuid] = val
err := obj.SaveConfig()
if err != nil {
return err
}
return nil
}
//StreamEdit edit stream
func (obj *StorageST) StreamEdit(uuid string, val StreamST) error {
obj.mutex.Lock()
defer obj.mutex.Unlock()
if tmp, ok := obj.Streams[uuid]; ok {
for i, i2 := range tmp.Channels {
if i2.runLock {
tmp.Channels[i] = i2
obj.Streams[uuid] = tmp
i2.signals <- SignalStreamStop
}
}
for i3, i4 := range val.Channels {
i4 = obj.StreamChannelMake(i4)
if !i4.OnDemand {
i4.runLock = true
val.Channels[i3] = i4
go StreamServerRunStreamDo(uuid, i3)
} else {
val.Channels[i3] = i4
}
}
obj.Streams[uuid] = val
err := obj.SaveConfig()
if err != nil {
return err
}
return nil
}
return ErrorStreamNotFound
}
//StreamReload reload stream
func (obj *StorageST) StopAll() {
obj.mutex.RLock()
defer obj.mutex.RUnlock()
for _, st := range obj.Streams {
for _, i2 := range st.Channels {
if i2.runLock {
i2.signals <- SignalStreamStop
}
}
}
}
//StreamReload reload stream
func (obj *StorageST) StreamReload(uuid string) error {
obj.mutex.RLock()
defer obj.mutex.RUnlock()
if tmp, ok := obj.Streams[uuid]; ok {
for _, i2 := range tmp.Channels {
if i2.runLock {
i2.signals <- SignalStreamRestart
}
}
return nil
}
return ErrorStreamNotFound
}
//StreamDelete stream
func (obj *StorageST) StreamDelete(uuid string) error {
obj.mutex.Lock()
defer obj.mutex.Unlock()
if tmp, ok := obj.Streams[uuid]; ok {
for _, i2 := range tmp.Channels {
if i2.runLock {
i2.signals <- SignalStreamStop
}
}
delete(obj.Streams, uuid)
err := obj.SaveConfig()
if err != nil {
return err
}
return nil
}
return ErrorStreamNotFound
}
//StreamInfo return stream info
func (obj *StorageST) StreamInfo(uuid string) (*StreamST, error) {
obj.mutex.RLock()
defer obj.mutex.RUnlock()
if tmp, ok := obj.Streams[uuid]; ok {
return &tmp, nil
}
return nil, ErrorStreamNotFound
}
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/irishcoffeeguo/RTSPtoWeb.git
git@gitee.com:irishcoffeeguo/RTSPtoWeb.git
irishcoffeeguo
RTSPtoWeb
RTSPtoWeb
master

搜索帮助