mirror of
https://github.com/AlexxIT/go2rtc.git
synced 2025-10-05 08:16:55 +08:00
82 lines
1.5 KiB
Go
82 lines
1.5 KiB
Go
package streamer
|
|
|
|
import (
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
type Info struct {
|
|
Type string `json:"type,omitempty"`
|
|
URL string `json:"url,omitempty"`
|
|
RemoteAddr string `json:"remote_addr,omitempty"`
|
|
UserAgent string `json:"user_agent,omitempty"`
|
|
Medias []*Media `json:"medias,omitempty"`
|
|
Tracks []*Track `json:"tracks,omitempty"`
|
|
Recv uint32 `json:"recv,omitempty"`
|
|
Send uint32 `json:"send,omitempty"`
|
|
}
|
|
|
|
func Between(s, sub1, sub2 string) string {
|
|
i := strings.Index(s, sub1)
|
|
if i < 0 {
|
|
return ""
|
|
}
|
|
s = s[i+len(sub1):]
|
|
|
|
if len(sub2) == 1 {
|
|
i = strings.IndexByte(s, sub2[0])
|
|
} else {
|
|
i = strings.Index(s, sub2)
|
|
}
|
|
if i >= 0 {
|
|
return s[:i]
|
|
}
|
|
|
|
return s
|
|
}
|
|
|
|
func Contains(medias []*Media, media *Media, codec *Codec) bool {
|
|
var ok1, ok2 bool
|
|
for _, m := range medias {
|
|
if m == media {
|
|
ok1 = true
|
|
break
|
|
}
|
|
}
|
|
for _, c := range media.Codecs {
|
|
if c == codec {
|
|
ok2 = true
|
|
break
|
|
}
|
|
}
|
|
return ok1 && ok2
|
|
}
|
|
|
|
type Probe struct {
|
|
deadline time.Time
|
|
items map[interface{}]struct{}
|
|
}
|
|
|
|
func NewProbe(enable bool) *Probe {
|
|
if enable {
|
|
return &Probe{
|
|
deadline: time.Now().Add(time.Second * 3),
|
|
items: map[interface{}]struct{}{},
|
|
}
|
|
} else {
|
|
return nil
|
|
}
|
|
}
|
|
|
|
// Active return true if probe enabled and not finish
|
|
func (p *Probe) Active() bool {
|
|
return len(p.items) < 2 && time.Now().Before(p.deadline)
|
|
}
|
|
|
|
// Append safe to run if Probe is nil
|
|
func (p *Probe) Append(v interface{}) {
|
|
if p != nil {
|
|
p.items[v] = struct{}{}
|
|
}
|
|
}
|