]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
更改帧匹配规则
authorqydysky <qydysky@foxmail.com>
Thu, 13 May 2021 13:20:25 +0000 (21:20 +0800)
committerqydysky <qydysky@foxmail.com>
Thu, 13 May 2021 13:20:25 +0000 (21:20 +0800)
人气显示优化
flv流修复

F/api.go
F/xinxin.go
Reply/F.go
Reply/Reply.go
Reply/flvDecode.go
Reply/gtk.go
Reply/tts.go
Send/Send.go
Send/Send_gift.go
Send/Send_pm.go

index a3e32d488f3e51a71060f659042030cbba1733c5..af6b75c5413c38ae919fa22d89828dcda2c51e7f 100644 (file)
--- a/F/api.go
+++ b/F/api.go
@@ -242,7 +242,7 @@ func Info(UpUid int) (info J.Info) {
                if err := req.Reqf(reqf.Rval{
                        Url:`https://api.bilibili.com/x/space/acc/info?mid=`+strconv.Itoa(UpUid)+`&jsonp=jsonp`,
                        Proxy:c.Proxy,
-                       Timeout:10,
+                       Timeout:10*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -448,7 +448,7 @@ func getInfoByRoom() (missKey []string) {
                                `Referer`:"https://live.bilibili.com/" + Roomid,
                        },
                        Proxy:c.Proxy,
-                       Timeout:10,
+                       Timeout:10*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -534,7 +534,7 @@ func getRoomPlayInfo() (missKey []string) {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:10,
+                       Timeout:10*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -695,7 +695,7 @@ func getRoomPlayInfoByQn() (missKey []string) {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:10,
+                       Timeout:10*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -847,7 +847,7 @@ func getDanmuInfo() (missKey []string) {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:10,
+                       Timeout:10*1000,
                });err != nil {
                        apilog.L(`E: `,err)
                        return
@@ -892,7 +892,7 @@ func Get_face_src(uid string) (string) {
                        `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                },
                Proxy:c.Proxy,
-               Timeout:10,
+               Timeout:10*1000,
                Retry:2,
        });err != nil {
                apilog.L(`E: `,err)
@@ -956,7 +956,7 @@ func Get_HotRank() (missKey []string) {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:3,
+                       Timeout:3*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -1026,7 +1026,7 @@ func Get_guardNum() (missKey []string) {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:3,
+                       Timeout:3*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -1147,7 +1147,7 @@ func Get_cookie() (missKey []string) {
                if e := r.Reqf(reqf.Rval{
                        Url:`https://passport.bilibili.com/qrcode/getLoginUrl`,
                        Proxy:c.Proxy,
-                       Timeout:10,
+                       Timeout:10*1000,
                        Retry:2,
                });e != nil {
                        apilog.L(`E: `,e)
@@ -1250,7 +1250,7 @@ func Get_cookie() (missKey []string) {
                                        `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                                },
                                Proxy:c.Proxy,
-                               Timeout:10,
+                               Timeout:10*1000,
                                Retry:2,        
                        });e != nil {
                                apilog.L(`E: `,e)
@@ -1371,7 +1371,7 @@ func Get_list_in_room() (array []TGet_list_in_room) {
                                        `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                                },
                                Proxy:c.Proxy,
-                               Timeout:10,
+                               Timeout:10*1000,
                                Retry:2,
                        });e != nil {
                                apilog.L(`E: `,e)
@@ -1451,7 +1451,7 @@ func Get_weared_medal() (item TGet_weared_medal) {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:10,
+                       Timeout:10*1000,
                        Retry:2,
                });e != nil {
                        apilog.L(`E: `,e)
@@ -1560,7 +1560,7 @@ func CheckSwitch_FansMedal() (missKey []string) {
                                `Referer`: `https://passport.bilibili.com/login`,
                        },
                        Proxy:c.Proxy,
-                       Timeout:10,
+                       Timeout:10*1000,
                        Retry:2,
                });e != nil {
                        apilog.L(`E: `,e)
@@ -1619,7 +1619,7 @@ func Dosign() {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:3,
+                       Timeout:3*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -1666,7 +1666,7 @@ func Dosign() {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:3,
+                       Timeout:3*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -1722,7 +1722,7 @@ func Get_LIVE_BUVID() (missKey []string) {
                                `Upgrade-Insecure-Requests`: `1`,
                        },
                        Proxy:c.Proxy,
-                       Timeout:3,
+                       Timeout:3*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -1877,7 +1877,7 @@ func F_x25Kn() {
                                },
                                PostStr:url.PathEscape(PostStr),
                                Proxy:c.Proxy,
-                               Timeout:5,
+                               Timeout:5*1000,
                                Retry:2,
                        });err != nil {
                                if !reqf.IsTimeout(err) {
@@ -1986,7 +1986,7 @@ func F_x25Kn() {
                                },
                                PostStr:url.PathEscape(PostStr),
                                Proxy:c.Proxy,
-                               Timeout:5,
+                               Timeout:5*1000,
                                Retry:2,
                        });err != nil {
                                if !reqf.IsTimeout(err) {
@@ -2068,7 +2068,7 @@ func Gift_list() (list []Gift_list_type_Data_List) {
                        `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                },
                Proxy:c.Proxy,
-               Timeout:3,
+               Timeout:3*1000,
                Retry:2,
        });err != nil {
                apilog.L(`E: `,err)
@@ -2135,7 +2135,7 @@ func Silver_2_coin() (missKey []string) {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:3,
+                       Timeout:3*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -2195,7 +2195,7 @@ func Silver_2_coin() (missKey []string) {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:3,
+                       Timeout:3*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -2258,7 +2258,7 @@ func Silver_2_coin() (missKey []string) {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:3,
+                       Timeout:3*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -2328,7 +2328,7 @@ func Feed_list() (Uplist []UpItem) {
        req := reqf.New()
        for pageNum:=1; true; pageNum+=1 {
                if err := req.Reqf(reqf.Rval{
-                       Url:`https://api.live.bilibili.com/relation/v1/feed/feed_list?page=`+strconv.Itoa(pageNum)+`&pagesize=10`,
+                       Url:`https://api.live.bilibili.com/xlive/web-ucenter/v1/xfetter/FeedList?page=`+strconv.Itoa(pageNum)+`&pagesize=10`,
                        Header:map[string]string{
                                `Host`: `api.live.bilibili.com`,
                                `User-Agent`: `Mozilla/5.0 (X11; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0`,
@@ -2343,7 +2343,7 @@ func Feed_list() (Uplist []UpItem) {
                                `Cookie`:reqf.Map_2_Cookies_String(Cookie),
                        },
                        Proxy:c.Proxy,
-                       Timeout:3,
+                       Timeout:3*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -2393,7 +2393,7 @@ func GetHistory(Roomid_int int) (j J.GetHistory) {
                                `Referer`:"https://live.bilibili.com/" + Roomid,
                        },
                        Proxy:c.Proxy,
-                       Timeout:10,
+                       Timeout:10*1000,
                        Retry:2,
                });err != nil {
                        apilog.L(`E: `,err)
@@ -2432,7 +2432,7 @@ func IsConnected() bool {
        if err := req.Reqf(reqf.Rval{
                Url:"https://www.bilibili.com",
                Proxy:c.Proxy,
-               Timeout:10,
+               Timeout:10*1000,
                JustResponseCode:true,
        });err != nil {
                apilog.L(`W: `,`网络中断`,err)
index a483dd6680d0a0ef2c8dd27181cd7af04f0a9021..b4aa1972405d09595cdbfe3425e5508996c2e3be 100644 (file)
@@ -148,7 +148,7 @@ func Wasm(uid uintptr,s RT) (o string) {//maxloop 超时重试
                                Url:nodeJsUrl,
                                PostStr:toNodeJsString(s),
                                Proxy:c.Proxy,
-                               Timeout:3,
+                               Timeout:3*1000,
                        });err != nil {
                                wslog.L(`E: `,err)
                                o = Wasm(uid, s)
index b5ed4b9505a0b13a3390d107d76168ccee4670db..c48bccad3b20e3a03592bbc30af1c8b3e86b54b7 100644 (file)
@@ -290,9 +290,9 @@ func Savestreamf(){
                        if e := r.Reqf(reqf.Rval{
                                Url:m3u8_url,
                                Retry:4,
-                               SleepTime:1,
+                               SleepTime:1000,
                                Proxy:c.Proxy,
-                               Timeout:3,
+                               Timeout:3*1000,
                                Header:map[string]string{
                                        `Host`: url_struct.Host,
                                        `User-Agent`: `Mozilla/5.0 (X11; Linux x86_64; rv:83.0) Gecko/20100101 Firefox/83.0`,
@@ -429,26 +429,32 @@ func Savestreamf(){
                })
 
                {//重试
-                       rr := reqf.New()
+                       r := reqf.New()
                        go func(){
                                savestream.cancel.Wait()
-                               rr.Close()
+                               r.Close()
                        }()
                        l.L(`I: `,"尝试连接live")
-                       if e := rr.Reqf(reqf.Rval{
+                       if e := r.Reqf(reqf.Rval{
                                Url:c.Live[0],
                                Retry:10,
-                               SleepTime:5,
+                               SleepTime:1000,
                                Proxy:c.Proxy,
                                Header:map[string]string{
                                        `Cookie`:reqf.Map_2_Cookies_String(CookieM),
                                },
-                               Timeout:5,
+                               Timeout:5*1000,
                                JustResponseCode:true,
                        }); e != nil{l.L(`W: `,e)}
 
-                       if rr.Response == nil ||
-                       rr.Response.StatusCode != 200 {
+                       if r.Response == nil {
+                               l.L(`W: `,`live响应错误`)
+                               savestream.wait.Done()
+                               savestream.cancel.Done()
+                               time.Sleep(time.Second*5)
+                               continue
+                       } else if r.Response.StatusCode != 200 {
+                               l.L(`W: `,`live响应错误`,r.Response.Status,string(r.Respon))
                                savestream.wait.Done()
                                savestream.cancel.Done()
                                time.Sleep(time.Second*5)
@@ -461,62 +467,11 @@ func Savestreamf(){
                        Ass_f(savestream.path, time.Now())
                        
                        // no expect qn
-                       exit_chan := make(chan struct{})
-                       {
-                               // go func(){//flv stream
-                               //      byteC := make(chan []byte,1<<17)
-       
-                               //      go func(){
-                               //              for !p.Checkfile().IsExist(savestream.path + ".flv.dtmp") {
-                               //                      select {
-                               //                      case <-exit_chan:return;
-                               //                      case <-time.After(time.Second):;
-                               //                      }
-                               //              }
-                               //              for {
-                               //                      if err := Stream(savestream.path + ".flv.dtmp",&savestream.flv_front,byteC,exit_chan);err != nil {
-                               //                              flog.L(`T: `,err);
-                               //                              return
-                               //                      }
-                               //                      select {
-                               //                      case <-exit_chan:return;
-                               //                      default:;
-                               //                      }
-                               //              }
-                               //      }()
-       
-                               //      var buf []byte
-                               //      for {
-                               //              select{
-                               //              case res :=<- byteC:
-                               //                      buf = append(buf, res...)
-                               //                      if len(byteC) != 0 {break}
-                               //                      savestream.flv_stream.Push_tag("stream",buf)
-                               //                      buf = []byte{}
-                               //              case <- exit_chan:
-                               //                      savestream.flv_stream.Push_tag("close",nil)
-                               //                      return;
-                               //              }
-                               //      }
-                               // }()
-                       }
-
-                       // go func(){
-                       //      var count int = 5
-                       //      for count > 0 && c.Live_want_qn < c.Live_qn {
-                       //              count -= 1
-                       //              select{
-                       //              case <- time.After(time.Minute*2):;
-                       //              case <- exit_chan:return;
-                       //              }
-                       //              F.Get(`Liveing`)
-                       //              if !c.Liveing {break}
-       
-                       //              F.Get(`Live`)
-                       //              if len(c.Live)==0 {break}
-                       //      }
-                       //      Savestream_wait()
-                       // }()
+                       exit_chan := s.Init()
+                       go func(){
+                               savestream.cancel.Wait()
+                               exit_chan.Done()
+                       }()
 
                        type link_stream struct {
                                id *idpool.Id
@@ -579,15 +534,15 @@ func Savestreamf(){
                                                defer reqs_func_block.UnBlock()
        
                                                for i:=0;i<len(reqs_remove_id);i+=1 {
-                                                       if reqs_remove_id[i].id == req.id.Id {return false}
+                                                       if reqs_remove_id[i].id == req.id.Id {
+                                                               req.close()
+                                                               return false
+                                                       }
                                                }
 
                                                var reqs_keyframe_index int = len(reqs_used_id)
                                                {
                                                        var isnew bool = true
-                                                       // for i:=0;i<len(reqs_used_id);i+=1 {
-                                                       //      fmt.Println(reqs_used_id[i].id,i)
-                                                       // }
                                                        for i:=0;i<len(reqs_used_id);i+=1 {
                                                                if reqs_used_id[i].id == req.id.Id {
                                                                        reqs_keyframe_index = i
@@ -605,7 +560,7 @@ func Savestreamf(){
                                                }
 
                                                if len(reqs_used_id) == 1 {
-                                                       // fmt.Println(`单req写入`,len(req.keyframe))
+                                                       // l.L(`T: `,"单req写入",len(req.keyframe))
                                                        last_keyframe_timestamp,_ = Keyframe_timebase(req.keyframe,last_keyframe_timestamp)
 
                                                        for i:=0;i<len(req.keyframe);i+=1 {
@@ -632,6 +587,9 @@ func Savestreamf(){
        
                                                if success_last_keyframe_timestamp,b,merged := Merge_stream(reqs_keyframe,last_keyframe_timestamp);merged == 0 {
                                                        // fmt.Println(`merge失败,reqs_keyframe[1]`,reqs_keyframe[1][0][:11],reqs_keyframe[1][len(reqs_keyframe[1])-1][:11])
+                                                       size := 0
+                                                       for i:=1;i<len(reqs_keyframe);i+=1 {size += len(reqs_keyframe[i])}
+
                                                        if reqs_keyframe_index == 0 {
                                                                // l.L(`T: `,"flv拼合失败,reqs_keyframe[0]写入")
                                                                // fmt.Println(`merge失败,reqs_keyframe[0]写入`,len(req.keyframe))
@@ -644,51 +602,30 @@ func Savestreamf(){
                                                                        out.Write(req.keyframe[i])
                                                                }
                                                                // reqs_keyframe[0] = [][]byte{reqs_keyframe[0][len(reqs_keyframe[0])-1]} 
-                                                       } else if len(reqs_keyframe[len(reqs_used_id)-1]) > 3 {
-                                                               l.L(`T: `,"flv强行拼合")
-                                                               // fmt.Println(`强行merge`)
-                                                               // reqs_remove_id = append(reqs_remove_id, reqs_used_id[0])
-                                                               // last_time_stamp = int(F.Btoi32([]byte{reqs_keyframe[0][0][7], reqs_keyframe[0][0][4], reqs_keyframe[0][0][5], reqs_keyframe[0][0][6]},0))
-
-                                                               reqs_keyframe = [][][]byte{}
+                                                       } else if size > 4 {
+                                                               if reqs_keyframe_index == len(reqs_used_id)-1 {
+                                                                       l.L(`T: `,"flv强行拼合")
                                                                
-                                                               for i:=0;i<len(reqs_used_id)-1;i+=1 {
-                                                                       reqs_used_id[i].close()
-                                                                       // reqs_remove_id = append(reqs_remove_id, reqs_used_id[i])
-                                                               }
-                                                               // reqs_used_id = []uintptr{reqs_used_id[len(reqs_used_id)-1]}
-                                                               reqs_used_id = reqs_used_id[1:]
-
-                                                               last_keyframe_timestamp,_ = Keyframe_timebase(req.keyframe,last_keyframe_timestamp)
-
-                                                               for i:=0;i<len(req.keyframe);i+=1 {
-                                                                       //stream
-                                                                       savestream.flv_stream.Push_tag("stream",req.keyframe[i])
-                                                                       out.Write(req.keyframe[i])
+                                                                       for i:=0;i<reqs_keyframe_index;i+=1 {
+                                                                               reqs_remove_id = append(reqs_remove_id, reqs_used_id[i])
+                                                                               reqs_used_id[i].close()
+                                                                       }
+                                                                       reqs_used_id = reqs_used_id[reqs_keyframe_index:]
+       
+                                                                       last_keyframe_timestamp,_ = Keyframe_timebase(req.keyframe,last_keyframe_timestamp)
+       
+       
+                                                                       for i:=0;i<len(req.keyframe);i+=1 {
+                                                                               //stream
+                                                                               savestream.flv_stream.Push_tag("stream",req.keyframe[i])
+                                                                               out.Write(req.keyframe[i])
+                                                                       }
+       
+                                                                       reqs_keyframe = [][][]byte{}
+                                                               } else {
+                                                                       req.close()
+                                                                       return false
                                                                }
-                                                       } else if len(reqs_keyframe[len(reqs_used_id)-1]) > 1 {
-                                                               // fmt.Println(`merge 旧连接退出`)
-                                                               // for k,v := range reqs_used_id {
-                                                               //      fmt.Println(k,v.id)
-                                                               // }
-                                                               reqs_used_id[0].close()
-                                                               // reqs_used_id = reqs_used_id[1:]
-                                                               // last_time_stamp = int(F.Btoi32([]byte{reqs_keyframe[0][0][7], reqs_keyframe[0][0][4], reqs_keyframe[0][0][5], reqs_keyframe[0][0][6]},0))
-
-                                                               // reqs_keyframe = [][][]byte{}
-                                                               
-                                                               // for i:=0;i<len(reqs_used_id)-1;i+=1 {
-                                                               //      reqs_remove_id = append(reqs_remove_id, reqs_used_id[i])
-                                                               // }
-                                                               // reqs_used_id = []uintptr{reqs_used_id[len(reqs_used_id)-1]}
-
-                                                               // last_keyframe_timestamp,_ = Keyframe_timebase(req.keyframe,last_keyframe_timestamp)
-
-                                                               // for i:=0;i<len(req.keyframe);i+=1 {
-                                                               //      //stream
-                                                               //      savestream.flv_stream.Push_tag("stream",req.keyframe[i])
-                                                               //      out.Write(req.keyframe[i])
-                                                               // }
                                                        }
                                                } else {
                                                        // fmt.Println(`merge成功`,len(b))
@@ -696,17 +633,13 @@ func Savestreamf(){
 
                                                        last_keyframe_timestamp = success_last_keyframe_timestamp
        
-                                                       if len(reqs_remove_id) > 5 {reqs_remove_id = reqs_remove_id[1:]}
-
                                                        for i:=0;i<merged;i+=1 {
                                                                reqs_remove_id = append(reqs_remove_id, reqs_used_id[i])
                                                                reqs_used_id[i].close()
-                                                               // reqs_keyframe[i] = [][]byte{}
-                                                               // reqs_remove_id = append(reqs_remove_id, reqs_used_id[i])
                                                        }
                                                        reqs_keyframe = [][][]byte{}
                                                        
-                                                       reqs_used_id = reqs_used_id[merged:merged+1]
+                                                       reqs_used_id = reqs_used_id[merged:]
 
                                                        //stream
                                                        savestream.flv_stream.Push_tag("stream",b)
@@ -718,6 +651,9 @@ func Savestreamf(){
                                        // 11区        1
                                        `close`:func(data interface{})(bool){
                                                // defer l.L(`I: `,"处理退出")
+                                               for i:=0;i<len(reqs_used_id);i+=1 {
+                                                       reqs_used_id[i].close()
+                                               }
                                                reqs_used_id = []id_close{}
                                                // reqs_remove_id = []id_close{}
                                                reqs_keyframe = [][][]byte{}
@@ -729,8 +665,13 @@ func Savestreamf(){
 
                        //连接保持
                        for {
-                               //获取超时时间
-                               link,exp,e := flv_get_link(c.Live[0])
+                               //随机选取服务器,获取超时时间
+
+                               live_index := 0
+                               if len(c.Live) > 0 {
+                                       live_index = int(p.Rand().MixRandom(0,int64(len(c.Live)-1)))
+                               }
+                               link,exp,e := flv_get_link(c.Live[live_index])
                                if e != nil {
                                        l.L(`W: `,`流链接获取错误`,e)
                                        break
@@ -740,6 +681,7 @@ func Savestreamf(){
                                var (
                                        bc = make(chan []byte,1<<17)
                                        req = reqf.New()
+                                       req_exit = s.Init()
                                )
 
                                l.L(`T: `,`新建请求`,req.Id())
@@ -747,13 +689,20 @@ func Savestreamf(){
                                //新建请求
                                go func(r *reqf.Req,rval reqf.Rval){
                                        go func(){
-                                               savestream.cancel.Wait()
-                                               req.Close()
+                                               select {
+                                               case <-exit_chan.WaitC():;
+                                               case <-req_exit.WaitC():;
+                                               }
+                                               r.Close()
                                        }()
-
-                                       if e := r.Reqf(rval);e != nil {
+                                       defer req_exit.Done()
+                                       e := r.Reqf(rval)
+                                       if r.Response == nil {
                                                l.L(`W: `,`请求退出`,r.Id(),e)
-                                               return
+                                       } else if r.Response.StatusCode != 200 {
+                                               l.L(`W: `,`请求退出`,r.Id(),e,r.Response.Status,string(r.Respon))
+                                       } else {
+                                               l.L(`W: `,`请求退出`,r.Id(),e,r.Response.Status)
                                        }
                                }(req,reqf.Rval{
                                        Url:link,
@@ -763,103 +712,79 @@ func Savestreamf(){
                                        },
                                        //SaveToPath:savestream.path + ".flv",
                                        SaveToChan:bc,
-                                       Timeout:int(int64(exp) - p.Sys().GetSTime()),
-                                       ReadTimeout:5,
+                                       Timeout:int(int64(exp) - p.Sys().GetSTime())*1000,
+                                       ReadTimeout:5*1000,
+                                       ConnectTimeout:10*1000,
                                })
                                
                                //返回通道
-                               var (
-                                       item = link_stream{
+                               var item = link_stream{
                                                close:req.Close,
                                                id:id_pool.Get(),
                                        }
-                                       http_error = make(chan error)
-                               )
                                l.L(`T: `,`新建连接`,item.id.Id)
 
                                //解析
-                               go func(http_error chan error,bc chan[]byte,item *link_stream){
-                                       // defer l.L(`I: `,"解析退出")
+                               go func(bc chan[]byte,item *link_stream,exit_chan *s.Signal){
                                        var (
                                                buf []byte
                                                skip_buf_size int
                                        )
-                                       for {
+                                       defer req_exit.Done()
+                                       defer l.L(`W: `,`连接退出`,item.id.Id)
+                                       for exit_chan.Islive() && req_exit.Islive() {
                                                select {
-                                               case <-exit_chan:return;
+                                               case <-exit_chan.WaitC():return;
+                                               case <-req_exit.WaitC():return;
                                                case b :=<- bc:
                                                        if len(b) == 0 {
                                                                // fmt.Println(`req退出`,item.id.Id)
                                                                id_pool.Put(item.id)
-                                                               http_error <- errors.New(`EOF`)
                                                                // reqs.Push_tag(`closereq`,*item)
                                                                return
                                                        }
-
+       
                                                        buf = append(buf, b...)
-                                                       // var tmp_buf []byte
-                                                       // {
-                                                       //      tmp_buf = make([]byte,len(buf))
-                                                       //      copy(tmp_buf, buf)
-                                                       // }
-                                                       // fmt.Println(buf[:11])
-
+       
                                                        if len(buf) < skip_buf_size {break}
-
+       
                                                        front,list,_ := Seach_stream_tag(buf)
-
+       
                                                        if len(front) != 0 && len(item.front) == 0 {
                                                                // fmt.Println(item.id.Id,`获取到header`,len(front))
                                                                item.front = make([]byte,len(front))
                                                                copy(item.front, front)
                                                        }
-
+       
                                                        if len(list) == 0 || len(item.front) == 0 {
                                                                // fmt.Println(`再次查询bufsize`,skip_buf_size)
                                                                skip_buf_size = 2*len(buf)
                                                                break
                                                        }
-
-                                                       // total := 0
-                                                       // var tmp_buf []byte
-                                                       // {
-                                                       //      tmp_buf = make([]byte,len(buf))
-                                                       //      copy(tmp_buf, buf)
-                                                       // }
+       
                                                        item.keyframe = list
-                                                       // item.keyframe = make([][]byte,len(list))
-                                                       // for i:=0;i<len(list);i+=1 {
-                                                       //      total += len(list[i])
-                                                       //      item.keyframe[i] = make([]byte,len(list[i]))
-                                                       //      copy(item.keyframe[i],list[i])
-                                                       // }
-
-                                                       // fmt.Println(item.id.Id,`获取到keyframe`,len(list))
-
+       
                                                        {
                                                                last_keyframe := list[len(list)-1]
                                                                cut_offset := bytes.LastIndex(buf, last_keyframe)+len(last_keyframe)
                                                                // fmt.Printf("buf截断 当前%d=>%d 下一header %b\n",len(buf),len(buf)-cut_offset,buf[:11])
                                                                buf = buf[cut_offset:]
                                                        }
-
+       
                                                        skip_buf_size = len(buf)+len(list[0])
-
                                                        reqs.Push_tag(`req`,*item)
                                                }
                                        }
-                               }(http_error,bc,&item)
+                               }(bc,&item,exit_chan)
 
                                //等待过期/退出
                                {
                                        var exit_sign bool
                                        select {
-                                       case <- savestream.cancel.Chan:
-                                               exit_sign = true
-                                       case <- time.After(time.Second*time.Duration(int(int64(exp) - p.Sys().GetSTime())-60)):;
-                                       case e :=<- http_error:
-                                               l.L(`W: `,`连接退出`,item.id.Id,e)
+                                       case <- req_exit.Chan:;//本次连接错误,退出重试
+                                       case <- exit_chan.Chan://要求退出
+                                               exit_sign = true//
+                                       case <- time.After(time.Second*time.Duration(int(int64(exp) - p.Sys().GetSTime())-120)):;
                                        }
                                        if exit_sign {
                                                //退出
@@ -877,7 +802,7 @@ func Savestreamf(){
                                if len(c.Live)==0 {break}
                        }
                        
-                       close(exit_chan)
+                       exit_chan.Done()
                        reqs.Push_tag(`close`,nil)
                        out.Close()
                        
@@ -1061,9 +986,9 @@ func Savestreamf(){
                                                if e := r.Reqf(reqf.Rval{
                                                        Url:(*link).Url,
                                                        Retry:3,
-                                                       SleepTime:1,
+                                                       SleepTime:1000,
                                                        SaveToPath:path+(*link).Base,
-                                                       Timeout:3,
+                                                       Timeout:3*1000,
                                                        Proxy:c.Proxy,
                                                }); e != nil{
                                                        l.L(`I: `,e,`将重试!`)
@@ -1890,7 +1815,7 @@ func init() {
 
                                //最新直播流
                                if savestream.path == `` {
-                                       flog.L(`I: `,`还没有下载直播流`)
+                                       flog.L(`T: `,`还没有下载直播流`)
                                        w.WriteHeader(http.StatusNotFound)
                                        return
                                }
@@ -1903,7 +1828,7 @@ func init() {
                                }
 
                                if !p.Checkfile().IsExist(base_dir+path) {
-                                       flog.L(`I: `,`还没有下载直播流`)
+                                       flog.L(`T: `,`还没有下载直播流`)
                                        w.WriteHeader(http.StatusNotFound)
                                } else {
                                        u, e := url.Parse("../"+path)
index 339de4892b0c9d504fff31d3aad6a88667ac535f..67a85d97c646b15ffdeec1d87a13dde55ec859dc 100644 (file)
@@ -254,10 +254,24 @@ func (replyF) user_toast_msg(s string){
 }
 
 //HeartBeat-心跳用来传递人气值
+var renqi_old int
 func (replyF) heartbeat(s int){
        c.Danmu_Main_mq.Push_tag(`c.Renqi`,s)//使用连续付费的新舰长无法区分,刷新舰长数
        if s == 1 {return}//人气为1,不输出
-       reply_log.Base_add(`人气`).L(`I: `,"当前人气", s)
+       var (
+               tmp string
+       )
+       if renqi_old != 0 {
+               if s > renqi_old {
+                       tmp += `+`
+               }
+               tmp += fmt.Sprintf("%.1f%%",100*float64(s - renqi_old)/float64(renqi_old))
+               tmp = `(`+tmp+`)`
+       }
+
+       fmt.Printf("\t人气:%d %s\n", s, tmp)
+       reply_log.Base_add(`人气`).Log_show_control(false).L(`I: `,"当前人气", s)
+       renqi_old = s
 }
 
 //Msg-房间特殊活动
index 34a93ba5dd9cd92c97f681c9a55fc427c10d380c..b4c932405915bce998f67a257fc0cfc91d62191e 100644 (file)
@@ -692,7 +692,7 @@ func Merge_stream(keyframe_lists [][][]byte,last_keyframe_timestramp int)(keyfra
                        // fmt.Println(keyframe_lists[o])
                        // keyframe_list_i_header := fmt.Sprintf("%x",keyframe_lists[i][o][:tag_header_size-3])
                        // old_buf_o := buf_o
-                               if bytes.Index(buf[n][tag_header_size:],keyframe_lists[i][o][tag_header_size:]) != -1 {
+                               if bytes.Index(buf[n][1:4],keyframe_lists[i][o][1:4]) != -1 {
 
                                        // last_time_stamp := int(F.Btoi32([]byte{buf[n][7], buf[n][4], buf[n][5], buf[n][6]},0))
 
index 6d6cb616e946cdb0f6d2f5b2842ec3d916a4efc8..1c404d6466e36e551d8ef9cab24ee89893d5ed70 100644 (file)
@@ -475,7 +475,7 @@ func Gtk_danmu() {
                                        if e := req.Reqf(reqf.Rval{
                                                Url:src,
                                                SaveToPath:Gtk_img_path + `/` + uid,
-                                               Timeout:3,
+                                               Timeout:3*1000,
                                                Proxy:c.Proxy,
                                        }); e != nil{log.Println(e);}
                                }()
index 1a60ce263cbd55431218ee2b99e03ea8c28f2cdd..5d299e996211da20e47f7fad2ad4128c12ee170c 100644 (file)
@@ -90,9 +90,9 @@ func TTS(uid,msg string) {
        if err := req.Reqf(reqf.Rval{
                Url:`https://fanyi.baidu.com/gettts?lan=zh&text=`+ url.QueryEscape(msg) +`&spd=5&source=web`,
                SaveToPath:p.Sys().Cdir()+`/tts.mp3`,
-               Timeout:3,
+               Timeout:3*1000,
                Retry:1,
-               SleepTime:500,
+               SleepTime:5000,
                Proxy:c.Proxy,
        });err != nil {
                tts_log.L(`E: `,err)
index 7993677507a5d403172f1ee1d77b32b60dd8aa91..8299acaff9ff0fae99eb96b994fa5587ffbee420 100644 (file)
@@ -43,7 +43,7 @@ func Danmu_s(msg string, roomid int) {
                Url:"https://api.live.bilibili.com/msg/send",
                PostStr:url.PathEscape(PostStr),
                Retry:2,
-               Timeout:5,
+               Timeout:5*1000,
                Proxy:c.Proxy,
                Header:map[string]string{
                        `Host`: `api.live.bilibili.com`,
index 883904329989ab8b9b7a988b8ee3fa67888c30bc..733e2424862b7d7057bf949f790fe191403085a0 100644 (file)
@@ -54,7 +54,7 @@ func Send_gift(gift_id,bag_id,gift_num int) {
                if e:= req.Reqf(reqf.Rval{
                        Url:`https://api.live.bilibili.com/gift/v2/live/bag_send`,
                        PostStr:url.PathEscape(sendStr),
-                       Timeout:10,
+                       Timeout:10*1000,
                        Proxy:c.Proxy,
                        Header:map[string]string{
                                `Host`: `api.vc.bilibili.com`,
index b45f76db0803fdf0d7f02d72cafc6f0e226f8b80..0728be6d00f46edfc0f84df5143f89d9f958e9a4 100644 (file)
@@ -64,7 +64,7 @@ func Send_pm(uid int, msg string) error {
        if e:= req.Reqf(reqf.Rval{
                Url:`https://api.vc.bilibili.com/web_im/v1/web_im/send_msg`,
                PostStr:url.PathEscape(send_str),
-               Timeout:10,
+               Timeout:10*1000,
                Proxy:c.Proxy,
                Header:map[string]string{
                        `Host`: `api.vc.bilibili.com`,