]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Improve state显示录制的common
authorqydysky <qydysky@foxmail.com>
Fri, 29 Mar 2024 00:08:32 +0000 (08:08 +0800)
committerqydysky <qydysky@foxmail.com>
Fri, 29 Mar 2024 00:08:32 +0000 (08:08 +0800)
CV/Var.go
Reply/F.go
Reply/stream.go

index 4196dfebafe04beae9a76298cfe31e8f23cddec9..1be1c65aca56b0154f1ab073365b350569e70f65 100644 (file)
--- a/CV/Var.go
+++ b/CV/Var.go
@@ -15,6 +15,7 @@ import (
        "os"
        "runtime"
        "strings"
+       "sync"
        "testing"
        "time"
 
@@ -388,6 +389,13 @@ func (t *Common) Init() *Common {
                                        gcAvgS = time.Since(t.StartT).Seconds() / float64(memStats.NumGC)
                                }
 
+                               streams := make(map[int]any)
+
+                               StreamO.Range(func(key, value any) bool {
+                                       streams[key.(int)] = value
+                                       return true
+                               })
+
                                reqState := t.ReqPool.State()
 
                                ResStruct{0, "ok", map[string]any{
@@ -416,7 +424,7 @@ func (t *Common) Init() *Common {
                                                        "gcCPUFractionPpm": float64(int(memStats.GCCPUFraction*100000000)) / 100,
                                                        "gcAvgS":           float64(int(gcAvgS*100)) / 100,
                                                },
-                                               "common": t,
+                                               "common": streams,
                                        },
                                },
                                }.Write(w)
@@ -557,6 +565,11 @@ func (t *Common) loadConf(customConf string) error {
 
 var C = new(Common).Init()
 
+// StreamRec
+// fmp4
+// https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming
+var StreamO = new(sync.Map)
+
 // 消息队列
 type Danmu_Main_mq_item struct {
        Class string
index cec94ed435f7d159d0aee0983f04c5cf4bc8f3ba..4a0c8d2a325f022db0b81035cab8328f5183a2e4 100644 (file)
@@ -271,18 +271,14 @@ func dtos(t time.Duration) string {
        return fmt.Sprintf("%d:%02d:%02d.%02d", int(math.Floor(t.Hours())), M, S, Ns)
 }
 
-// fmp4
-// https://datatracker.ietf.org/doc/html/draft-pantos-http-live-streaming
-var streamO = new(sync.Map)
-
 // 获取实例的Common
 func StreamOCommon(roomid int) (array []*c.Common) {
        if roomid != -1 { //返回特定房间
-               if v, ok := streamO.Load(roomid); ok {
+               if v, ok := c.StreamO.Load(roomid); ok {
                        return []*c.Common{v.(*M4SStream).Common()}
                }
        } else { //返回所有
-               streamO.Range(func(_, v interface{}) bool {
+               c.StreamO.Range(func(_, v interface{}) bool {
                        array = append(array, v.(*M4SStream).Common())
                        return true
                })
@@ -292,7 +288,7 @@ func StreamOCommon(roomid int) (array []*c.Common) {
 
 // 获取实例的录制状态
 func StreamOStatus(roomid int) (Islive bool) {
-       v, ok := streamO.Load(roomid)
+       v, ok := c.StreamO.Load(roomid)
        return ok && (!pctx.Done(v.(*M4SStream).Status) || v.(*M4SStream).exitSign.Islive())
 }
 
@@ -313,13 +309,13 @@ func StreamOStart(roomid int) {
        //实例回调,避免重复录制
        tmp.Callback_start = func(ms *M4SStream) error {
                //流服务添加
-               if _, ok := streamO.LoadOrStore(ms.common.Roomid, tmp); ok {
+               if _, ok := c.StreamO.LoadOrStore(ms.common.Roomid, tmp); ok {
                        return fmt.Errorf("已存在此直播间(%d)录制", ms.common.Roomid)
                }
                return nil
        }
        tmp.Callback_stop = func(ms *M4SStream) {
-               streamO.Delete(ms.common.Roomid) //流服务去除
+               c.StreamO.Delete(ms.common.Roomid) //流服务去除
        }
        tmp.Start()
 }
@@ -332,37 +328,37 @@ func StreamOStart(roomid int) {
 func StreamOStop(roomid int) {
        switch roomid {
        case -2: // 其他房间
-               streamO.Range(func(_roomid, v interface{}) bool {
+               c.StreamO.Range(func(_roomid, v interface{}) bool {
                        if c.C.Roomid == _roomid {
                                return true
                        }
                        if !pctx.Done(v.(*M4SStream).Status) {
                                v.(*M4SStream).Stop()
                        }
-                       streamO.Delete(_roomid)
+                       c.StreamO.Delete(_roomid)
                        return true
                })
        case -1: // 所有房间
-               streamO.Range(func(k, v interface{}) bool {
+               c.StreamO.Range(func(k, v interface{}) bool {
                        if !pctx.Done(v.(*M4SStream).Status) {
                                v.(*M4SStream).Stop()
                        }
-                       streamO.Delete(k)
+                       c.StreamO.Delete(k)
                        return true
                })
        default: // 针对某房间
-               if v, ok := streamO.Load(roomid); ok {
+               if v, ok := c.StreamO.Load(roomid); ok {
                        if !pctx.Done(v.(*M4SStream).Status) {
                                v.(*M4SStream).Stop()
                        }
-                       streamO.Delete(roomid)
+                       c.StreamO.Delete(roomid)
                }
        }
 }
 
 // 实例切断
 func StreamOCut(roomid int) (setTitle func(string)) {
-       if v, ok := streamO.Load(roomid); ok {
+       if v, ok := c.StreamO.Load(roomid); ok {
                if !pctx.Done(v.(*M4SStream).Status) {
                        v.(*M4SStream).Cut()
                        flog.L(`I: `, `已切片 `+strconv.Itoa(roomid))
@@ -1254,7 +1250,7 @@ func init() {
 
                        // 获取当前房间的
                        var currentStreamO *M4SStream
-                       streamO.Range(func(key, value interface{}) bool {
+                       c.StreamO.Range(func(key, value interface{}) bool {
                                if key != nil && c.C.Roomid == key.(int) {
                                        currentStreamO = value.(*M4SStream)
                                        return false
@@ -1495,7 +1491,7 @@ func init() {
 
                        // 获取当前房间的
                        var currentStreamO *M4SStream
-                       streamO.Range(func(key, value interface{}) bool {
+                       c.StreamO.Range(func(key, value interface{}) bool {
                                if key != nil && c.C.Roomid == key.(int) {
                                        currentStreamO = value.(*M4SStream)
                                        return false
index 485f56f1628a30c0efc7169b5366af36a701cd93..d05bbb7f7c97498383e53f16450659e2859bfd81 100644 (file)
@@ -5,6 +5,7 @@ import (
        "context"
        "crypto/md5"
        "encoding/base64"
+       "encoding/json"
        "errors"
        "fmt"
        "io"
@@ -156,6 +157,10 @@ func (link *m4s_link_item) download(reqPool *pool.Buf[reqf.Req], reqConfig reqf.
        }
 }
 
+func (t *M4SStream) MarshalJSON() ([]byte, error) {
+       return json.MarshalIndent(t.common, "", "    ")
+}
+
 func (t *M4SStream) getM4s() (p *m4s_link_item) {
        return t.m4s_pool.Get()
 }