parent
5ed3229351
commit
167f2a184a
60
download.go
60
download.go
|
|
@ -172,7 +172,7 @@ func (this *downloadEnv) RunDownload(req RunDownload_Req) (resp RunDownload_Resp
|
||||||
SetProgressBarTitle("[3/6]获取ts列表")
|
SetProgressBarTitle("[3/6]获取ts列表")
|
||||||
tsList, errMsg := getTsList(req.M3u8Url, string(m3u8Body))
|
tsList, errMsg := getTsList(req.M3u8Url, string(m3u8Body))
|
||||||
if errMsg != "" {
|
if errMsg != "" {
|
||||||
resp.ErrMsg = "获取ts列表错误"
|
resp.ErrMsg = "获取ts列表错误: " + errMsg
|
||||||
return resp
|
return resp
|
||||||
}
|
}
|
||||||
if len(tsList) <= req.SkipTsCountFromHead {
|
if len(tsList) <= req.SkipTsCountFromHead {
|
||||||
|
|
@ -309,35 +309,45 @@ func GetWd() string {
|
||||||
|
|
||||||
// 获取m3u8加密的密钥
|
// 获取m3u8加密的密钥
|
||||||
func (this *downloadEnv) getM3u8Key(m3u8Url string, html string) (key string, err error) {
|
func (this *downloadEnv) getM3u8Key(m3u8Url string, html string) (key string, err error) {
|
||||||
lines := strings.Split(html, "\n")
|
|
||||||
key = ""
|
key = ""
|
||||||
for _, line := range lines {
|
for _, line := range splitLineWithTrimSpace(html) {
|
||||||
if strings.Contains(line, "#EXT-X-KEY") {
|
if strings.Contains(line, "#EXT-X-KEY") == false {
|
||||||
uriPos := strings.Index(line, "URI")
|
continue
|
||||||
quotationMarkPos := strings.LastIndex(line, "\"")
|
|
||||||
keyUrl := strings.Split(line[uriPos:quotationMarkPos], "\"")[1]
|
|
||||||
if !strings.Contains(line, "http") {
|
|
||||||
var errMsg string
|
|
||||||
keyUrl, errMsg = resolveRefUrl(m3u8Url, line)
|
|
||||||
if errMsg != "" {
|
|
||||||
return "", errors.New(errMsg)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
res, err := this.doGetRequest(keyUrl)
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return string(res), nil
|
|
||||||
}
|
}
|
||||||
|
uriPos := strings.Index(line, "URI")
|
||||||
|
quotationMarkPos := strings.LastIndex(line, "\"")
|
||||||
|
keyUrl := strings.Split(line[uriPos:quotationMarkPos], "\"")[1]
|
||||||
|
if !strings.Contains(line, "http") {
|
||||||
|
var errMsg string
|
||||||
|
keyUrl, errMsg = resolveRefUrl(m3u8Url, line)
|
||||||
|
if errMsg != "" {
|
||||||
|
return "", errors.New(errMsg)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var res []byte
|
||||||
|
res, err = this.doGetRequest(keyUrl)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
return string(res), nil
|
||||||
}
|
}
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func splitLineWithTrimSpace(s string) []string {
|
||||||
|
tmp := strings.Split(s, "\n")
|
||||||
|
for idx, str := range tmp {
|
||||||
|
str = strings.TrimSpace(str)
|
||||||
|
tmp[idx] = str
|
||||||
|
}
|
||||||
|
return tmp
|
||||||
|
}
|
||||||
|
|
||||||
func getTsList(m38uUrl string, body string) (tsList []TsInfo, errMsg string) {
|
func getTsList(m38uUrl string, body string) (tsList []TsInfo, errMsg string) {
|
||||||
lines := strings.Split(body, "\n")
|
|
||||||
index := 0
|
index := 0
|
||||||
|
|
||||||
for _, line := range lines {
|
for _, line := range splitLineWithTrimSpace(body) {
|
||||||
|
line = strings.TrimSpace(line)
|
||||||
if !strings.HasPrefix(line, "#") && line != "" {
|
if !strings.HasPrefix(line, "#") && line != "" {
|
||||||
index++
|
index++
|
||||||
var after string
|
var after string
|
||||||
|
|
@ -537,14 +547,12 @@ func (this *downloadEnv) sniffM3u8(urlS string) (afterUrl string, content []byte
|
||||||
// 看这个是不是嵌套的m3u8
|
// 看这个是不是嵌套的m3u8
|
||||||
var m3u8Url string
|
var m3u8Url string
|
||||||
containsTs := false
|
containsTs := false
|
||||||
for _, line := range strings.Split(string(content), "\n") {
|
for _, line := range splitLineWithTrimSpace(string(content)) {
|
||||||
lineOrigin := strings.TrimSpace(line)
|
if strings.HasPrefix(line, "#") {
|
||||||
if strings.HasPrefix(lineOrigin, "#") {
|
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
line = strings.ToLower(lineOrigin)
|
|
||||||
if UrlHasSuffix(line, ".m3u8") {
|
if UrlHasSuffix(line, ".m3u8") {
|
||||||
m3u8Url = lineOrigin
|
m3u8Url = line
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
if UrlHasSuffix(line, ".ts") {
|
if UrlHasSuffix(line, ".ts") {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue