Skip to content

Commit 12db3b1

Browse files
committed
engine: use olive tv
1 parent e027261 commit 12db3b1

6 files changed

Lines changed: 67 additions & 64 deletions

File tree

go.mod

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@ go 1.18
44

55
require (
66
github.com/fsnotify/fsnotify v1.5.1
7+
github.com/go-olive/flv v0.0.0-20220417125559-80092be84905
8+
github.com/go-olive/tv v0.0.0-20220417144056-6e360c066d60
79
github.com/json-iterator/go v1.1.12
810
github.com/lthibault/jitterbug/v2 v2.2.2
911
github.com/rifflock/lfshook v0.0.0-20180920164130-b9218ef580f5
@@ -12,6 +14,7 @@ require (
1214
)
1315

1416
require (
17+
github.com/funny/slab v0.0.0-20180511031532-b1fad5e5d478 // indirect
1518
github.com/hashicorp/hcl v1.0.0 // indirect
1619
github.com/magiconair/properties v1.8.6 // indirect
1720
github.com/mitchellh/mapstructure v1.4.3 // indirect
@@ -24,6 +27,7 @@ require (
2427
github.com/spf13/jwalterweatherman v1.1.0 // indirect
2528
github.com/spf13/pflag v1.0.5 // indirect
2629
github.com/subosito/gotenv v1.2.0 // indirect
30+
golang.org/x/net v0.0.0-20220412020605-290c469a71a5 // indirect
2731
golang.org/x/sys v0.0.0-20220412211240-33da011f77ad // indirect
2832
golang.org/x/text v0.3.7 // indirect
2933
gopkg.in/ini.v1 v1.66.4 // indirect

go.sum

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,16 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.m
5757
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
5858
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
5959
github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU=
60+
github.com/funny/slab v0.0.0-20180511031532-b1fad5e5d478 h1:Db9StoJ6RZN3YttC0Pm0I4Y5izITRYch3RMbT59BYN0=
61+
github.com/funny/slab v0.0.0-20180511031532-b1fad5e5d478/go.mod h1:0j1+svBH8ABEIPdUP0AIg4qedsybnXGJBakCEw8cfoo=
62+
github.com/funny/utest v0.0.0-20161029064919-43870a374500 h1:Z0r1CZnoIWFB/Uiwh1BU5FYmuFe6L5NPi6XWQEmsTRg=
6063
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
6164
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
6265
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
66+
github.com/go-olive/flv v0.0.0-20220417125559-80092be84905 h1:ZdAnmAn34asfJ3yUT6NDYR5WQHgWyFpEogjf/aj2xkI=
67+
github.com/go-olive/flv v0.0.0-20220417125559-80092be84905/go.mod h1:lEh2giuivi5AxQBVXcakIiXxusTWwnqgqz/8IvIYh+M=
68+
github.com/go-olive/tv v0.0.0-20220417144056-6e360c066d60 h1:nKDJNBk/9WV7U481tsKl5YWnLJewNMS+JywHYqe8T30=
69+
github.com/go-olive/tv v0.0.0-20220417144056-6e360c066d60/go.mod h1:e4Yq9X2H5wfuIKbo2+mtVVrDLuvoNw8CMqhJwADs8bY=
6370
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
6471
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
6572
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
@@ -258,6 +265,8 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY
258265
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
259266
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
260267
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
268+
golang.org/x/net v0.0.0-20220412020605-290c469a71a5 h1:bRb386wvrE+oBNdF1d/Xh9mQrfQ4ecYhW5qJ5GvTGT4=
269+
golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk=
261270
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
262271
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
263272
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=

src/engine/show.go

Lines changed: 29 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,13 @@ import (
66
"errors"
77
"fmt"
88

9+
"github.com/go-olive/olive/src/config"
910
"github.com/go-olive/olive/src/dispatcher"
1011
"github.com/go-olive/olive/src/enum"
1112
"github.com/go-olive/olive/src/parser"
1213
"github.com/go-olive/olive/src/platform"
14+
15+
"github.com/go-olive/tv"
1316
)
1417

1518
type ID string
@@ -19,40 +22,46 @@ type Show interface {
1922
GetPlatform() string
2023
GetRoomID() string
2124
GetStreamerName() string
22-
StreamURL() (string, error)
23-
Snapshot() (*platform.Snapshot, error)
2425

2526
AddMonitor() error
2627
RemoveMonitor() error
2728
AddRecorder() error
2829
RemoveRecorder() error
2930

3031
NewParser() (parser.Parser, error)
32+
33+
tv.ITv
3134
}
3235

3336
type show struct {
34-
ID ID
35-
Platform string
36-
RoomID string
37-
StreamerName string
37+
ID ID
38+
Platform string
39+
RoomID string
40+
Streamer string
3841
enum.ShowTaskStatusID
3942
stop chan struct{}
4043
ctrl platform.PlatformCtrl
44+
45+
*tv.Tv
4146
}
4247

4348
func NewShow(platformType, roomID, streamerName string) (Show, error) {
44-
pc, valid := platform.SharedManager.Ctrl(platformType)
45-
if !valid {
46-
return nil, errors.New("platform not exist")
49+
var parms *tv.Parms
50+
if platformType == "douyin" {
51+
parms.Cookie = config.APP.PlatformConfig.DouyinCookie
52+
}
53+
tv, err := tv.Snap(tv.NewTv(platformType, roomID), parms)
54+
if err != nil {
55+
return nil, err
4756
}
4857

4958
s := &show{
50-
Platform: platformType,
51-
RoomID: roomID,
52-
StreamerName: streamerName,
53-
stop: make(chan struct{}),
59+
Platform: platformType,
60+
RoomID: roomID,
61+
Streamer: streamerName,
62+
stop: make(chan struct{}),
5463

55-
ctrl: pc,
64+
Tv: tv,
5665
}
5766
s.ID = s.genID()
5867
return s, nil
@@ -67,7 +76,7 @@ func (s *show) GetRoomID() string {
6776
}
6877

6978
func (s *show) GetStreamerName() string {
70-
return s.StreamerName
79+
return s.Streamer
7180
}
7281

7382
func (s *show) GetPlatform() string {
@@ -81,16 +90,12 @@ func (s *show) genID() ID {
8190
return ID(hex.EncodeToString(h.Sum(nil)))
8291
}
8392

84-
func (s *show) StreamURL() (string, error) {
85-
return s.ctrl.StreamURL(s.ctrl, s.RoomID)
86-
}
87-
88-
func (s *show) Snapshot() (*platform.Snapshot, error) {
89-
return s.ctrl.Snapshot(s.ctrl, s.RoomID)
90-
}
91-
9293
func (s *show) NewParser() (parser.Parser, error) {
93-
v, ok := parser.SharedManager.Parser(s.ctrl.ParserType())
94+
typ := "flv"
95+
if s.SiteID == "youtube" {
96+
typ = "streamlink"
97+
}
98+
v, ok := parser.SharedManager.Parser(typ)
9499
if !ok {
95100
return nil, errors.New("parser not exist")
96101
}

src/internal/init.go

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1 @@
11
package internal
2-
3-
import (
4-
_ "github.com/go-olive/olive/src/platform/bilibili"
5-
_ "github.com/go-olive/olive/src/platform/douyin"
6-
_ "github.com/go-olive/olive/src/platform/huya"
7-
_ "github.com/go-olive/olive/src/platform/youtube"
8-
9-
_ "github.com/go-olive/olive/src/monitor"
10-
11-
_ "github.com/go-olive/olive/src/parser/ffmpeg"
12-
_ "github.com/go-olive/olive/src/parser/streamlink"
13-
)

src/monitor/monitor.go

Lines changed: 17 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88
"github.com/go-olive/olive/src/engine"
99
"github.com/go-olive/olive/src/enum"
1010
l "github.com/go-olive/olive/src/log"
11-
"github.com/go-olive/olive/src/platform"
1211
"github.com/lthibault/jitterbug/v2"
1312
"github.com/sirupsen/logrus"
1413
)
@@ -21,20 +20,20 @@ type Monitor interface {
2120

2221
func NewMonitor(show engine.Show) Monitor {
2322
return &monitor{
24-
status: enum.Status.Starting,
25-
show: show,
26-
stop: make(chan struct{}),
27-
snapshot: &platform.Snapshot{},
28-
done: make(chan struct{}),
23+
status: enum.Status.Starting,
24+
show: show,
25+
stop: make(chan struct{}),
26+
done: make(chan struct{}),
2927
}
3028
}
3129

3230
type monitor struct {
33-
status enum.StatusID
34-
show engine.Show
35-
stop chan struct{}
36-
snapshot *platform.Snapshot
37-
done chan struct{}
31+
status enum.StatusID
32+
show engine.Show
33+
stop chan struct{}
34+
done chan struct{}
35+
36+
roomOn bool
3837
}
3938

4039
func (m *monitor) Start() error {
@@ -63,18 +62,15 @@ func (m *monitor) Stop() {
6362
}
6463

6564
func (m *monitor) refresh() {
66-
latestSnapshot, err := m.show.Snapshot()
67-
if err != nil && err.Error() != "not on air" {
68-
l.Logger.Error(err)
69-
return
70-
}
65+
m.show.Refresh()
66+
_, roomOn := m.show.StreamUrl()
7167
defer func() {
72-
m.snapshot = latestSnapshot
68+
m.roomOn = roomOn
7369
}()
7470
var eventType enum.EventTypeID
75-
if !m.snapshot.RoomOn && latestSnapshot.RoomOn {
71+
if !m.roomOn && roomOn {
7672
eventType = enum.EventType.AddRecorder
77-
} else if m.snapshot.RoomOn && !latestSnapshot.RoomOn {
73+
} else if m.roomOn && !roomOn {
7874
eventType = enum.EventType.RemoveRecorder
7975
} else {
8076
return
@@ -83,8 +79,8 @@ func (m *monitor) refresh() {
8379
l.Logger.WithFields(logrus.Fields{
8480
"pf": m.show.GetPlatform(),
8581
"id": m.show.GetRoomID(),
86-
"old": m.snapshot.RoomOn,
87-
"new": latestSnapshot.RoomOn,
82+
"old": m.roomOn,
83+
"new": roomOn,
8884
}).Info("live status changed")
8985

9086
d, ok := dispatcher.SharedManager.Dispatcher(enum.DispatcherType.Recorder)

src/recorder/recorder.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -91,26 +91,27 @@ func (r *recorder) record() {
9191
}
9292
}()
9393

94-
s, err := r.show.Snapshot()
95-
if err != nil {
94+
r.show.Refresh()
95+
streamUrl, ok := r.show.StreamUrl()
96+
roomName, _ := r.show.RoomName()
97+
if !ok {
9698
l.Logger.WithFields(logrus.Fields{
97-
"pf": r.show.GetPlatform(),
98-
"id": r.show.GetRoomID(),
99-
"err": err.Error(),
99+
"pf": r.show.GetPlatform(),
100+
"id": r.show.GetRoomID(),
100101
}).Debug("fail to get StreamURL")
101102
time.Sleep(5 * time.Second)
102103
return
103104
}
104105

105106
const format = "2006-01-02 15-04-05"
106-
out = fmt.Sprintf("[%s][%s][%s].flv", r.show.GetStreamerName(), s.RoomName, time.Now().Format(format))
107+
out = fmt.Sprintf("[%s][%s][%s].flv", r.show.GetStreamerName(), roomName, time.Now().Format(format))
107108

108109
l.Logger.WithFields(logrus.Fields{
109110
"pf": r.show.GetPlatform(),
110111
"id": r.show.GetRoomID(),
111112
}).Info("record start")
112113

113-
err = r.parser.Parse(s.StreamURL, out)
114+
err := r.parser.Parse(streamUrl, out)
114115

115116
l.Logger.WithFields(logrus.Fields{
116117
"pf": r.show.GetPlatform(),

0 commit comments

Comments
 (0)