Skip to content

Commit bda86df

Browse files
committed
自动保存channel.txt
1 parent 7cee201 commit bda86df

File tree

2 files changed

+14
-47
lines changed

2 files changed

+14
-47
lines changed

internal/app/iptv/channel.go

Lines changed: 11 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ type Channel struct {
1818
ChannelID string `json:"channelID"` // 频道ID
1919
ChannelName string `json:"channelName"` // 频道名称
2020
UserChannelID string `json:"userChannelID"` // 频道号
21-
ChannelURLs []url.URL `json:"channelURLs"` // 频道URL列表
21+
ChannelURL string `json:"channelURL"` // 频道URL
2222
TimeShift string `json:"timeShift"` // 时移类型
2323
TimeShiftLength time.Duration `json:"timeShiftLength"` // 支持的时移长度
24-
TimeShiftURL *url.URL `json:"timeShiftURL"` // 时移地址(回放地址)
24+
TimeShiftURL string `json:"timeShiftURL"` // 时移地址(回放地址)
2525

2626
GroupName string `json:"groupName"` // 程序识别的频道分类
2727
LogoName string `json:"logoName"` // 频道台标名称
@@ -42,7 +42,7 @@ func ToM3UFormat(channels []Channel, udpxyURL, catchupSource string, multicastFi
4242
sb.WriteString("#EXTM3U\n")
4343
for _, channel := range channels {
4444
// 根据指定条件,获取频道URL地址
45-
channelURLStr, err := getChannelURLStr(channel.ChannelURLs, udpxyURL, multicastFirst)
45+
channelURLStr, err := getChannelURLStr(channel, udpxyURL, multicastFirst)
4646
if err != nil {
4747
return "", err
4848
}
@@ -63,9 +63,9 @@ func ToM3UFormat(channels []Channel, udpxyURL, catchupSource string, multicastFi
6363
}
6464
}
6565
// 设置频道回看参数
66-
if channel.TimeShift == "1" && channel.TimeShiftLength > 0 && channel.TimeShiftURL != nil {
66+
if channel.TimeShift == "1" && channel.TimeShiftLength > 0 && multicastFirst {
6767
m3uLineSb.WriteString(fmt.Sprintf(" catchup=\"%s\" catchup-source=\"%s\" catchup-days=\"%d\"",
68-
"default", channel.TimeShiftURL.String()+catchupSource, int64(channel.TimeShiftLength.Hours()/24)))
68+
"default", channel.TimeShiftURL+catchupSource, int64(channel.TimeShiftLength.Hours()/24)))
6969
}
7070
// 设置频道分组和名称
7171
m3uLineSb.WriteString(fmt.Sprintf(" group-title=\"%s\",%s\n%s\n",
@@ -108,7 +108,7 @@ func ToTxtFormat(channels []Channel, udpxyURL string, multicastFirst bool) (stri
108108
// 输出频道信息
109109
for _, channel := range groupChannels {
110110
// 根据指定条件,获取频道URL地址
111-
channelURLStr, err := getChannelURLStr(channel.ChannelURLs, udpxyURL, multicastFirst)
111+
channelURLStr, err := getChannelURLStr(channel, udpxyURL, multicastFirst)
112112
if err != nil {
113113
return "", err
114114
}
@@ -122,26 +122,14 @@ func ToTxtFormat(channels []Channel, udpxyURL string, multicastFirst bool) (stri
122122
}
123123

124124
// getChannelURLStr 根据指定条件,获取频道URL地址
125-
func getChannelURLStr(channelURLs []url.URL, udpxyURL string, multicastFirst bool) (string, error) {
126-
if len(channelURLs) == 0 {
125+
func getChannelURLStr(channel Channel, udpxyURL string, multicastFirst bool) (string, error) {
126+
if len(channel.ChannelURL) == 0 {
127127
return "", errors.New("no channel urls found")
128128
}
129129

130-
var channelURL url.URL
131-
if len(channelURLs) == 1 {
132-
channelURL = channelURLs[0]
130+
if multicastFirst {
131+
return udpxyURL + channel.ChannelURL, nil
133132
} else {
134-
for _, channelURL = range channelURLs {
135-
if (multicastFirst && channelURL.Scheme == SCHEME_IGMP) ||
136-
(!multicastFirst && channelURL.Scheme != SCHEME_IGMP) {
137-
break
138-
}
139-
}
140-
}
141-
142-
if udpxyURL != "" && channelURL.Scheme == SCHEME_IGMP {
143-
return url.JoinPath(udpxyURL, fmt.Sprintf("/rtp/%s", channelURL.Host))
144-
} else {
145-
return channelURL.String(), nil
133+
return channel.TimeShiftURL, nil
146134
}
147135
}

internal/app/iptv/hwctc/channel.go

Lines changed: 3 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -100,21 +100,7 @@ func (c *Client) GetAllChannelList(ctx context.Context) ([]iptv.Channel, error)
100100

101101
// channelURL类型转换
102102
// channelURL可能同时返回组播和单播多个地址(通过|分割)
103-
channelURLStrList := strings.Split(string(matches[4]), "|")
104-
channelURLs := make([]url.URL, 0, len(channelURLStrList))
105-
for _, channelURLStr := range channelURLStrList {
106-
channelURL, err := url.Parse(channelURLStr)
107-
if err != nil {
108-
continue
109-
}
110-
111-
channelURLs = append(channelURLs, *channelURL)
112-
}
113-
114-
if len(channelURLs) == 0 {
115-
c.logger.Warn("The channelURL of this channel is illegal, skip it.", zap.String("channelName", channelName), zap.String("channelURL", string(matches[4])))
116-
continue
117-
}
103+
channelURL := string(matches[4])
118104

119105
// TimeShiftLength类型转换
120106
timeShiftLength, err := strconv.ParseInt(string(matches[6]), 10, 64)
@@ -124,14 +110,7 @@ func (c *Client) GetAllChannelList(ctx context.Context) ([]iptv.Channel, error)
124110
}
125111

126112
// 解析时移地址
127-
timeShiftURL, err := url.Parse(string(matches[7]))
128-
if err != nil {
129-
c.logger.Warn("The timeShiftURL of this channel is illegal. Use the default value: nil.", zap.String("channelName", channelName), zap.String("timeShiftURL", string(matches[7])))
130-
}
131-
if timeShiftURL != nil {
132-
// 重置时移地址的查询参数
133-
timeShiftURL.RawQuery = ""
134-
}
113+
timeShiftURL := string(matches[7])
135114

136115
// 自动识别频道的分类
137116
groupName := iptv.GetChannelGroupName(c.chGroupRulesList, channelName)
@@ -143,7 +122,7 @@ func (c *Client) GetAllChannelList(ctx context.Context) ([]iptv.Channel, error)
143122
ChannelID: string(matches[1]),
144123
ChannelName: channelName,
145124
UserChannelID: string(matches[3]),
146-
ChannelURLs: channelURLs,
125+
ChannelURL: channelURL,
147126
TimeShift: string(matches[5]),
148127
TimeShiftLength: time.Duration(timeShiftLength) * time.Minute,
149128
TimeShiftURL: timeShiftURL,

0 commit comments

Comments
 (0)