// 存在待下载切片
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
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`,
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 // 设置切片状态为下载失败
}
}
// 等待队列下载完成
- download_limit.PlanDone(func() {
- time.Sleep(time.Millisecond * 20)
+ download_limit.BlockAll(func() {
+ time.Sleep(time.Millisecond * 10)
})
+ download_limit.UnBlockAll()
}
// 传递已下载切片
// 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
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
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=
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
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=