parent
73132822da
commit
77134c8945
@ -0,0 +1,201 @@ |
|||||||
|
package list |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"github.com/gin-gonic/gin" |
||||||
|
) |
||||||
|
|
||||||
|
type Gdm3u struct { |
||||||
|
} |
||||||
|
|
||||||
|
func (g *Gdm3u) GetGdm3u(c *gin.Context) { |
||||||
|
fmt.Fprintln(c.Writer, "#EXTM3U x-tvg-url=\"https://epg.v1.mk/fy.xml\"") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"4K60PSDR-H264-AAC测试\" tvg-name=\"4K60PSDR-H264-AAC测试\" tvg-logo=\"https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/tg.jpg\" group-title=\"4K频道\",4K60PSDR-H264-AAC测试") |
||||||
|
fmt.Fprintln(c.Writer, "https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/sdr4kvideo/index.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"4K60PHLG-HEVC-EAC3测试\" tvg-name=\"4K60PHLG-HEVC-EAC3测试\" tvg-logo=\"https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/tg.jpg\" group-title=\"4K频道\",4K60PHLG-HEVC-EAC3测试") |
||||||
|
fmt.Fprintln(c.Writer, "https://cdn.jsdelivr.net/gh/feiyangdigital/testvideo/hlg4kvideo/index.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"CCTV1\" tvg-name=\"CCTV1\" tvg-logo=\"https://epg.v1.mk/logo/CCTV1.png\" group-title=\"央视\",CCTV-1") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-1-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv2\" tvg-name=\"cctv2\" tvg-logo=\"https://epg.v1.mk/logo/cctv2.png\" group-title=\"央视\",CCTV-2") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-2-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv3\" tvg-name=\"cctv3\" tvg-logo=\"https://epg.v1.mk/logo/cctv3.png\" group-title=\"央视\",CCTV-3") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-3-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv4\" tvg-name=\"cctv4\" tvg-logo=\"https://epg.v1.mk/logo/cctv4.png\" group-title=\"央视\",CCTV-4") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-4-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv5\" tvg-name=\"cctv5\" tvg-logo=\"https://epg.v1.mk/logo/cctv5.png\" group-title=\"央视\",CCTV-5") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-5-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv5+\" tvg-name=\"cctv5+\" tvg-logo=\"https://epg.v1.mk/logo/cctv5+.png\" group-title=\"央视\",CCTV-5+") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-5PLUS-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv6\" tvg-name=\"cctv6\" tvg-logo=\"https://epg.v1.mk/logo/cctv6.png\" group-title=\"央视\",CCTV-6") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-6-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"CCTV7\" tvg-name=\"CCTV7\" tvg-logo=\"https://epg.v1.mk/logo/CCTV7.png\" group-title=\"央视\",CCTV-7") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-7-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv8\" tvg-name=\"cctv8\" tvg-logo=\"https://epg.v1.mk/logo/cctv8.png\" group-title=\"央视\",CCTV-8") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-8-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv9\" tvg-name=\"cctv9\" tvg-logo=\"https://epg.v1.mk/logo/cctv9.png\" group-title=\"央视\",CCTV-9") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-9-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv10\" tvg-name=\"cctv10\" tvg-logo=\"https://epg.v1.mk/logo/cctv10.png\" group-title=\"央视\",CCTV-10") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-10-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv11\" tvg-name=\"cctv11\" tvg-logo=\"https://epg.v1.mk/logo/cctv11.png\" group-title=\"央视\",CCTV-11") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-11-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv12\" tvg-name=\"cctv12\" tvg-logo=\"https://epg.v1.mk/logo/cctv12.png\" group-title=\"央视\",CCTV-12") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-12-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv13\" tvg-name=\"cctv13\" tvg-logo=\"https://epg.v1.mk/logo/cctv13.png\" group-title=\"央视\",CCTV-13") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-13-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv14\" tvg-name=\"cctv14\" tvg-logo=\"https://epg.v1.mk/logo/cctv14.png\" group-title=\"央视\",CCTV-14") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-14-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv15\" tvg-name=\"cctv15\" tvg-logo=\"https://epg.v1.mk/logo/cctv15.png\" group-title=\"央视\",CCTV-15") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-15-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv16\" tvg-name=\"cctv16\" tvg-logo=\"https://epg.v1.mk/logo/cctv16.png\" group-title=\"央视\",CCTV-16") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-16-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv17\" tvg-name=\"cctv17\" tvg-logo=\"https://epg.v1.mk/logo/cctv17.png\" group-title=\"央视\",CCTV-17") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-17-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"news\" tvg-name=\"news\" tvg-logo=\"https://epg.v1.mk/logo/news.png\" group-title=\"央视\",CCTV-NEWS") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CCTV-NEWS.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"广东卫视\" tvg-name=\"广东卫视\" tvg-logo=\"https://epg.v1.mk/logo/广东卫视.png\" group-title=\"广东\",广东卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_GUANGDONG-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"江苏卫视\" tvg-name=\"江苏卫视\" tvg-logo=\"https://epg.v1.mk/logo/江苏卫视.png\" group-title=\"江苏\",江苏卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_JIANGSU-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"浙江卫视\" tvg-name=\"浙江卫视\" tvg-logo=\"https://epg.v1.mk/logo/浙江卫视.png\" group-title=\"浙江\",浙江卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_ZHEJIANG-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"湖南卫视\" tvg-name=\"湖南卫视\" tvg-logo=\"https://epg.v1.mk/logo/湖南卫视.png\" group-title=\"湖南\",湖南卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_HUNAN-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"东方卫视\" tvg-name=\"东方卫视\" tvg-logo=\"https://epg.v1.mk/logo/东方卫视.png\" group-title=\"卫视\",东方卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_DONGFANG-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"北京卫视\" tvg-name=\"北京卫视\" tvg-logo=\"https://epg.v1.mk/logo/北京卫视.png\" group-title=\"北京\",北京卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_BEIJING-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"深圳卫视\" tvg-name=\"深圳卫视\" tvg-logo=\"https://epg.v1.mk/logo/深圳卫视.png\" group-title=\"卫视\",深圳卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_SHENZHEN-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"辽宁卫视\" tvg-name=\"辽宁卫视\" tvg-logo=\"https://epg.v1.mk/logo/辽宁卫视.png\" group-title=\"辽宁\",辽宁卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_LIAONING-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"安徽卫视\" tvg-name=\"安徽卫视\" tvg-logo=\"https://epg.v1.mk/logo/安徽卫视.png\" group-title=\"安徽\",安徽卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_ANHUI-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"山东卫视\" tvg-name=\"山东卫视\" tvg-logo=\"https://epg.v1.mk/logo/山东卫视.png\" group-title=\"山东\",山东卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_SHANDONG-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"黑龙江卫视\" tvg-name=\"黑龙江卫视\" tvg-logo=\"https://epg.v1.mk/logo/黑龙江卫视.png\" group-title=\"黑龙江\",黑龙江卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_HEILONGJIANG-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"天津卫视\" tvg-name=\"天津卫视\" tvg-logo=\"https://epg.v1.mk/logo/天津卫视.png\" group-title=\"卫视\",天津卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_TIANJIN-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"广西卫视\" tvg-name=\"广西卫视\" tvg-logo=\"https://epg.v1.mk/logo/广西卫视.png\" group-title=\"卫视\",广西卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_GUANGXI-HQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"东南卫视\" tvg-name=\"东南卫视\" tvg-logo=\"https://epg.v1.mk/logo/东南卫视.png\" group-title=\"卫视\",东南卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_DONGNAN-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"甘肃卫视\" tvg-name=\"甘肃卫视\" tvg-logo=\"https://epg.v1.mk/logo/甘肃卫视.png\" group-title=\"甘肃\",甘肃卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_GANSU-HQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"贵州卫视\" tvg-name=\"贵州卫视\" tvg-logo=\"https://epg.v1.mk/logo/贵州卫视.png\" group-title=\"贵州\",贵州卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_GUIZHOU-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"海南卫视\" tvg-name=\"海南卫视\" tvg-logo=\"https://epg.v1.mk/logo/海南卫视.png\" group-title=\"海南\",海南卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_HAINAN-HQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"河北卫视\" tvg-name=\"河北卫视\" tvg-logo=\"https://epg.v1.mk/logo/河北卫视.png\" group-title=\"河北\",河北卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_HEBEI-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"河南卫视\" tvg-name=\"河南卫视\" tvg-logo=\"https://epg.v1.mk/logo/河南卫视.png\" group-title=\"河南\",河南卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_HENAN-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"湖北卫视\" tvg-name=\"湖北卫视\" tvg-logo=\"https://epg.v1.mk/logo/湖北卫视.png\" group-title=\"湖北\",湖北卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_HUBEI-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"吉林卫视\" tvg-name=\"吉林卫视\" tvg-logo=\"https://epg.v1.mk/logo/吉林卫视.png\" group-title=\"吉林\",吉林卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_JILIN-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"江西卫视\" tvg-name=\"江西卫视\" tvg-logo=\"https://epg.v1.mk/logo/江西卫视.png\" group-title=\"江西\",江西卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_JIANGXI-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"康巴卫视\" tvg-name=\"康巴卫视\" tvg-logo=\"https://epg.v1.mk/logo/康巴卫视.png\" group-title=\"卫视\",康巴卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_KANGBA.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"安多卫视\" tvg-name=\"安多卫视\" tvg-logo=\"https://epg.v1.mk/logo/安多卫视.png\" group-title=\"卫视\",安多卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_ANDUO.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"兵团卫视\" tvg-name=\"兵团卫视\" tvg-logo=\"https://epg.v1.mk/logo/兵团卫视.png\" group-title=\"卫视\",兵团卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_BINGTUAN.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"内蒙古卫视\" tvg-name=\"内蒙古卫视\" tvg-logo=\"https://epg.v1.mk/logo/内蒙古卫视.png\" group-title=\"卫视\",内蒙古卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_NEIMENGGU.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"宁夏卫视\" tvg-name=\"宁夏卫视\" tvg-logo=\"https://epg.v1.mk/logo/宁夏卫视.png\" group-title=\"卫视\",宁夏卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_NINGXIA.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"农林卫视\" tvg-name=\"农林卫视\" tvg-logo=\"https://epg.v1.mk/logo/农林卫视.png\" group-title=\"卫视\",农林卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_NONGLIN.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"三沙卫视\" tvg-name=\"三沙卫视\" tvg-logo=\"https://epg.v1.mk/logo/三沙卫视.png\" group-title=\"卫视\",三沙卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_SANSHA-HQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"陕西卫视\" tvg-name=\"陕西卫视\" tvg-logo=\"https://epg.v1.mk/logo/陕西卫视.png\" group-title=\"陕西\",陕西卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_SHANXI-HQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"上海纪实\" tvg-name=\"上海纪实\" tvg-logo=\"https://epg.v1.mk/logo/上海纪实.png\" group-title=\"上海\",上海纪实") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_SHANGHAIJS-HD.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"四川卫视\" tvg-name=\"四川卫视\" tvg-logo=\"https://epg.v1.mk/logo/四川卫视.png\" group-title=\"四川\",四川卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_SICHUAN-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"西藏卫视\" tvg-name=\"西藏卫视\" tvg-logo=\"https://epg.v1.mk/logo/西藏卫视.png\" group-title=\"卫视\",西藏卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_XIZANG.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"新疆卫视\" tvg-name=\"新疆卫视\" tvg-logo=\"https://epg.v1.mk/logo/新疆卫视.png\" group-title=\"卫视\",新疆卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_XINJIANG.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"延边卫视\" tvg-name=\"延边卫视\" tvg-logo=\"https://epg.v1.mk/logo/延边卫视.png\" group-title=\"卫视\",延边卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_YANBIAN.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"云南卫视\" tvg-name=\"云南卫视\" tvg-logo=\"https://epg.v1.mk/logo/云南卫视.png\" group-title=\"云南\",云南卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_YUNNAN-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"重庆卫视\" tvg-name=\"重庆卫视\" tvg-logo=\"https://epg.v1.mk/logo/重庆卫视.png\" group-title=\"重庆\",重庆卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CHONGQING-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"BTV北京卫视\" tvg-name=\"BTV北京卫视\" tvg-logo=\"https://epg.v1.mk/logo/BTV北京卫视.png\" group-title=\"北京\",北京奥运纪实") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_BEIJINGJS-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"家庭理财\" tvg-name=\"家庭理财\" tvg-logo=\"https://epg.v1.mk/logo/家庭理财.png\" group-title=\"其他\",家庭理财") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_JIATINGLC.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"金鹰卡通\" tvg-name=\"金鹰卡通\" tvg-logo=\"https://epg.v1.mk/logo/金鹰卡通.png\" group-title=\"其他\",金鹰卡通") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_JINYING.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"卡酷少儿\" tvg-name=\"卡酷少儿\" tvg-logo=\"https://epg.v1.mk/logo/卡酷少儿.png\" group-title=\"其他\",卡酷少儿") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_KAKU.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"女性时尚\" tvg-name=\"女性时尚\" tvg-logo=\"https://epg.v1.mk/logo/女性时尚.png\" group-title=\"其他\",女性时尚") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_NVXINGSS-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"炫动卡通\" tvg-name=\"炫动卡通\" tvg-logo=\"https://epg.v1.mk/logo/炫动卡通.png\" group-title=\"其他\",炫动卡通") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_XUANDONG.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"优漫卡通\" tvg-name=\"优漫卡通\" tvg-logo=\"https://epg.v1.mk/logo/优漫卡通.png\" group-title=\"其他\",优漫卡通") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_YOUMAN.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cetv1\" tvg-name=\"cetv1\" tvg-logo=\"https://epg.v1.mk/logo/cetv1.png\" group-title=\"其他\",CETV-1") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CETV-1-HQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"CETV2\" tvg-name=\"CETV2\" tvg-logo=\"https://epg.v1.mk/logo/CETV2.png\" group-title=\"其他\",CETV-2") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CETV-2.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"CETV3\" tvg-name=\"CETV3\" tvg-logo=\"https://epg.v1.mk/logo/CETV3.png\" group-title=\"其他\",CETV-3") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CETV-3.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cetv4\" tvg-name=\"cetv4\" tvg-logo=\"https://epg.v1.mk/logo/cetv4.png\" group-title=\"其他\",CETV-4") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CETV-4.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"中华美食\" tvg-name=\"中华美食\" tvg-logo=\"https://epg.v1.mk/logo/中华美食.png\" group-title=\"其他\",中华美食") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_ZHONGHUAMS.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"天元围棋\" tvg-name=\"天元围棋\" tvg-logo=\"https://epg.v1.mk/logo/天元围棋.png\" group-title=\"其他\",天元围棋") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_TIANYUANWQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"青海卫视\" tvg-name=\"青海卫视\" tvg-logo=\"https://epg.v1.mk/logo/青海卫视.png\" group-title=\"青海\",青海卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_QINGHAI.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"厦门卫视\" tvg-name=\"厦门卫视\" tvg-logo=\"https://epg.v1.mk/logo/厦门卫视.png\" group-title=\"卫视\",厦门卫视") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_XIAMEN.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"早期教育\" tvg-name=\"早期教育\" tvg-logo=\"https://epg.v1.mk/logo/早期教育.png\" group-title=\"其他\",早期教育") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CETV-ZQJY-CQ.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"国学\" tvg-name=\"国学\" tvg-logo=\"https://epg.v1.mk/logo/国学.png\" group-title=\"其他\",国学") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_GUOXUE.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"山东教育\" tvg-name=\"山东教育\" tvg-logo=\"https://epg.v1.mk/logo/山东教育.png\" group-title=\"山东\",山东教育电视台") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_SDETV.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"嘉佳卡通\" tvg-name=\"嘉佳卡通\" tvg-logo=\"https://epg.v1.mk/logo/嘉佳卡通.png\" group-title=\"其他\",嘉佳卡通") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_JIAJIA.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"发现之旅\" tvg-name=\"发现之旅\" tvg-logo=\"https://epg.v1.mk/logo/发现之旅.png\" group-title=\"其他\",发现之旅") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_FAXIANZL.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"老故事\" tvg-name=\"老故事\" tvg-logo=\"https://epg.v1.mk/logo/老故事.png\" group-title=\"其他\",老故事") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_LAOGUSHI.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cgtn俄语\" tvg-name=\"cgtn俄语\" tvg-logo=\"https://epg.v1.mk/logo/cgtn俄语.png\" group-title=\"央视\",CGTN俄语频道") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CGTN-PYCCNN.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cgtn西班牙语\" tvg-name=\"cgtn西班牙语\" tvg-logo=\"https://epg.v1.mk/logo/cgtn西班牙语.png\" group-title=\"央视\",CGTN西班牙语频道") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CGTN-ESPANOL.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cgtn法语\" tvg-name=\"cgtn法语\" tvg-logo=\"https://epg.v1.mk/logo/cgtn法语.png\" group-title=\"央视\",CGTN法语频道") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CGTN-FRANCAIS.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"CGTN阿拉伯语\" tvg-name=\"CGTN阿拉伯语\" tvg-logo=\"https://epg.v1.mk/logo/CGTN阿拉伯语.png\" group-title=\"央视\",CGTN阿拉伯语") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_CGTN_A.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"长城精品\" tvg-name=\"长城精品\" tvg-logo=\"https://epg.v1.mk/logo/长城精品.png\" group-title=\"其他\",长颈鹿-云游动物园") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_ZOO-201.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"冰火\" tvg-name=\"冰火\" tvg-logo=\"https://epg.v1.mk/logo/冰火.png\" group-title=\"其他\",火烈鸟-云游动物园") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_ZOO-401.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"cctv-老故事\" tvg-name=\"cctv-老故事\" tvg-logo=\"https://epg.v1.mk/logo/cctv-老故事.png\" group-title=\"其他\",老虎-云游动物园") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_ZOO-501.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"bestv全球大片\" tvg-name=\"bestv全球大片\" tvg-logo=\"https://epg.v1.mk/logo/bestv全球大片.png\" group-title=\"其他\",大象-云游动物园") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_ZOO-102.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"未知频道\" tvg-name=\"未知频道\" tvg-logo=\"https://epg.v1.mk/logo/未知频道.png\" group-title=\"其他\",斑马-云游动物园") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_ZOO-801.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"未知频道\" tvg-name=\"未知频道\" tvg-logo=\"https://epg.v1.mk/logo/未知频道.png\" group-title=\"其他\",狮子-云游动物园") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/G_ZOO-901.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"徐闻综合\" tvg-name=\"徐闻综合\" tvg-logo=\"https://epg.v1.mk/logo/徐闻综合.png\" group-title=\"其他\",徐闻综合") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/zanjiang01.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"梅州1套\" tvg-name=\"梅州1套\" tvg-logo=\"https://epg.v1.mk/logo/梅州1套.png\" group-title=\"其他\",梅州综合") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/meizhou1.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"客家生活\" tvg-name=\"客家生活\" tvg-logo=\"https://epg.v1.mk/logo/客家生活.png\" group-title=\"其他\",客家生活") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/meizhou2.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"「广东」阳江1\" tvg-name=\"「广东」阳江1\" tvg-logo=\"https://epg.v1.mk/logo/「广东」阳江1.png\" group-title=\"其他\",阳江-1") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/yangjiang1.m3u8") |
||||||
|
fmt.Fprintln(c.Writer, "#EXTINF:-1,tvg-id=\"「广东」阳江1\" tvg-name=\"「广东」阳江1\" tvg-logo=\"https://epg.v1.mk/logo/「广东」阳江1.png\" group-title=\"其他\",阳江-2") |
||||||
|
fmt.Fprintln(c.Writer, "http://"+c.Request.Host+"/gdcucc/yangjiang2.m3u8") |
||||||
|
} |
||||||
@ -0,0 +1,177 @@ |
|||||||
|
package liveurls |
||||||
|
|
||||||
|
import ( |
||||||
|
"encoding/json" |
||||||
|
"fmt" |
||||||
|
"io" |
||||||
|
"math/rand" |
||||||
|
"net/http" |
||||||
|
"regexp" |
||||||
|
"strings" |
||||||
|
"sync" |
||||||
|
"time" |
||||||
|
|
||||||
|
"github.com/gin-gonic/gin" |
||||||
|
) |
||||||
|
|
||||||
|
type Gdcucc struct{} |
||||||
|
|
||||||
|
type GdcuccCacheItem struct { |
||||||
|
Value string |
||||||
|
Expiration int64 |
||||||
|
} |
||||||
|
|
||||||
|
var gdcuccCache sync.Map |
||||||
|
|
||||||
|
func generateRandomMACAddress() string { |
||||||
|
mac := make([]string, 6) |
||||||
|
for i := 0; i < 6; i++ { |
||||||
|
mac[i] = fmt.Sprintf("%02X", rand.Intn(256)) |
||||||
|
} |
||||||
|
return strings.Join(mac, ":") |
||||||
|
} |
||||||
|
|
||||||
|
func getGdcuccCache(key string) (string, bool) { |
||||||
|
if item, found := gdcuccCache.Load(key); found { |
||||||
|
cacheItem, ok := item.(GdcuccCacheItem) |
||||||
|
if ok && time.Now().Unix() < cacheItem.Expiration { |
||||||
|
return cacheItem.Value, true |
||||||
|
} |
||||||
|
} |
||||||
|
return "", false |
||||||
|
} |
||||||
|
|
||||||
|
func setGdcuccCache(key, value string) { |
||||||
|
gdcuccCache.Store(key, GdcuccCacheItem{ |
||||||
|
Value: value, |
||||||
|
Expiration: time.Now().Unix() + 3600, // 缓存固定1小时
|
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
func getFinalM3U8(id string) (string, error) { |
||||||
|
// 从缓存中读取
|
||||||
|
if cachedUrl, found := getGdcuccCache(id); found { |
||||||
|
return cachedUrl, nil |
||||||
|
} |
||||||
|
|
||||||
|
mac := generateRandomMACAddress() |
||||||
|
api := fmt.Sprintf("http://gdcucc-livod.dispatcher.gitv.tv/gitv_live/%s/%s.m3u8?p=GITV&area=GD_CUCC&partnerCode=GD_CUCC&token=&version=0.0.0.0&apkVersion=4.2.33&mac=%s", id, id, mac) |
||||||
|
|
||||||
|
req, err := http.NewRequest("GET", api, nil) |
||||||
|
if err != nil { |
||||||
|
return "", err |
||||||
|
} |
||||||
|
|
||||||
|
req.Header.Set("User-Agent", "okhttp/3.8.1") |
||||||
|
client := &http.Client{} |
||||||
|
resp, err := client.Do(req) |
||||||
|
if err != nil { |
||||||
|
return "", err |
||||||
|
} |
||||||
|
defer resp.Body.Close() |
||||||
|
|
||||||
|
var builder strings.Builder |
||||||
|
if _, err := io.Copy(&builder, resp.Body); err != nil { |
||||||
|
return "", err |
||||||
|
} |
||||||
|
|
||||||
|
var result map[string]any |
||||||
|
if err := json.Unmarshal([]byte(builder.String()), &result); err != nil { |
||||||
|
return "", err |
||||||
|
} |
||||||
|
|
||||||
|
// 获取 m3u8 URL
|
||||||
|
dataArray, ok := result["data"].([]any) |
||||||
|
if !ok || len(dataArray) == 0 { |
||||||
|
return "", fmt.Errorf("no data available") |
||||||
|
} |
||||||
|
|
||||||
|
data := dataArray[0].(map[string]any) |
||||||
|
m3u8url, ok := data["url"].(string) |
||||||
|
if !ok { |
||||||
|
return "", fmt.Errorf("m3u8 url not found") |
||||||
|
} |
||||||
|
|
||||||
|
// 缓存结果
|
||||||
|
setGdcuccCache(id, m3u8url) |
||||||
|
|
||||||
|
return m3u8url, nil |
||||||
|
} |
||||||
|
|
||||||
|
func (g *Gdcucc) HandleGdcuccMainRequest(c *gin.Context, rid string) { |
||||||
|
// 处理 rid,去掉 .m3u8 后缀
|
||||||
|
id := strings.TrimSuffix(rid, ".m3u8") |
||||||
|
|
||||||
|
// 获取最终的M3U8 URL
|
||||||
|
m3u8url, err := getFinalM3U8(id) |
||||||
|
if err != nil { |
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
// 继续请求该 m3u8 URL
|
||||||
|
req, err := http.NewRequest("GET", m3u8url, nil) |
||||||
|
if err != nil { |
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
req.Header.Set("User-Agent", "okhttp/3.8.1") |
||||||
|
client := &http.Client{} |
||||||
|
resp, err := client.Do(req) |
||||||
|
if err != nil { |
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) |
||||||
|
return |
||||||
|
} |
||||||
|
defer resp.Body.Close() |
||||||
|
|
||||||
|
var builder strings.Builder |
||||||
|
if _, err := io.Copy(&builder, resp.Body); err != nil { |
||||||
|
c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
m3u8Content := builder.String() |
||||||
|
|
||||||
|
// 替换M3U8内容中的&为$
|
||||||
|
m3u8Content = strings.ReplaceAll(m3u8Content, "&", "$") |
||||||
|
|
||||||
|
// 替换TS文件链接
|
||||||
|
redirectPrefix := fmt.Sprintf("http://%s%s?ts=", c.Request.Host, c.Request.URL.Path) |
||||||
|
re := regexp.MustCompile(`((?i).*?\.ts)`) |
||||||
|
m3u8Content = re.ReplaceAllStringFunc(m3u8Content, func(match string) string { |
||||||
|
return redirectPrefix + match |
||||||
|
}) |
||||||
|
|
||||||
|
// 输出处理后的M3U8内容
|
||||||
|
c.String(http.StatusOK, m3u8Content) |
||||||
|
} |
||||||
|
|
||||||
|
func (g *Gdcucc) HandleGdcuccTsRequest(c *gin.Context, ts string) { |
||||||
|
// 将$替换回&
|
||||||
|
ts = strings.ReplaceAll(ts, "$", "&") |
||||||
|
|
||||||
|
req, err := http.NewRequest("GET", ts, nil) |
||||||
|
if err != nil { |
||||||
|
c.String(http.StatusInternalServerError, err.Error()) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
req.Header.Set("User-Agent", "okhttp/3.8.1") |
||||||
|
client := &http.Client{} |
||||||
|
resp, err := client.Do(req) |
||||||
|
if err != nil { |
||||||
|
c.String(http.StatusInternalServerError, err.Error()) |
||||||
|
return |
||||||
|
} |
||||||
|
defer resp.Body.Close() |
||||||
|
|
||||||
|
var builder strings.Builder |
||||||
|
if _, err := io.Copy(&builder, resp.Body); err != nil { |
||||||
|
c.String(http.StatusInternalServerError, err.Error()) |
||||||
|
return |
||||||
|
} |
||||||
|
|
||||||
|
c.Header("Content-Type", "video/MP2T") |
||||||
|
c.String(http.StatusOK, builder.String()) |
||||||
|
} |
||||||
Loading…
Reference in new issue