type Saveflv struct {
Inuse bool
path string
+ wait chan bool
+ cancel chan interface{}
}
var saveflv = Saveflv {
func Saveflvf(){
if !saveflv.Inuse || saveflv.path != "" {return}
l := p.Logf().New().Open("danmu.log").Base(1, "saveflv")
+ defer l.BC()
r := p.Get(p.Rval{
Url:"https://live.bilibili.com/" + strconv.Itoa(Msg_roomid),
if saveflv.path != "" {return}
saveflv.path = strconv.Itoa(Msg_roomid) + "_" + p.Sys().GetTime()
l.I("直播流保存到", saveflv.path)
- if e := p.Req().Reqf(p.Rval{
+
+ saveflv.wait = make(chan bool,1)
+ saveflv.cancel = make(chan interface{},1)
+
+ rr := p.Req()
+ go func(){
+ <- saveflv.cancel
+ close(rr.Cancel)
+ }()
+ if e := rr.Reqf(p.Rval{
Url:url.(string),
SaveToPath:saveflv.path + ".flv",
Timeout:-1,
- }); e != nil{
- l.E(e)
- return
- }
+ }); e != nil{l.E(e)}
Saveflv_transcode()
+ close(saveflv.wait)
}
}
}
func Saveflv_transcode(){
if !saveflv.Inuse || saveflv.path == "" {return}
if p.Checkfile().IsExist(saveflv.path+".flv"){
- saveflv.path = ""
p.Exec().Run(false, "ffmpeg", "-i", saveflv.path+".flv", "-c", "copy", saveflv.path+".mp4")
} else if p.Checkfile().IsExist(saveflv.path+".flv.dtmp"){
- saveflv.path = ""
p.Exec().Run(false, "ffmpeg", "-i", saveflv.path+".flv.dtmp", "-c", "copy", saveflv.path+".mp4")
}
+ saveflv.path = ""
+}
+
+func Saveflv_wait(){
+ if !saveflv.Inuse || saveflv.path == "" {return}
+ close(saveflv.cancel)
+ p.Logf().New().Open("danmu.log").Base(1, "saveflv").I("等待转码").Block()
+ <- saveflv.wait
}
type Obs struct {
func Obsf(on bool){
if !obs.Inuse {return}
l := p.Logf().New().Open("danmu.log").Base(1, "obs")
+ defer l.BC()
if on {
if p.Sys().CheckProgram("obs")[0] != 0 {l.W("obs已经启动");return}
if !obs.Inuse {return}
l := p.Logf().New().Open("danmu.log").Base(1, "obs_R")
+ defer l.BC()
+
if p.Sys().CheckProgram("obs")[0] == 0 {
l.W("obs未启动")
return
res = append(res, pt)
l := p.Logf().New().Open("danmu.log").Base(1, "autoban")
- l.W(res)
+ l.W(res).Block()
return true
}
jiezou.Lock()
if now > 1.3 * jiezou.avg {//触发
l := p.Logf().New().Open("danmu.log").Base(1, "jiezou")
- l.W("节奏注意", now, jiezou.avg, S)
+ l.W("节奏注意", now, jiezou.avg, S).Block()
jiezou.avg = now //沉默
jiezou.Unlock()
require (
github.com/christopher-dG/go-obs-websocket v0.0.0-20200720193653-c4fed10356a5 // indirect
github.com/mitchellh/mapstructure v1.3.3 // indirect
- github.com/qydysky/bili_danmu v0.0.0-20200921055847-0aab038f7dd3
- github.com/qydysky/part v0.0.0-20200922024213-39a1b17b5fa0 // indirect
+ github.com/qydysky/bili_danmu v0.0.0-20200922044320-64c89f442142
+ github.com/qydysky/part v0.0.0-20200922062343-5096e51d5989 // indirect
golang.org/x/sys v0.0.0-20200918174421-af09f7315aff // indirect
)
github.com/qydysky/part v0.0.0-20200918231831-729ead5cbddf/go.mod h1:+8N3UgJBVyJj8ar31eZtucwrKpLpay854Y5qq0xk3x0=
github.com/qydysky/part v0.0.0-20200922024213-39a1b17b5fa0 h1:2o5ixlGUZBXvRnwqILAYT2Na0LsVVKHBOK4g7+g4nvc=
github.com/qydysky/part v0.0.0-20200922024213-39a1b17b5fa0/go.mod h1:+8N3UgJBVyJj8ar31eZtucwrKpLpay854Y5qq0xk3x0=
+github.com/qydysky/part v0.0.0-20200922060746-8db61966366b h1:9Qe6wazp6ImV0jyIELhJKlcHmnngEt9Ztukoj3CE21s=
+github.com/qydysky/part v0.0.0-20200922060746-8db61966366b/go.mod h1:+8N3UgJBVyJj8ar31eZtucwrKpLpay854Y5qq0xk3x0=
+github.com/qydysky/part v0.0.0-20200922062343-5096e51d5989 h1:W3Sm7L2/7q2VHEc0NFQKLV4mJpwouQCGDxziKiyCU/o=
+github.com/qydysky/part v0.0.0-20200922062343-5096e51d5989/go.mod h1:+8N3UgJBVyJj8ar31eZtucwrKpLpay854Y5qq0xk3x0=
github.com/shirou/gopsutil v2.20.7+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
github.com/shirou/gopsutil v2.20.8+incompatible h1:8c7Atn0FAUZJo+f4wYbN0iVpdWniCQk7IYwGtgdh1mY=
github.com/shirou/gopsutil v2.20.8+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=