forked from deepch/RTSPtoWebRTC
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathconfig.go
109 lines (95 loc) · 2.05 KB
/
config.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package main
import (
"crypto/rand"
"encoding/json"
"fmt"
"io/ioutil"
"log"
"github.com/deepch/vdk/av"
)
//Config global
var Config = loadConfig()
//ConfigST struct
type ConfigST struct {
Server ServerST `json:"server"`
Streams map[string]StreamST `json:"streams"`
}
//ServerST struct
type ServerST struct {
HTTPPort string `json:"http_port"`
}
//StreamST struct
type StreamST struct {
URL string `json:"url"`
Status bool `json:"status"`
Codecs []av.CodecData
Cl map[string]viwer
}
type viwer struct {
c chan av.Packet
}
func loadConfig() *ConfigST {
var tmp ConfigST
data, err := ioutil.ReadFile("config.json")
if err != nil {
log.Fatalln(err)
}
err = json.Unmarshal(data, &tmp)
if err != nil {
log.Fatalln(err)
}
for i, v := range tmp.Streams {
v.Cl = make(map[string]viwer)
tmp.Streams[i] = v
}
return &tmp
}
func (element *ConfigST) cast(uuid string, pck av.Packet) {
for _, v := range element.Streams[uuid].Cl {
if len(v.c) < cap(v.c) {
v.c <- pck
}
}
}
func (element *ConfigST) ext(suuid string) bool {
_, ok := element.Streams[suuid]
return ok
}
func (element *ConfigST) coAd(suuid string, codecs []av.CodecData) {
t := element.Streams[suuid]
t.Codecs = codecs
element.Streams[suuid] = t
}
func (element *ConfigST) coGe(suuid string) []av.CodecData {
return element.Streams[suuid].Codecs
}
func (element *ConfigST) clAd(suuid string) (string, chan av.Packet) {
cuuid := pseudoUUID()
ch := make(chan av.Packet, 100)
element.Streams[suuid].Cl[cuuid] = viwer{c: ch}
return cuuid, ch
}
func (element *ConfigST) list() (string, []string) {
var res []string
var fist string
for k := range element.Streams {
if fist == "" {
fist = k
}
res = append(res, k)
}
return fist, res
}
func (element *ConfigST) clDe(suuid, cuuid string) {
delete(element.Streams[suuid].Cl, cuuid)
}
func pseudoUUID() (uuid string) {
b := make([]byte, 16)
_, err := rand.Read(b)
if err != nil {
fmt.Println("Error: ", err)
return
}
uuid = fmt.Sprintf("%X-%X-%X-%X-%X", b[0:4], b[4:6], b[6:8], b[8:10], b[10:])
return
}