]> 127.0.0.1 Git - bili_danmu/.git/commitdiff
Improve 重写m4s同时下载限制
authorqydysky <32743305+qydysky@users.noreply.github.com>
Sun, 22 Jan 2023 23:29:12 +0000 (07:29 +0800)
committerqydysky <32743305+qydysky@users.noreply.github.com>
Sun, 22 Jan 2023 23:29:12 +0000 (07:29 +0800)
Reply/stream.go
demo/go.mod
demo/go.sum
go.mod
go.sum

index f069d65b3725e4fd0f7fdb8d39f87c1e57403dcf..5e1ace3a17928057ae22a8d96f3569eec87e954c 100644 (file)
@@ -751,23 +751,20 @@ func (t *M4SStream) saveStreamM4s() (e error) {
 
                // 存在待下载切片
                if len(download_seq) != 0 {
-
-                       // 设置限制计划
-                       download_limit.Plan(int64(len(download_seq)))
-
                        // 下载切片
                        for _, v := range download_seq {
 
                                // 已下载但还未移除的切片
                                if v.status == 2 {
-                                       download_limit.Block()
-                                       download_limit.UnBlock()
                                        continue
                                }
+                               download_limit.Block(func() {
+                                       time.Sleep(time.Millisecond * 10)
+                               })
 
                                go func(link *m4s_link_item, path string) {
+                                       // t.log.L(`I: `, `下载`, link.Base)
                                        defer download_limit.UnBlock()
-                                       download_limit.Block()
 
                                        link.status = 1 // 设置切片状态为正在下载
                                        link.tryDownCount += 1
@@ -803,7 +800,7 @@ func (t *M4SStream) saveStreamM4s() (e error) {
                                        r := req.Item.(*reqf.Req)
                                        reqConfig := reqf.Rval{
                                                Url:     link.Url,
-                                               Timeout: 2000,
+                                               Timeout: 3000,
                                                Proxy:   t.common.Proxy,
                                                Header: map[string]string{
                                                        `Connection`: `close`,
@@ -815,7 +812,7 @@ func (t *M4SStream) saveStreamM4s() (e error) {
                                        if e := r.Reqf(reqConfig); e != nil && !errors.Is(e, io.EOF) {
                                                if !reqf.IsTimeout(e) {
                                                        t.log.L(`E: `, `hls切片下载失败:`, link.Url, e)
-                                                       link.tryDownCount = 4 // 设置切片状态为下载失败
+                                                       link.tryDownCount = 2 // 设置切片状态为下载失败
                                                } else {
                                                        link.status = 3 // 设置切片状态为下载失败
                                                }
@@ -837,9 +834,10 @@ func (t *M4SStream) saveStreamM4s() (e error) {
                        }
 
                        // 等待队列下载完成
-                       download_limit.PlanDone(func() {
-                               time.Sleep(time.Millisecond * 20)
+                       download_limit.BlockAll(func() {
+                               time.Sleep(time.Millisecond * 10)
                        })
+                       download_limit.UnBlockAll()
                }
 
                // 传递已下载切片
@@ -847,8 +845,8 @@ func (t *M4SStream) saveStreamM4s() (e error) {
                        // v := download_seq[k]
 
                        if download_seq[k].status != 2 {
-                               if download_seq[k].tryDownCount >= 4 {
-                                       //下载了4次,任未下载成功,忽略此块
+                               if download_seq[k].tryDownCount >= 2 {
+                                       //下载了2次,任未下载成功,忽略此块
                                        t.putM4s(download_seq[k])
                                        download_seq = append(download_seq[:k], download_seq[k+1:]...)
                                        k -= 1
index 25ac499b89a26a28ff058d3fbd3a6c80d553a2f0..2baa19df650c642f5582f9c9ef9daccea49f58b3 100644 (file)
@@ -15,7 +15,7 @@ require (
        github.com/mdp/qrterminal/v3 v3.0.0 // indirect
        github.com/miekg/dns v1.1.50 // indirect
        github.com/mitchellh/mapstructure v1.5.0 // indirect
-       github.com/qydysky/part v0.21.10 // indirect
+       github.com/qydysky/part v0.21.11 // indirect
        github.com/shirou/gopsutil v3.21.11+incompatible // indirect
        github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e // indirect
        github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966 // indirect
index b54d8896e5e85f02dc381eb07d59b536ad13dfb7..ae0f59b45248ee61aec38632ea51471749ec9d37 100644 (file)
@@ -156,6 +156,8 @@ github.com/qydysky/part v0.21.9 h1:sgq56nNZcb6vaDSwzWChnkWJ07brKvj6lTVs9xKmG3A=
 github.com/qydysky/part v0.21.9/go.mod h1:BG0tulTKW58jSkC0EZ0MrxDHe+gkPULfGNzksiGCayw=
 github.com/qydysky/part v0.21.10 h1:GAMCJToiYp+G2FBD8YiptdZj3UhVAIrpxzEvw3aN4gg=
 github.com/qydysky/part v0.21.10/go.mod h1:BG0tulTKW58jSkC0EZ0MrxDHe+gkPULfGNzksiGCayw=
+github.com/qydysky/part v0.21.11 h1:9gAsrvyFBlrz5Y4ZpmkrKCwWV4hMGc2K7X8ryB1YFok=
+github.com/qydysky/part v0.21.11/go.mod h1:BG0tulTKW58jSkC0EZ0MrxDHe+gkPULfGNzksiGCayw=
 github.com/shirou/gopsutil v3.20.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shirou/gopsutil v3.21.5+incompatible h1:OloQyEerMi7JUrXiNzy8wQ5XN+baemxSl12QgIzt0jc=
 github.com/shirou/gopsutil v3.21.5+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
diff --git a/go.mod b/go.mod
index 47d576f6c4b1e501eee404556c2d6a6d32f4eaf1..d8d681db55a3b4224f47c50ad3bc2180d7fc5b8a 100644 (file)
--- a/go.mod
+++ b/go.mod
@@ -7,7 +7,7 @@ require (
        github.com/gofrs/uuid v4.3.0+incompatible
        github.com/gotk3/gotk3 v0.6.1
        github.com/mdp/qrterminal/v3 v3.0.0
-       github.com/qydysky/part v0.21.10
+       github.com/qydysky/part v0.21.11
        github.com/skip2/go-qrcode v0.0.0-20200617195104-da1b6568686e
        github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
        golang.org/x/text v0.3.8
diff --git a/go.sum b/go.sum
index 4a9b915fdc2edb21e7a8c68767efe7c89b613805..f9164a5a658d6703fab797f3090c47eef435ee9e 100644 (file)
--- a/go.sum
+++ b/go.sum
@@ -62,6 +62,8 @@ github.com/qydysky/part v0.21.9 h1:sgq56nNZcb6vaDSwzWChnkWJ07brKvj6lTVs9xKmG3A=
 github.com/qydysky/part v0.21.9/go.mod h1:BG0tulTKW58jSkC0EZ0MrxDHe+gkPULfGNzksiGCayw=
 github.com/qydysky/part v0.21.10 h1:GAMCJToiYp+G2FBD8YiptdZj3UhVAIrpxzEvw3aN4gg=
 github.com/qydysky/part v0.21.10/go.mod h1:BG0tulTKW58jSkC0EZ0MrxDHe+gkPULfGNzksiGCayw=
+github.com/qydysky/part v0.21.11 h1:9gAsrvyFBlrz5Y4ZpmkrKCwWV4hMGc2K7X8ryB1YFok=
+github.com/qydysky/part v0.21.11/go.mod h1:BG0tulTKW58jSkC0EZ0MrxDHe+gkPULfGNzksiGCayw=
 github.com/shirou/gopsutil v3.20.12+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=
 github.com/shirou/gopsutil v3.21.11+incompatible h1:+1+c1VGhc88SSonWP6foOcLhvnKlUeu/erjjvaPEYiI=
 github.com/shirou/gopsutil v3.21.11+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA=