@@ -18,10 +18,10 @@ type Channel struct {
18
18
ChannelID string `json:"channelID"` // 频道ID
19
19
ChannelName string `json:"channelName"` // 频道名称
20
20
UserChannelID string `json:"userChannelID"` // 频道号
21
- ChannelURLs []url. URL `json:"channelURLs "` // 频道URL列表
21
+ ChannelURL string `json:"channelURL "` // 频道URL
22
22
TimeShift string `json:"timeShift"` // 时移类型
23
23
TimeShiftLength time.Duration `json:"timeShiftLength"` // 支持的时移长度
24
- TimeShiftURL * url. URL `json:"timeShiftURL"` // 时移地址(回放地址)
24
+ TimeShiftURL string `json:"timeShiftURL"` // 时移地址(回放地址)
25
25
26
26
GroupName string `json:"groupName"` // 程序识别的频道分类
27
27
LogoName string `json:"logoName"` // 频道台标名称
@@ -42,7 +42,7 @@ func ToM3UFormat(channels []Channel, udpxyURL, catchupSource string, multicastFi
42
42
sb .WriteString ("#EXTM3U\n " )
43
43
for _ , channel := range channels {
44
44
// 根据指定条件,获取频道URL地址
45
- channelURLStr , err := getChannelURLStr (channel . ChannelURLs , udpxyURL , multicastFirst )
45
+ channelURLStr , err := getChannelURLStr (channel , udpxyURL , multicastFirst )
46
46
if err != nil {
47
47
return "" , err
48
48
}
@@ -63,9 +63,9 @@ func ToM3UFormat(channels []Channel, udpxyURL, catchupSource string, multicastFi
63
63
}
64
64
}
65
65
// 设置频道回看参数
66
- if channel .TimeShift == "1" && channel .TimeShiftLength > 0 && channel . TimeShiftURL != nil {
66
+ if channel .TimeShift == "1" && channel .TimeShiftLength > 0 && multicastFirst {
67
67
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 )))
69
69
}
70
70
// 设置频道分组和名称
71
71
m3uLineSb .WriteString (fmt .Sprintf (" group-title=\" %s\" ,%s\n %s\n " ,
@@ -108,7 +108,7 @@ func ToTxtFormat(channels []Channel, udpxyURL string, multicastFirst bool) (stri
108
108
// 输出频道信息
109
109
for _ , channel := range groupChannels {
110
110
// 根据指定条件,获取频道URL地址
111
- channelURLStr , err := getChannelURLStr (channel . ChannelURLs , udpxyURL , multicastFirst )
111
+ channelURLStr , err := getChannelURLStr (channel , udpxyURL , multicastFirst )
112
112
if err != nil {
113
113
return "" , err
114
114
}
@@ -122,26 +122,14 @@ func ToTxtFormat(channels []Channel, udpxyURL string, multicastFirst bool) (stri
122
122
}
123
123
124
124
// 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 {
127
127
return "" , errors .New ("no channel urls found" )
128
128
}
129
129
130
- var channelURL url.URL
131
- if len (channelURLs ) == 1 {
132
- channelURL = channelURLs [0 ]
130
+ if multicastFirst {
131
+ return udpxyURL + channel .ChannelURL , nil
133
132
} 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
146
134
}
147
135
}
0 commit comments