From 8b843aa1d73a007ae471119c06633b317132ce2d Mon Sep 17 00:00:00 2001 From: qydysky Date: Sat, 3 Jun 2023 04:05:58 +0800 Subject: [PATCH] =?utf8?q?Improve=20=E4=BC=98=E5=8C=96=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- CV/Var.go | 77 +++++++++++++++++++++++++------------------------ Reply/stream.go | 19 ++++++++---- cmd/cmd.go | 2 ++ go.mod | 18 ++++++------ go.sum | 43 ++++++++++++++------------- 5 files changed, 84 insertions(+), 75 deletions(-) diff --git a/CV/Var.go b/CV/Var.go index f3aeae9..dd43b35 100644 --- a/CV/Var.go +++ b/CV/Var.go @@ -31,44 +31,44 @@ type StreamType struct { } type Common struct { - PID int //进程id - Uid int //client uid - Live []LiveQn //直播流链接 - Live_qn int //当前直播流质量 - Live_want_qn int //期望直播流质量 - Roomid int //房间ID - Cookie syncmap.Map //Cookie - Title string //直播标题 - Uname string //主播名 - UpUid int //主播uid - Rev float64 //营收 - Renqi int //人气 - Watched int //观看人数 - OnlineNum int //在线人数 - GuardNum int //舰长数 - ParentAreaID int //父分区 - AreaID int //子分区 - Locked bool //直播间封禁 - Note string //分区排行 - Live_Start_Time time.Time //直播开始时间 - Liveing bool //是否在直播 - Wearing_FansMedal int //当前佩戴的粉丝牌 - Token string //弹幕钥 - WSURL []string //弹幕链接 - LiveBuvidUpdated time.Time //LIVE_BUVID更新时间 - Stream_url *url.URL //直播Web服务 - Proxy string //全局代理 - AcceptQn map[int]string //允许的直播流质量 - Qn map[int]string //全部直播流质量 - StreamType StreamType //当前直播流类型 - AllStreamType map[string]StreamType //直播流类型 - K_v syncmap.Map //配置文件 - Log *log.Log_interface //日志 - Danmu_Main_mq *mq.Msgq //消息 - ReqPool *pool.Buf[reqf.Req] //请求池 - SerF *web.WebPath //web服务处理 - SerLimit *web.Limits //Web服务连接限制 - StartT time.Time //启动时间 + PID int `json:"pid"` //进程id + Uid int `json:"-"` //client uid + Live []LiveQn `json:"-"` //直播流链接 + Live_qn int `json:"liveQn"` //当前直播流质量 + Live_want_qn int `json:"-"` //期望直播流质量 + Roomid int `json:"roomid"` //房间ID + Cookie syncmap.Map `json:"-"` //Cookie + Title string `json:"title"` //直播标题 + Uname string `json:"uname"` //主播名 + UpUid int `json:"upUid"` //主播uid + Rev float64 `json:"rev"` //营收 + Renqi int `json:"renqi"` //人气 + Watched int `json:"watched"` //观看人数 + OnlineNum int `json:"onlineNum"` //在线人数 + GuardNum int `json:"guardNum"` //舰长数 + ParentAreaID int `json:"parentAreaID"` //父分区 + AreaID int `json:"areaID"` //子分区 + Locked bool `json:"locked"` //直播间封禁 + Note string `json:"note"` //分区排行 + Live_Start_Time time.Time `json:"liveStartTime"` //直播开始时间 + Liveing bool `json:"liveing"` //是否在直播 + Wearing_FansMedal int `json:"-"` //当前佩戴的粉丝牌 + Token string `json:"-"` //弹幕钥 + WSURL []string `json:"-"` //弹幕链接 + LiveBuvidUpdated time.Time `json:"-"` //LIVE_BUVID更新时间 + Stream_url *url.URL `json:"-"` //直播Web服务 + Proxy string `json:"-"` //全局代理 + AcceptQn map[int]string `json:"-"` //允许的直播流质量 + Qn map[int]string `json:"-"` //全部直播流质量 + StreamType StreamType `json:"streamType"` //当前直播流类型 + AllStreamType map[string]StreamType `json:"-"` //直播流类型 + K_v syncmap.Map `json:"-"` //配置文件 + Log *log.Log_interface `json:"-"` //日志 + Danmu_Main_mq *mq.Msgq `json:"-"` //消息 + ReqPool *pool.Buf[reqf.Req] `json:"-"` //请求池 + SerF *web.WebPath `json:"-"` //web服务处理 + SerLimit *web.Limits `json:"-"` //Web服务连接限制 + StartT time.Time `json:"startT"` //启动时间 } type LiveQn struct { @@ -385,6 +385,7 @@ func (t *Common) Init() *Common { "gcCPUFractionPpm": float64(int(memStats.GCCPUFraction*100000000)) / 100, "gcAvgS": float64(int(gcAvgS*100)) / 100, }, + "common": t, }, }, }.Write(w) diff --git a/Reply/stream.go b/Reply/stream.go index 87650bf..798d4bb 100644 --- a/Reply/stream.go +++ b/Reply/stream.go @@ -236,7 +236,7 @@ func (t *M4SStream) fetchCheckStream() bool { t.log.L(`W: `, `live响应错误`) t.common.Live = t.common.Live[1:] } else if r.Response.StatusCode&200 != 200 { - t.log.L(`W: `, `live响应错误`, r.Response.Status, string(r.Respon)) + t.log.L(`W: `, `live响应错误`, r.Response.Status) t.common.Live = t.common.Live[1:] } t.reqPool.Put(r) @@ -685,12 +685,15 @@ func (t *M4SStream) saveStreamFlv() (e error) { }() rc, rw := io.Pipe() - var leastReadUnix atomic.Int64 + var ( + leastReadUnix atomic.Int64 + readTO int64 = 5 + ) leastReadUnix.Store(time.Now().Unix()) // read timeout go func() { - timer := time.NewTicker(5 * time.Second) + timer := time.NewTicker(time.Duration(readTO * int64(time.Second))) defer timer.Stop() for { @@ -698,8 +701,8 @@ func (t *M4SStream) saveStreamFlv() (e error) { case <-cancelC.Done(): return case curT := <-timer.C: - if curT.Unix()-leastReadUnix.Load() > 5 { - t.log.L(`W: `, "5s未接收到任何数据") + if curT.Unix()-leastReadUnix.Load() > readTO { + t.log.L(`W: `, fmt.Sprintf("%vs未接收到有效数据", readTO)) // 5s未接收到任何数据 r.Cancel() return @@ -733,7 +736,6 @@ func (t *M4SStream) saveStreamFlv() (e error) { t.Stream_msg.PushLock_tag(`close`, nil) break } - leastReadUnix.Store(time.Now().Unix()) skip := true select { @@ -755,6 +757,10 @@ func (t *M4SStream) saveStreamFlv() (e error) { //丢弃所有数据 buff.Reset() } + // 存在有效数据 + if len(front_buf) != 0 || len(t.first_buf) != 0 { + leastReadUnix.Store(time.Now().Unix()) + } if len(front_buf) != 0 && len(t.first_buf) == 0 { t.first_buf = make([]byte, len(front_buf)) copy(t.first_buf, front_buf) @@ -790,6 +796,7 @@ func (t *M4SStream) saveStreamFlv() (e error) { NoResponse: true, Async: true, Proxy: t.common.Proxy, + WriteLoopTO: 3000, Header: map[string]string{ `Host`: surl.Host, `User-Agent`: `Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:103.0) Gecko/20100101 Firefox/103.0`, diff --git a/cmd/cmd.go b/cmd/cmd.go index 74b1e73..d232875 100644 --- a/cmd/cmd.go +++ b/cmd/cmd.go @@ -71,6 +71,8 @@ func Cmd() { continue } cmdlog.L(`W: `, "输入错误", inputs) + } else if c.C.Roomid == 0 { + cmdlog.L(`W: `, "输入错误", inputs) } else { if reply.StreamOStatus(c.C.Roomid) { reply.StreamOStop(c.C.Roomid) diff --git a/go.mod b/go.mod index c1f203d..9fe4ce4 100644 --- a/go.mod +++ b/go.mod @@ -4,8 +4,8 @@ go 1.20 require ( github.com/gotk3/gotk3 v0.6.2 - github.com/mdp/qrterminal/v3 v3.0.0 - github.com/qydysky/part v0.28.1-0.20230529171227-d4a6f98e0263 + github.com/mdp/qrterminal/v3 v3.1.1 + github.com/qydysky/part v0.28.1-0.20230602190805-e713cd3914aa github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 golang.org/x/text v0.9.0 @@ -13,17 +13,17 @@ require ( require ( github.com/google/uuid v1.3.0 - golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53 + golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 ) require ( github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect - github.com/mattn/go-isatty v0.0.18 // indirect + github.com/mattn/go-isatty v0.0.19 // indirect github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect lukechampine.com/uint128 v1.3.0 // indirect modernc.org/cc/v3 v3.40.0 // indirect modernc.org/ccgo/v3 v3.16.13 // indirect - modernc.org/libc v1.22.5 // indirect + modernc.org/libc v1.22.6 // indirect modernc.org/mathutil v1.5.0 // indirect modernc.org/memory v1.5.0 // indirect modernc.org/opt v0.1.3 // indirect @@ -43,12 +43,12 @@ require ( github.com/shirou/gopsutil v3.21.11+incompatible // indirect github.com/thedevsaddam/gojsonq/v2 v2.5.2 // indirect github.com/tklauser/go-sysconf v0.3.11 // indirect - github.com/tklauser/numcpus v0.6.0 // indirect - github.com/yusufpapurcu/wmi v1.2.2 // indirect + github.com/tklauser/numcpus v0.6.1 // indirect + github.com/yusufpapurcu/wmi v1.2.3 // indirect golang.org/x/mod v0.10.0 // indirect - golang.org/x/net v0.9.0 // indirect + golang.org/x/net v0.10.0 // indirect golang.org/x/sys v0.8.0 // indirect - golang.org/x/tools v0.8.0 // indirect + golang.org/x/tools v0.9.3 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect modernc.org/sqlite v1.22.1 rsc.io/qr v0.2.0 // indirect diff --git a/go.sum b/go.sum index 9eac1b6..8377a1e 100644 --- a/go.sum +++ b/go.sum @@ -20,19 +20,18 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNU github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/klauspost/compress v1.16.5 h1:IFV2oUNUzZaz+XyusxpLzpzS8Pt5rh0Z16For/djlyI= github.com/klauspost/compress v1.16.5/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= -github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= -github.com/mattn/go-isatty v0.0.18 h1:DOKFKCQ7FNG2L1rbrmstDN4QVRdS89Nkh85u68Uwp98= -github.com/mattn/go-isatty v0.0.18/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= +github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= -github.com/mdp/qrterminal v1.0.1/go.mod h1:Z33WhxQe9B6CdW37HaVqcRKzP+kByF3q/qLxOGe12xQ= -github.com/mdp/qrterminal/v3 v3.0.0 h1:ywQqLRBXWTktytQNDKFjhAvoGkLVN3J2tAFZ0kMd9xQ= -github.com/mdp/qrterminal/v3 v3.0.0/go.mod h1:NJpfAs7OAm77Dy8EkWrtE4aq+cE6McoLXlBqXQEwvE0= +github.com/mdp/qrterminal/v3 v3.1.1 h1:cIPwg3QU0OIm9+ce/lRfWXhPwEjOSKwk3HBwL3HBTyc= +github.com/mdp/qrterminal/v3 v3.1.1/go.mod h1:5lJlXe7Jdr8wlPDdcsJttv1/knsRgzXASyr4dcGZqNU= github.com/miekg/dns v1.1.54 h1:5jon9mWcb0sFJGpnI99tOMhCPyJ+RPVz5b63MQG0VWI= github.com/miekg/dns v1.1.54/go.mod h1:uInx36IzPl7FYnDcMeVWxj9byh7DutNykX4G9Sj60FY= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/qydysky/part v0.28.1-0.20230529171227-d4a6f98e0263 h1:kkumZFaAahNhSFjeY1VCihzG/DOATDtXLAyhsh9R2AE= -github.com/qydysky/part v0.28.1-0.20230529171227-d4a6f98e0263/go.mod h1:IEMpGB0NBl6MklZmoenSpS5ChhaIL79JYFo6mF1UkAU= +github.com/qydysky/part v0.28.1-0.20230602174331-a838e316668d h1:NDk77uktMXlfEXJEooVLlYcOLRr4htDRaa5jzFmGJXU= +github.com/qydysky/part v0.28.1-0.20230602174331-a838e316668d/go.mod h1:xSAOQyg7Wyd+QtXxmHBodYzx3y5HJnfr4R29MXxNKF4= +github.com/qydysky/part v0.28.1-0.20230602190805-e713cd3914aa h1:CBCY0tJB8M0KwmZ/BIoydBrBYV0lpgPLGCgT3YaGSLY= +github.com/qydysky/part v0.28.1-0.20230602190805-e713cd3914aa/go.mod h1:xSAOQyg7Wyd+QtXxmHBodYzx3y5HJnfr4R29MXxNKF4= github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE= github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= @@ -47,18 +46,18 @@ github.com/thedevsaddam/gojsonq/v2 v2.5.2 h1:CoMVaYyKFsVj6TjU6APqAhAvC07hTI6IQen github.com/thedevsaddam/gojsonq/v2 v2.5.2/go.mod h1:bv6Xa7kWy82uT0LnXPE2SzGqTj33TAEeR560MdJkiXs= github.com/tklauser/go-sysconf v0.3.11 h1:89WgdJhk5SNwJfu+GKyYveZ4IaJ7xAkecBo+KdJV0CM= github.com/tklauser/go-sysconf v0.3.11/go.mod h1:GqXfhXY3kiPa0nAXPDIQIWzJbMCB7AmcWpGR8lSZfqI= -github.com/tklauser/numcpus v0.6.0 h1:kebhY2Qt+3U6RNK7UqpYNA+tJ23IBEGKkB7JQBfDYms= github.com/tklauser/numcpus v0.6.0/go.mod h1:FEZLMke0lhOUG6w2JadTzp0a+Nl8PF/GFkQ5UVIcaL4= -github.com/yusufpapurcu/wmi v1.2.2 h1:KBNDSne4vP5mbSWnJbO+51IMOXJB67QiYCSBrubbPRg= -github.com/yusufpapurcu/wmi v1.2.2/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= -golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53 h1:5llv2sWeaMSnA3w2kS57ouQQ4pudlXrR0dCgw51QK9o= -golang.org/x/exp v0.0.0-20230425010034-47ecfdc1ba53/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= +github.com/tklauser/numcpus v0.6.1 h1:ng9scYS7az0Bk4OZLvrNXNSAO2Pxr1XXRAPyjhIx+Fk= +github.com/tklauser/numcpus v0.6.1/go.mod h1:1XfjsgE2zo8GVw7POkMbHENHzVg3GzmoZ9fESEdAacY= +github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw= +github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1 h1:k/i9J1pBpvlfR+9QsetwPyERsqu1GIbi967PQMq3Ivc= +golang.org/x/exp v0.0.0-20230522175609-2e198f4a06a1/go.mod h1:V1LtkGg67GoY2N1AnLN78QLrzxkLyJw7RJb1gzOOz9w= golang.org/x/mod v0.10.0 h1:lFO9qtOdlre5W1jxS3r/4szv2/6iXxScdzjoBMXNhYk= golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/net v0.9.0 h1:aWJ/m6xSmxWBx+V0XRHTlrYrPG56jKsLdTFmsSsCzOM= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o= -golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= +golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/sync v0.2.0 h1:PUR+T4wwASmuSTYdKjYHI5TD22Wy5ogLU5qZCOLxBrI= golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -66,8 +65,8 @@ golang.org/x/sys v0.8.0 h1:EBmGv8NaZBZTWvrbjNoL6HVt+IVy3QDQpJs7VRIw3tU= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/text v0.9.0 h1:2sjJmO8cDvYveuX97RDLsxlyUxLl+GHoLxBiRdHllBE= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/tools v0.8.0 h1:vSDcovVPld282ceKgDimkRSC8kpaH1dgyc9UMzlt84Y= -golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= +golang.org/x/tools v0.9.3 h1:Gn1I8+64MsuTb/HpH+LmQtNas23LhUVr3rYZ0eKuaMM= +golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= @@ -79,8 +78,8 @@ modernc.org/ccgo/v3 v3.16.13 h1:Mkgdzl46i5F/CNR/Kj80Ri59hC8TKAhZrYSaqvkwzUw= modernc.org/ccgo/v3 v3.16.13/go.mod h1:2Quk+5YgpImhPjv2Qsob1DnZ/4som1lJTodubIcoUkY= modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk= modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM= -modernc.org/libc v1.22.5 h1:91BNch/e5B0uPbJFgqbxXuOnxBQjlS//icfQEGmvyjE= -modernc.org/libc v1.22.5/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= +modernc.org/libc v1.22.6 h1:cbXU8R+A6aOjRuhsFh3nbDWXO/Hs4ClJRXYB11KmPDo= +modernc.org/libc v1.22.6/go.mod h1:jj+Z7dTNX8fBScMVNRAYZ/jF91K8fdT2hYMThc3YjBY= modernc.org/mathutil v1.5.0 h1:rV0Ko/6SfM+8G+yKiyI830l3Wuz1zRutdslNoQ0kfiQ= modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= modernc.org/memory v1.5.0 h1:N+/8c5rE6EqugZwHii4IFsaJ7MUhoWX07J5tC/iI5Ds= -- 2.39.2