From 401ff34083e80025aacde79dd06cfb2358075a6b Mon Sep 17 00:00:00 2001 From: qydysky Date: Mon, 9 May 2022 21:09:47 +0800 Subject: [PATCH] =?utf8?q?=E5=AD=98=E5=9C=A8=E5=BE=85=E4=B8=8B=E8=BD=BD?= =?utf8?q?=E5=88=87=E7=89=87=E6=89=8D=E8=BF=9B=E5=85=A5=E5=90=8C=E6=97=B6?= =?utf8?q?=E4=B8=8B=E8=BD=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Reply/stream.go | 108 +++++++++++++++++++++++++----------------------- 1 file changed, 56 insertions(+), 52 deletions(-) diff --git a/Reply/stream.go b/Reply/stream.go index d21d499..03bc3a8 100644 --- a/Reply/stream.go +++ b/Reply/stream.go @@ -365,68 +365,72 @@ func (t *M4SStream) saveStream() { // 下载循环 for download_seq := []*m4s_link_item{}; ; { - // 过多需下载切片提示 - if len(download_seq) > 3 { - t.log.L(`T: `, `待下载切片过多:`, len(download_seq)) - } - // 下载切片 - for _, v := range download_seq { - // 已下载但还未移除的切片 - if v.status == 2 { - continue + // 存在待下载切片 + if len(download_seq) != 0 { + // 过多需下载切片提示 + if len(download_seq) > 3 { + t.log.L(`T: `, `待下载切片过多:`, len(download_seq)) } - download_limit.Block() + // 下载切片 + for _, v := range download_seq { + // 已下载但还未移除的切片 + if v.status == 2 { + continue + } - v.status = 1 // 设置切片状态为正在下载 + download_limit.Block() + + v.status = 1 // 设置切片状态为正在下载 + + // 均衡负载 + if link_url, e := url.Parse(v.Url); e == nil { + if t.stream_hosts.Len() != 1 { + t.stream_hosts.Range(func(key, value interface{}) bool { + // 故障转移 + if v.status == 3 && link_url.Host == key.(string) { + return true + } + // 随机 + link_url.Host = key.(string) + return false + }) + } + v.Url = link_url.String() + } - // 均衡负载 - if link_url, e := url.Parse(v.Url); e == nil { - if t.stream_hosts.Len() != 1 { - t.stream_hosts.Range(func(key, value interface{}) bool { - // 故障转移 - if v.status == 3 && link_url.Host == key.(string) { - return true + go func(link *m4s_link_item, path string) { + defer download_limit.UnBlock() + + r := reqf.New() + if e := r.Reqf(reqf.Rval{ + Url: link.Url, + SaveToPath: path + link.Base, + ConnectTimeout: 2000, + ReadTimeout: 1000, + Timeout: 2000, + Proxy: t.common.Proxy, + }); e != nil && !errors.Is(e, io.EOF) { + if !reqf.IsTimeout(e) { + t.log.L(`E: `, `hls切片下载失败:`, e) } - // 随机 - link_url.Host = key.(string) - return false - }) - } - v.Url = link_url.String() + link.status = 3 // 设置切片状态为下载失败 + } else { + if usedt := r.UsedTime.Seconds(); usedt > 700 { + t.log.L(`I: `, `hls切片下载慢`, usedt, `ms`) + } + link.data = r.Respon + link.status = 2 // 设置切片状态为下载完成 + } + }(v, save_path) } - go func(link *m4s_link_item, path string) { - defer download_limit.UnBlock() - - r := reqf.New() - if e := r.Reqf(reqf.Rval{ - Url: link.Url, - SaveToPath: path + link.Base, - ConnectTimeout: 2000, - ReadTimeout: 1000, - Timeout: 2000, - Proxy: t.common.Proxy, - }); e != nil && !errors.Is(e, io.EOF) { - if !reqf.IsTimeout(e) { - t.log.L(`E: `, `hls切片下载失败:`, e) - } - link.status = 3 // 设置切片状态为下载失败 - } else { - if usedt := r.UsedTime.Seconds(); usedt > 700 { - t.log.L(`I: `, `hls切片下载慢`, usedt, `ms`) - } - link.data = r.Respon - link.status = 2 // 设置切片状态为下载完成 - } - }(v, save_path) + // 等待队列下载完成 + download_limit.None() + download_limit.UnNone() } - // 等待队列下载完成 - download_limit.None() - download_limit.UnNone() - // 传递已下载切片 { for _, v := range download_seq { -- 2.39.2