]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Add 添加弹幕压缩方式 BROTLI
authorqydysky <32743305+qydysky@users.noreply.github.com>
Mon, 6 Mar 2023 12:41:01 +0000 (20:41 +0800)
committerqydysky <32743305+qydysky@users.noreply.github.com>
Mon, 6 Mar 2023 12:41:01 +0000 (20:41 +0800)
CV/Const.go
Reply/Reply.go
go.mod
go.sum

index 23a21f011cf0cd90262071c027b8d36a9cf282a1..f86f524730152041ba3b8381c64c7099d113efbc 100644 (file)
@@ -1,6 +1,5 @@
 package cv
 
-//from source/player-loader-2.0.11.min.js
 const (
        WS_OP_HEARTBEAT                  = 2
        WS_OP_HEARTBEAT_REPLY            = 3
@@ -15,6 +14,7 @@ const (
        WS_SEQUENCE_OFFSET               = 12
        WS_BODY_PROTOCOL_VERSION_NORMAL  = 0
        WS_BODY_PROTOCOL_VERSION_DEFLATE = 2
+       WS_BODY_PROTOCOL_VERSION_BROTLI  = 3
        WS_HEADER_DEFAULT_VERSION        = 1
        WS_HEADER_DEFAULT_OPERATION      = 1
        WS_HEADER_DEFAULT_SEQUENCE       = 1
@@ -22,12 +22,8 @@ const (
        WS_AUTH_TOKEN_ERROR              = -101
 )
 
-//from player-loader-2.0.11.min.js
-/*
-       customAuthParam
-*/
 const (
-       Protover = 2
+       Protover = 3
        Platform = "web"
        Type     = 2
 )
index c8c7ba8a62ee9288fa52ac09fd957f08dcc6917d..8a3aaf03ff7c6b37d26b401af395c8af76cd7b00 100644 (file)
@@ -9,6 +9,7 @@ import (
        "strings"
        "time"
 
+       brotli "github.com/andybalholm/brotli"
        c "github.com/qydysky/bili_danmu/CV"
        F "github.com/qydysky/bili_danmu/F"
        ws_msg "github.com/qydysky/bili_danmu/Reply/ws_msg"
@@ -37,7 +38,10 @@ func Reply(b []byte) {
                return
        }
 
-       if head.BodyV == c.WS_BODY_PROTOCOL_VERSION_DEFLATE {
+       switch head.BodyV {
+       case 1: // 心跳
+       case c.WS_BODY_PROTOCOL_VERSION_NORMAL: // 无加密
+       case c.WS_BODY_PROTOCOL_VERSION_DEFLATE: // DEFLATE
                readc, err := zlib.NewReader(bytes.NewReader(b[16:]))
                if err != nil {
                        reply_log.L(`E: `, "解压错误")
@@ -51,6 +55,17 @@ func Reply(b []byte) {
                        return
                }
                b = buf.Bytes()
+       case c.WS_BODY_PROTOCOL_VERSION_BROTLI: // BROTLI
+               readc := brotli.NewReader(bytes.NewReader(b[16:]))
+
+               buf := bytes.NewBuffer(nil)
+               if _, err := buf.ReadFrom(readc); err != nil {
+                       reply_log.L(`E: `, "解压错误")
+                       return
+               }
+               b = buf.Bytes()
+       default:
+               reply_log.L(`E: `, "未知的编码方式", head.BodyV)
        }
 
        for len(b) != 0 {
diff --git a/go.mod b/go.mod
index 703718345dc4df8128b1c31fa2a1aacc23f388d9..c35e4f3d6379136cbccf90772df86136b7ec8e15 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -13,7 +13,7 @@ require (
 )
 
 require (
-       github.com/andybalholm/brotli v1.0.4 // indirect
+       github.com/andybalholm/brotli v1.0.5 // indirect
        github.com/davecgh/go-spew v1.1.1 // indirect
        github.com/dustin/go-humanize v1.0.1
        github.com/go-ole/go-ole v1.2.6 // indirect
diff --git a/go.sum b/go.sum
index 51c2f26d7f024acd64ab660ced7330b0c1b3ce73..363957a091f0210e36399777efbe8ca3cabfc8d7 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -1,5 +1,7 @@
 github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY=
 github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
+github.com/andybalholm/brotli v1.0.5 h1:8uQZIdzKmjc/iuPu7O2ioW48L81FgatrcpfFmiq/cCs=
+github.com/andybalholm/brotli v1.0.5/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig=
 github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
 github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=