@@ -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}
0 commit comments