diff --git a/pkg/server/routes.go b/pkg/server/routes.go index 30f2e5d..b1ae27b 100644 --- a/pkg/server/routes.go +++ b/pkg/server/routes.go @@ -57,7 +57,8 @@ func (c *Config) xtreamRoutes(r *gin.RouterGroup) { r.GET(fmt.Sprintf("/live/%s/%s/:id", c.User, c.Password), c.xtreamStreamLive) r.GET(fmt.Sprintf("/movie/%s/%s/:id", c.User, c.Password), c.xtreamStreamMovie) r.GET(fmt.Sprintf("/series/%s/%s/:id", c.User, c.Password), c.xtreamStreamSeries) - r.GET(fmt.Sprintf("/hlsr/:token/%s/%s/:channel/:hash/:chunk", c.User, c.Password), c.hlsrStream) + r.GET(fmt.Sprintf("/hlsr/:token/%s/%s/:channel/:hash/:chunk", c.User, c.Password), c.xtreamHlsrStream) + r.GET("/hls/:token/:id", c.xtreamHlsStream) } func (c *Config) m3uRoutes(r *gin.RouterGroup) { diff --git a/pkg/server/xtreamHandles.go b/pkg/server/xtreamHandles.go index 30b8be7..065c419 100644 --- a/pkg/server/xtreamHandles.go +++ b/pkg/server/xtreamHandles.go @@ -242,7 +242,7 @@ func (c *Config) xtreamStreamSeries(ctx *gin.Context) { c.xtreamStream(ctx, rpURL) } -func (c *Config) hlsrStream(ctx *gin.Context) { +func (c *Config) xtreamHlsrStream(ctx *gin.Context) { hlsChannelsRedirectURLLock.RLock() url, ok := hlsChannelsRedirectURL[ctx.Param("channel")+".m3u8"] if !ok { @@ -339,3 +339,16 @@ func (c *Config) hlsXtreamStream(ctx *gin.Context, oriURL *url.URL) { ctx.Status(resp.StatusCode) } + +func (c *Config) xtreamHlsStream(ctx *gin.Context) { + id := ctx.Param("id") + token := ctx.Param("token") + + rpURL, err := url.Parse(fmt.Sprintf("%s/hls/%s/%s", c.XtreamBaseURL, token, id)) + if err != nil { + ctx.AbortWithError(http.StatusInternalServerError, err) // nolint: errcheck + return + } + + c.stream(ctx, rpURL) +}