From 5494914f63c38647ed5ed4a146b7eae246692463 Mon Sep 17 00:00:00 2001 From: qydysky <32743305+qydysky@users.noreply.github.com> Date: Sat, 28 Jan 2023 22:30:27 +0800 Subject: [PATCH] =?utf8?q?Improve=20fmp4=E6=AF=8F=E8=BD=AE=E4=B8=8B?= =?utf8?q?=E8=BD=BD=E6=95=B0=E9=87=8F=E9=99=90=E5=88=B6=20fmp4=E9=94=99?= =?utf8?q?=E8=AF=AF=E5=BC=B9=E5=87=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- Reply/stream.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/Reply/stream.go b/Reply/stream.go index ef9dc91..d13d1a5 100644 --- a/Reply/stream.go +++ b/Reply/stream.go @@ -68,7 +68,8 @@ type m4s_link_item struct { Url string // m4s链接 Base string // m4s文件名 status int // 下载状态 0:未下载 1:正在下载 2:下载完成 3:下载失败 - tryDownCount int // 下载次数 当=4时,不再下载,忽略此块 + tryDownCount int // 下载次数 当=2时,不再下载,忽略此块 + err error // 下载中出现的错误 data []byte // 下载的数据 createdTime time.Time // 创建时间 pooledTime time.Time // 到pool时间 @@ -760,6 +761,7 @@ func (t *M4SStream) saveStreamM4s() (e error) { // 存在待下载切片 if len(download_seq) != 0 { + var downingCount = 0 //本轮下载数量 // 下载切片 for _, v := range download_seq { @@ -767,6 +769,14 @@ func (t *M4SStream) saveStreamM4s() (e error) { if v.status == 2 { continue } + + // 每次最多只下载10个切片 + if downingCount >= 10 { + t.log.L(`T: `, `延迟切片下载 数量(`, len(download_seq)-downingCount, `)`) + break + } + downingCount += 1 + download_limit.Block(func() { time.Sleep(time.Millisecond * 10) }) @@ -820,7 +830,8 @@ 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.err = e link.tryDownCount = 2 // 设置切片状态为下载失败 } else { link.status = 3 // 设置切片状态为下载失败 @@ -854,6 +865,11 @@ func (t *M4SStream) saveStreamM4s() (e error) { // v := download_seq[k] if download_seq[k].status != 2 { + if err := download_seq[k].err; err != nil { + t.log.L(`E: `, `切片下载发生错误:`, err) + e = err + return + } if download_seq[k].tryDownCount >= 2 { //下载了2次,任未下载成功,忽略此块 t.putM4s(download_seq[k]) -- 2.39.2