]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Fix panic #101
authorqydysky <qydysky@foxmail.com>
Thu, 1 Feb 2024 16:35:11 +0000 (00:35 +0800)
committerqydysky <qydysky@foxmail.com>
Thu, 1 Feb 2024 16:35:11 +0000 (00:35 +0800)
F/api.go
Reply/stream.go
go.mod
go.sum

index 6daec9c59d9f413cbf91808f9839db1a6ff4704b..b399656e967772ab75cfd315139153962d800d43 100644 (file)
--- a/F/api.go
+++ b/F/api.go
@@ -644,7 +644,7 @@ func (t *GetFunc) getRoomPlayInfo() (missKey []string) {
                req := t.Common.ReqPool.Get()
                defer t.Common.ReqPool.Put(req)
                if err := req.Reqf(reqf.Rval{
-                       Url: "https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?no_playurl=0&mask=1&qn=0&platform=web&protocol=0,1&format=0,2&codec=0,1&room_id=" + Roomid,
+                       Url: "https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?protocol=0,1&format=0,1,2&codec=0,1,2&qn=0&platform=web&ptype=8&dolby=5&panorama=1&room_id=" + Roomid,
                        Header: map[string]string{
                                `Referer`: "https://live.bilibili.com/" + Roomid,
                                `Cookie`:  reqf.Map_2_Cookies_String(Cookie),
@@ -739,7 +739,7 @@ func (t *GetFunc) getRoomPlayInfoByQn() (missKey []string) {
                req := t.Common.ReqPool.Get()
                defer t.Common.ReqPool.Put(req)
                if err := req.Reqf(reqf.Rval{
-                       Url: "https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?no_playurl=0&mask=1&qn=" + strconv.Itoa(t.Live_qn) + "&platform=web&protocol=0,1&format=0,2&codec=0,1&room_id=" + Roomid,
+                       Url: fmt.Sprintf("https://api.live.bilibili.com/xlive/web-room/v2/index/getRoomPlayInfo?room_id=%s&protocol=0,1&format=0,1,2&codec=0,1,2&qn=%d&platform=web&ptype=8&dolby=5&panorama=1", Roomid, t.Live_qn),
                        Header: map[string]string{
                                `Referer`: "https://live.bilibili.com/" + Roomid,
                                `Cookie`:  reqf.Map_2_Cookies_String(Cookie),
index 219c7b38d8ae3166492dc5273e9e4150bb1b799b..f398206a03ac2d116a89702646c45fa9d7eba530 100644 (file)
@@ -17,6 +17,7 @@ import (
        "path/filepath"
        "strconv"
        "strings"
+       "sync"
        "sync/atomic"
        "time"
 
@@ -50,7 +51,7 @@ type M4SStream struct {
        first_buf            []byte                //m4s起始块 or flv起始块
        frameCount           uint                  //关键帧数量
        boot_buf             []byte                //快速启动缓冲
-       boot_buf_locker      funcCtrl.BlockFunc
+       boot_buf_locker      sync.RWMutex
        last_m4s             *m4s_link_item           //最后一个切片
        m4s_pool             *pool.Buf[m4s_link_item] //切片pool
        common               *c.Common                //通用配置副本
@@ -237,10 +238,8 @@ func (t *M4SStream) fetchCheckStream() bool {
                }
 
                if e := r.Reqf(reqf.Rval{
-                       Url:       v.Url,
-                       Retry:     10,
-                       SleepTime: 1000,
-                       Proxy:     t.common.Proxy,
+                       Url:   v.Url,
+                       Proxy: t.common.Proxy,
                        Header: map[string]string{
                                `User-Agent`:      c.UA,
                                `Accept`:          `*/*`,
@@ -764,7 +763,10 @@ func (t *M4SStream) saveStreamFlv() (e error) {
                                                        }
                                                        t.bootBufPush(keyframe.GetPureBuf())
                                                        keyframe.Reset()
-                                                       t.Stream_msg.PushLock_tag(`data`, t.boot_buf)
+                                                       _ = t.bootBufRead(func(data []byte) error {
+                                                               t.Stream_msg.PushLock_tag(`data`, data)
+                                                               return nil
+                                                       })
                                                        t.frameCount += 1
                                                        t.msg.Push_tag(`keyFrame`, t)
                                                }
@@ -1021,7 +1023,10 @@ func (t *M4SStream) saveStreamM4s() (e error) {
                        if !keyframe.IsEmpty() {
                                t.bootBufPush(keyframe.GetPureBuf())
                                keyframe.Reset()
-                               t.Stream_msg.PushLock_tag(`data`, t.boot_buf)
+                               _ = t.bootBufRead(func(data []byte) error {
+                                       t.Stream_msg.PushLock_tag(`data`, data)
+                                       return nil
+                               })
                                t.frameCount += 1
                                t.msg.Push_tag(`keyFrame`, t)
                        }
@@ -1435,10 +1440,15 @@ func (t *M4SStream) PusherToHttp(conn net.Conn, w http.ResponseWriter, r *http.R
        }
 
        //写入快速启动缓冲
-       if len(t.boot_buf) != 0 {
-               if _, err := w.Write(t.boot_buf); err != nil {
-                       return err
+       if err := t.bootBufRead(func(data []byte) error {
+               if len(data) != 0 {
+                       if _, err := w.Write(data); err != nil {
+                               return err
+                       }
                }
+               return nil
+       }); err != nil {
+               return err
        }
 
        var cancelRec = t.Stream_msg.Pull_tag_async(map[string]func([]byte) bool{
@@ -1474,10 +1484,16 @@ func (t *M4SStream) PusherToHttp(conn net.Conn, w http.ResponseWriter, r *http.R
 }
 
 func (t *M4SStream) bootBufPush(buf []byte) {
-       t.boot_buf_locker.Block()
-       defer t.boot_buf_locker.UnBlock()
+       t.boot_buf_locker.Lock()
+       defer t.boot_buf_locker.Unlock()
        if len(t.boot_buf) < len(buf) {
                t.boot_buf = append(t.boot_buf, make([]byte, len(buf)-len(t.boot_buf))...)
        }
        t.boot_buf = t.boot_buf[:copy(t.boot_buf, buf)]
 }
+
+func (t *M4SStream) bootBufRead(r func(data []byte) error) error {
+       t.boot_buf_locker.RLock()
+       defer t.boot_buf_locker.RUnlock()
+       return r(t.boot_buf)
+}
diff --git a/go.mod b/go.mod
index a6a8c3191603a40872bcaf5b7e2dc190c173be8f..7faad9d3499ce6096608e15ff856b4df194fdc93 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -12,7 +12,7 @@ require (
 )
 
 require (
-       github.com/google/uuid v1.5.0
+       github.com/google/uuid v1.6.0
        golang.org/x/exp v0.0.0-20240119083558-1b970713d09a
 )
 
@@ -24,7 +24,7 @@ require (
        lukechampine.com/uint128 v1.3.0 // indirect
        modernc.org/cc/v3 v3.41.0 // indirect
        modernc.org/ccgo/v3 v3.16.15 // indirect
-       modernc.org/libc v1.40.6 // indirect
+       modernc.org/libc v1.40.10 // indirect
        modernc.org/mathutil v1.6.0 // indirect
        modernc.org/memory v1.7.2 // indirect
        modernc.org/opt v0.1.3 // indirect
@@ -39,14 +39,14 @@ require (
        github.com/go-ole/go-ole v1.3.0 // indirect
        github.com/go-sql-driver/mysql v1.7.1
        github.com/gorilla/websocket v1.5.1 // indirect
-       github.com/klauspost/compress v1.17.4 // indirect
+       github.com/klauspost/compress v1.17.5 // indirect
        github.com/lib/pq v1.10.9
        github.com/miekg/dns v1.1.58 // indirect
        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.13 // indirect
        github.com/tklauser/numcpus v0.7.0 // indirect
-       github.com/yusufpapurcu/wmi v1.2.3 // indirect
+       github.com/yusufpapurcu/wmi v1.2.4 // indirect
        golang.org/x/mod v0.14.0 // indirect
        golang.org/x/net v0.20.0 // indirect
        golang.org/x/sys v0.16.0 // indirect
diff --git a/go.sum b/go.sum
index 370ea9c97c95b7434359ecc31be50597d8c89643..88981e8ae7209bf36adc70a5551c9bc2cb7241ed 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -13,16 +13,16 @@ github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
 github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26 h1:Xim43kblpZXfIBQsbuBVKCudVG457BR2GZFIz3uw3hQ=
 github.com/google/pprof v0.0.0-20221118152302-e6195bd50e26/go.mod h1:dDKJzRmX4S37WGHujM7tX//fmj1uioxKzKxz3lo4HJo=
-github.com/google/uuid v1.5.0 h1:1p67kYwdtXjb0gL0BPiP1Av9wiZPo5A8z2cWkTZ+eyU=
-github.com/google/uuid v1.5.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/gorilla/websocket v1.5.1 h1:gmztn0JnHVt9JZquRuzLw3g4wouNVzKL15iLr/zn/QY=
 github.com/gorilla/websocket v1.5.1/go.mod h1:x3kM2JMyaluk02fnUJpQuwD2dCS5NDG2ZHL0uE0tcaY=
 github.com/gotk3/gotk3 v0.6.2 h1:sx/PjaKfKULJPTPq8p2kn2ZbcNFxpOJqi4VLzMbEOO8=
 github.com/gotk3/gotk3 v0.6.2/go.mod h1:/hqFpkNa9T3JgNAE2fLvCdov7c5bw//FHNZrZ3Uv9/Q=
 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs=
 github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8=
-github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4=
-github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
+github.com/klauspost/compress v1.17.5 h1:d4vBd+7CHydUqpFBgUEKkSdtSugf9YFmSkvUYPquI5E=
+github.com/klauspost/compress v1.17.5/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM=
 github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw=
 github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
 github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
@@ -53,8 +53,8 @@ github.com/tklauser/go-sysconf v0.3.13 h1:GBUpcahXSpR2xN01jhkNAbTLRk2Yzgggk8IM08
 github.com/tklauser/go-sysconf v0.3.13/go.mod h1:zwleP4Q4OehZHGn4CYZDipCgg9usW5IJePewFCGVEa0=
 github.com/tklauser/numcpus v0.7.0 h1:yjuerZP127QG9m5Zh/mSO4wqurYil27tHrqwRoRjpr4=
 github.com/tklauser/numcpus v0.7.0/go.mod h1:bb6dMVcj8A42tSE7i32fsIUCbQNllK5iDguyOZRUzAY=
-github.com/yusufpapurcu/wmi v1.2.3 h1:E1ctvB7uKFMOJw3fdOW32DwGE9I7t++CRUEMKvFoFiw=
-github.com/yusufpapurcu/wmi v1.2.3/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
+github.com/yusufpapurcu/wmi v1.2.4 h1:zFUKzehAFReQwLys1b/iSMl+JQGSCSjtVqQn9bBrPo0=
+github.com/yusufpapurcu/wmi v1.2.4/go.mod h1:SBZ9tNy3G9/m5Oi98Zks0QjeHVDvuK0qfxQmPyzfmi0=
 golang.org/x/exp v0.0.0-20240119083558-1b970713d09a h1:Q8/wZp0KX97QFTc2ywcOE0YRjZPVIx+MXInMzdvQqcA=
 golang.org/x/exp v0.0.0-20240119083558-1b970713d09a/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08=
 golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0=
@@ -87,8 +87,8 @@ modernc.org/ccorpus v1.11.6 h1:J16RXiiqiCgua6+ZvQot4yUuUy8zxgqbqEEUuGPlISk=
 modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ=
 modernc.org/httpfs v1.0.6 h1:AAgIpFZRXuYnkjftxTAZwMIiwEqAfk8aVB2/oA6nAeM=
 modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM=
-modernc.org/libc v1.40.6 h1:141JHq3SjhOOCjECBgD4K8VgTFOy19CnHwroC08DAig=
-modernc.org/libc v1.40.6/go.mod h1:YAXkAZ8ktnkCKaN9sw/UDeUVkGYJ/YquGO4FTi5nmHE=
+modernc.org/libc v1.40.10 h1:oCWzNF5k6gedzmiqtOQACV07U4RxWy2qPBTyVWwObjw=
+modernc.org/libc v1.40.10/go.mod h1:YAXkAZ8ktnkCKaN9sw/UDeUVkGYJ/YquGO4FTi5nmHE=
 modernc.org/mathutil v1.6.0 h1:fRe9+AmYlaej+64JsEEhoWuAYBkOtQiMEU7n/XgfYi4=
 modernc.org/mathutil v1.6.0/go.mod h1:Ui5Q9q1TR2gFm0AQRqQUaBWFLAhQpCwNcuhBOSedWPo=
 modernc.org/memory v1.7.2 h1:Klh90S215mmH8c9gO98QxQFsY+W451E8AnzjoE2ee1E=