]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
允许跨域 提高流流畅度
authorqydysky <qydysky@foxmail.com>
Wed, 14 Apr 2021 09:36:26 +0000 (17:36 +0800)
committerqydysky <qydysky@foxmail.com>
Wed, 14 Apr 2021 09:36:26 +0000 (17:36 +0800)
CV/Var.go
F/F.go
F/api.go
F/xinxin.go
Reply/F.go
Reply/flvDecode.go
bili_danmu.go

index 42f409a85ccc27f56335560b29cf18ff7bd111fc..d6b8790df0593937b5dfa09b9850c9931b192e7d 100644 (file)
--- a/CV/Var.go
+++ b/CV/Var.go
@@ -86,9 +86,9 @@ func init() {
 /*
        customAuthParam
 */
-var (
-       VERSION = "2.0.11"
-)
+// var (
+//     VERSION = "2.0.11"
+// ) // 不再需要
 
 //允许的清晰度
 var AcceptQn = map[int]string{
diff --git a/F/F.go b/F/F.go
index f934499f0c4979eca8fa21439cb546305191d504..1b08e000145ae0bc628354572f86732f9f5fe1ca 100644 (file)
--- a/F/F.go
+++ b/F/F.go
@@ -64,7 +64,7 @@ func HelloGen(roomid int, key string) []byte {
        `,"roomid":` + strconv.Itoa(roomid) + 
        `,"protover":` + strconv.Itoa(c.Protover) + 
        `,"platform":"`+ c.Platform + 
-       `","clientver":"` + c.VERSION + 
+       // `","clientver":"` + c.VERSION + //delete at 2021 4 14
        `","type":` + strconv.Itoa(c.Type) + 
        `,"key":"` + key + `"}`
 
index 5db478a5540370cd01018273ccc12bf58f57a8e0..1064207903ca139c82d8894f541e06b47ce41916 100644 (file)
--- a/F/api.go
+++ b/F/api.go
@@ -4,7 +4,7 @@ import (
        "time"
        "os"
        "strconv"
-       "strings"
+       // "strings"
     "context"
        "encoding/json"
        "net/http"
@@ -109,9 +109,9 @@ func Get(key string) {
                `WSURL`:[]func()([]string){//弹幕链接
                        getDanmuInfo,
                },
-               `VERSION`:[]func()([]string){//客户版本
-                       Get_Version,
-               },
+               // `VERSION`:[]func()([]string){//客户版本  不再需要
+               //      Get_Version,
+               // },
                `LIVE_BUVID`:[]func()([]string){//LIVE_BUVID
                        Get_LIVE_BUVID,
                },
@@ -175,9 +175,9 @@ func Get(key string) {
                `WSURL`:func()(bool){//弹幕链接
                        return len(c.WSURL) != 0
                },
-               `VERSION`:func()(bool){//客户版本
-                       return c.VERSION != `2.0.11`
-               },
+               // `VERSION`:func()(bool){//客户版本  不再需要
+               //      return c.VERSION != `2.0.11`
+               // },
                `LIVE_BUVID`:func()(bool){//LIVE_BUVID
                        return c.LIVE_BUVID
                },
@@ -896,68 +896,68 @@ func Get_guardNum() (missKey []string) {
        return
 }
 
-func Get_Version() (missKey []string) {
-       if c.Roomid == 0 {
-               missKey = append(missKey, `Roomid`)
-       }
-       if len(missKey) != 0 {return}
+// func Get_Version() (missKey []string) {  不再需要
+//     if c.Roomid == 0 {
+//             missKey = append(missKey, `Roomid`)
+//     }
+//     if len(missKey) != 0 {return}
 
-       Roomid := strconv.Itoa(c.Roomid)
+//     Roomid := strconv.Itoa(c.Roomid)
        
-       apilog := apilog.Base_add(`获取客户版本`)
-
-       var player_js_url string
-       {//获取player_js_url
-               r := g.Get(reqf.Rval{
-                       Url:"https://live.bilibili.com/blanc/" + Roomid,
-               })
-
-               if r.Err != nil {
-                       apilog.L(`E: `,r.Err)
-                       return
-               }
-
-               r.S2(`<script src=`,`.js`)
-               if r.Err != nil {
-                       apilog.L(`E: `,r.Err)
-                       return
-               }
-
-               for _,v := range r.RS {
-                       tmp := string(v) + `.js`
-                       if strings.Contains(tmp,`http`) {continue}
-                       tmp = `https:` + tmp
-                       if strings.Contains(tmp,`player`) {
-                               player_js_url = tmp
-                               break
-                       }
-               }
-               if player_js_url == `` {
-                       apilog.L(`E: `,`no found player js`)
-                       return
-               }
-       }
-
-       {//获取VERSION
-               r := g.Get(reqf.Rval{
-                       Url:player_js_url,
-               })
-
-               if r.Err != nil {
-                       apilog.L(`E: `,r.Err)
-                       return
-               }
-
-               r.S(`Bilibili HTML5 Live Player v`,` `,0,0)
-               if r.Err != nil {
-                       apilog.L(`E: `,r.Err)
-                       return
-               }
-               c.VERSION = r.RS[0]
-               apilog.L(`T: `,"api version", c.VERSION)
-       }
-       return
-}
+//     apilog := apilog.Base_add(`获取客户版本`)
+
+//     var player_js_url string
+//     {//获取player_js_url
+//             r := g.Get(reqf.Rval{
+//                     Url:"https://live.bilibili.com/blanc/" + Roomid,
+//             })
+
+//             if r.Err != nil {
+//                     apilog.L(`E: `,r.Err)
+//                     return
+//             }
+
+//             r.S2(`<script src=`,`.js`)
+//             if r.Err != nil {
+//                     apilog.L(`E: `,r.Err)
+//                     return
+//             }
+
+//             for _,v := range r.RS {
+//                     tmp := string(v) + `.js`
+//                     if strings.Contains(tmp,`http`) {continue}
+//                     tmp = `https:` + tmp
+//                     if strings.Contains(tmp,`player`) {
+//                             player_js_url = tmp
+//                             break
+//                     }
+//             }
+//             if player_js_url == `` {
+//                     apilog.L(`E: `,`no found player js`)
+//                     return
+//             }
+//     }
+
+//     {//获取VERSION
+//             r := g.Get(reqf.Rval{
+//                     Url:player_js_url,
+//             })
+
+//             if r.Err != nil {
+//                     apilog.L(`E: `,r.Err)
+//                     return
+//             }
+
+//             r.S(`Bilibili HTML5 Live Player v`,` `,0,0)
+//             if r.Err != nil {
+//                     apilog.L(`E: `,r.Err)
+//                     return
+//             }
+//             c.VERSION = r.RS[0]
+//             apilog.L(`T: `,"api version", c.VERSION)
+//     }
+//     return
+// }
 
 //调用记录
 var boot_Get_cookie funcCtrl.FlashFunc//新的替代旧的
index 53050e579981e07bb6f62bb535b7aa49196ace8c..8ff8ff25c3987cd04f51a875cabae3479cfeb2e6 100644 (file)
@@ -152,8 +152,6 @@ func Wasm(maxloop int, uid uintptr,s RT) (o string) {//maxloop 超时重试
                                Timeout:3,
                        });err != nil {
                                wslog.L(`E: `,err)
-                               //重试时刷新时间
-                               s.R.Ts = int(p.Sys().GetMTime())
                                o = Wasm(maxloop-1, uid, s)
                                return
                        }
@@ -198,10 +196,8 @@ func Wasm(maxloop int, uid uintptr,s RT) (o string) {//maxloop 超时重试
                        case r :=<- rec_chan:
                                if r.Id != s.R.Id {break}//或许接收到之前的请求,校验Id字段
                                return r.S
-                       case <- time.After(time.Second*time.Duration(3)):
+                       case <- time.After(time.Second*time.Duration(1)):
                                wslog.L(`E: `,`超时!响应>1s,确认保持`,webpath,`开启`)
-                               //重试时刷新时间
-                               s.R.Ts = int(p.Sys().GetMTime())
                                o = Wasm(maxloop-1, uid, s)
                                return
                        }
index 3e8592e143569ce041fb705f709362d544017326..32c75ad012a9ec894594b96c23ec4e6983e15aa8 100644 (file)
@@ -957,10 +957,12 @@ func init() {
                })
                s.Handle(map[string]func(http.ResponseWriter,*http.Request){
                        `/`:func(w http.ResponseWriter,r *http.Request){
+
+                               //header
+                               w.Header().Set("Access-Control-Allow-Origin", "*")
+
                                var path string = r.URL.Path[1:]
-                               if ext := filepath.Ext(path);ext == `` || ext != `.dtmp` || ext != `.flv` {
-                                       http.FileServer(http.Dir(base_dir)).ServeHTTP(w,r)
-                               } else {
+                               if ext := filepath.Ext(path); ext == `.dtmp` {
                                        path = base_dir+path
 
                                        if !p.Checkfile().IsExist(path) {
@@ -972,8 +974,8 @@ func init() {
                                        cancel := make(chan struct{})
                                        defer close(cancel)
                                        go func() {
-                                               if e := Stream(path,byteC,cancel);e != nil {
-                                                       flog.Base_add(`直播Web服务`).L(`T: `,`E: `,e);
+                                               if err := Stream(path,byteC,cancel);err != nil {
+                                                       flog.Base_add(`直播Web服务`).L(`T: `,err);
                                                        return
                                                }
                                        }()
@@ -985,13 +987,15 @@ func init() {
                                                if len(buf) == 0 {break}
 
                                                if _,err := w.Write(buf);err != nil {
-                                                       flog.Base_add(`直播Web服务`).L(`T: `,`E: `,err);
+                                                       flog.Base_add(`直播Web服务`).L(`T: `,err);
                                                        break
                                                } else if fastRespon {
                                                        fastRespon = false
                                                        if flusher, flushSupport := w.(http.Flusher);flushSupport {flusher.Flush()}
                                                }
                                        }
+                               } else {
+                                       http.FileServer(http.Dir(base_dir)).ServeHTTP(w,r)
                                }
                        },
                        `/exit`:func(w http.ResponseWriter,r *http.Request){
index c4b541736b37da6ce3fc5b10ed98229555e1d031..aacbac86a63d8432e5e4b1942a71693e0f8c7b24 100644 (file)
@@ -5,7 +5,6 @@ import (
        "bytes"
        "time"
        "errors"
-       "path/filepath"
 
        c "github.com/qydysky/bili_danmu/CV"
        F "github.com/qydysky/bili_danmu/F"
@@ -31,8 +30,8 @@ var (
 )
 
 func Stream(path string,streamChan chan []byte,cancel chan struct{}) (error) {
-       //
-       defer flvlog.L(`T: `,`退出`)
+       flvlog.L(`I: `,path)
+       defer flvlog.L(`I: `,`退出`)
        //file
        f,err := os.OpenFile(path,os.O_RDONLY,0644)
        if err != nil {
@@ -41,69 +40,71 @@ func Stream(path string,streamChan chan []byte,cancel chan struct{}) (error) {
        defer f.Close()
        defer close(streamChan)
 
-       living := filepath.Ext(path) == `.dtmp`
-       //living stream ,seed to least
-       if living {
-               //get flv header(9byte) + FirstTagSize(4byte)
-               {
-                       f.Seek(0,0)
-                       buf := make([]byte, flv_header_size+previou_tag_size)
-                       if _,err := f.Read(buf);err != nil {return err}
-                       if !bytes.Contains(buf,flv_header_sign) {return errors.New(`no flv`)}
-                       streamChan <- buf
-               }
+       //init
+       f.Seek(0,0)
 
-               //get tag func
-               var getTag = func(f *os.File)(tag byte,offset int64,buf_p *[]byte,data_p *[]byte){
-                       buf := make([]byte, tag_header_size)
-                       buf_p = &buf
-                       if _,err := f.Read(buf);err != nil {tag = eof_tag;return}
-                       tag = buf[0]
-                       size := F.Btoi32(append([]byte{0x00},buf[1:4]...),0)
-
-                       data := make([]byte, size+previou_tag_size)
-                       data_p = &data
-                       if _,err := f.Read(data);err != nil {tag = eof_tag;return}
-                       
-                       offset,_ = f.Seek(0,1)
-                       offset -= tag_header_size+int64(size)+previou_tag_size
-                       return
-               }
+       //get flv header(9byte) + FirstTagSize(4byte)
+       {
+               buf := make([]byte, flv_header_size+previou_tag_size)
+               if _,err := f.Read(buf);err != nil {return err}
+               if !bytes.Contains(buf,flv_header_sign) {return errors.New(`no flv`)}
+               streamChan <- buf
+       }
 
-               //get first video and audio tag
-               //find last_keyframe_video_offset
-               var last_keyframe_video_offset int64
-               first_video_tag,first_audio_tag := false,false
-               for {
-                       tag,offset,buf_p,data_p := getTag(f)
-                       if tag == script_tag {
+       //get tag func
+       var getTag = func(f *os.File)(tag byte,offset int64,buf_p *[]byte,data_p *[]byte){
+               buf := make([]byte, tag_header_size)
+               buf_p = &buf
+               if _,err := f.Read(buf);err != nil {tag = eof_tag;return}
+               tag = buf[0]
+               size := F.Btoi32(append([]byte{0x00},buf[1:4]...),0)
+
+               data := make([]byte, size+previou_tag_size)
+               data_p = &data
+               if _,err := f.Read(data);err != nil {tag = eof_tag;return}
+               
+               offset,_ = f.Seek(0,1)
+               offset -= tag_header_size+int64(size)+previou_tag_size
+               return
+       }
+
+       //get first video and audio tag
+       //find last_keyframe_video_offset
+       var last_keyframe_video_offsets []int64
+       first_video_tag,first_audio_tag := false,false
+       for {
+               tag,offset,buf_p,data_p := getTag(f)
+               if tag == script_tag {
+                       streamChan <- *buf_p
+                       streamChan <- *data_p
+               } else if tag == video_tag {
+                       if !first_video_tag {
+                               first_video_tag = true
                                streamChan <- *buf_p
                                streamChan <- *data_p
-                       } else if tag == video_tag {
-                               if !first_video_tag {
-                                       first_video_tag = true
-                                       streamChan <- *buf_p
-                                       streamChan <- *data_p
-                               }
+                       }
 
-                               if (*data_p)[0] & 0xf0 == 0x10 {
-                                       last_keyframe_video_offset = offset
-                               }
-                       } else if tag == audio_tag {
-                               if !first_audio_tag {
-                                       first_audio_tag = true
-                                       streamChan <- *buf_p
-                                       streamChan <- *data_p
+                       if (*data_p)[0] & 0xf0 == 0x10 {
+                               if len(last_keyframe_video_offsets) > 2 {
+                                       last_keyframe_video_offsets = append(last_keyframe_video_offsets[1:], offset)
+                               } else {
+                                       last_keyframe_video_offsets = append(last_keyframe_video_offsets, offset)
                                }
-                       } else {//eof_tag
-                               break;
                        }
+               } else if tag == audio_tag {
+                       if !first_audio_tag {
+                               first_audio_tag = true
+                               streamChan <- *buf_p
+                               streamChan <- *data_p
+                       }
+               } else {//eof_tag
+                       break;
                }
-
-               //seed to last tag
-               f.Seek(last_keyframe_video_offset,0)
        }
 
+       //seed to the second last tag
+       f.Seek(last_keyframe_video_offsets[0],0)
+
        //copy
        {
                buf := make([]byte, copy_buf_size)
@@ -131,7 +132,7 @@ func Stream(path string,streamChan chan []byte,cancel chan struct{}) (error) {
 
                        if err != nil {
                                preOffset,_ = f.Seek(0,1)
-                               time.Sleep(time.Duration(3) * time.Second)
+                               time.Sleep(time.Duration(1) * time.Second)
                        }
 
                }
index 43ffa45824a0b9553a2cbeed4a62f34b82972ef0..8e430b7c3c6e02c5a9f8ba27658e0515b324d63a 100644 (file)
@@ -131,8 +131,8 @@ func Demo(roomid ...int) {
                F.Get(`Silver_2_coin`)
                //每日签到
                F.Dosign()
-               //客户版本
-               F.Get(`VERSION`)
+               // //客户版本 不再需要
+               // F.Get(`VERSION`)
                //附加功能 保持牌子点亮
                go reply.Keep_medal_light()
                //附加功能 自动发送即将过期礼物
@@ -233,8 +233,8 @@ func Demo(roomid ...int) {
                                                        `new day`:func(data interface{})(bool){//日期更换
                                                                //每日签到
                                                                F.Dosign()
-                                                               //获取用户版本
-                                                               go F.Get(`VERSION`)
+                                                               // //获取用户版本  不再需要
+                                                               // go F.Get(`VERSION`)
                                                                //每日兑换硬币
                                                                go F.Silver_2_coin()
                                                                //小心心