From d3d0f998e29dccaf92d783fe3a7e062f95efb6dd Mon Sep 17 00:00:00 2001 From: Pierre-Emmanuel Jacquier <15922119+pierre-emmanuelJ@users.noreply.github.com> Date: Fri, 19 Mar 2021 00:12:52 +0100 Subject: [PATCH] Add an new hls xtream protocol Signed-off-by: Pierre-Emmanuel Jacquier <15922119+pierre-emmanuelJ@users.noreply.github.com> --- pkg/server/routes.go | 3 ++- pkg/server/xtreamHandles.go | 15 ++++++++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) 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) +}