RTMP流媒体服务器LntonMedia(免费)互联网视频云平台优化HLS的访问路径方

[复制链接]
作者: jmartincufre | 时间: 2024-1-8 06:04:30 | 其他|
0 123

1951

主题

1951

帖子

5853

积分

研究生

Rank: 9Rank: 9Rank: 9

积分
5853
发表于 2024-1-8 06:04:30| 显示全部楼层 |阅读模式
LntonMedia视频平台具有便捷可控的特点,观看视频推流和直播时无需安装插件,只需通过浏览器进入平台即可进行配置。对于用户而言,这一优势使他们无需额外搭建服务器,享受到了方便和可操作性。

在原先的LntonMedia设计中,LntonMedia平台直接获取到流媒体的存储hls的路径,然后将该路径变为可访问资源路径即可。但是该种设计方式,在流媒体在其他机器上的时候就会出现无法访问hls流的情况,因此更改hls的访问路径。

以下代码主要使用httputil.ReverseProxy实现反向代理。proxy.ServeHTTP()函数即可实现http的反向代理功能。
func HlsHandler() gin.HandlerFunc {
return func(c *gin.Context) {
defer func() {
if err := recover(); err != nil {
gErrorLogger.Error(fmt.Sprintf("panic %s\n", err))
gErrorLogger.Error(fmt.Sprint(string(debug.Stack())))
}
}()
// /hls/stream_1/playlist.m3u8
path := c.Request.URL.Path
if strings.HasSuffix(path, ".m3u8") || strings.HasSuffix(path, ".ts") {
target := fmt.Sprintf("127.0.0.1:%v", mediaserver.GetHttpPort())
director := func(req *http.Request) {
req.URL.Scheme = "http"
req.URL.Host = target
req.URL.RawQuery = ""
if strings.HasSuffix(path, ".m3u8") {
// 如果是老的 EasyDSS 路径,则修改为新的 m3u8 路径
// 老的路径为 /hls/stream_1/stream_1_live.m3u8
if strings.HasSuffix(path, "_live.m3u8") {
index := strings.LastIndex(path, "/")
basePath := path[:index+1]
req.URL.Path = basePath + mediaserver.HlsPlayList
}
}
}
tranport := &ShutDownTransport{
Trans: &http.Transport{
Proxy: http.ProxyFromEnvironment,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
ForceAttemptHTTP2: true,
MaxIdleConns: 100,
IdleConnTimeout: 90 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
ResponseHeaderTimeout: 10 * time.Second,
},
}
errHandle := func(res http.ResponseWriter, req *http.Request, err error) {
log.Println("hls proxy is error : ", err)
c.AbortWithError(http.StatusVariantAlsoNegotiates, err)
}
proxy := &httputil.ReverseProxy{
Director: director,
Transport: tranport,
ErrorHandler: errHandle,
}
proxy.ServeHTTP(c.Writer, c.Request)
c.Next()
return
} else {
c.AbortWithStatusJSON(http.StatusBadRequest, "BadRequest")
}
return
}
}
LntonMedia视频平台无需安装插件即可通过网页直接观看视频推流和直播。最近,我们对系统的内核进行了更新,以进一步提升性能。我们欢迎大家提出改进建议,并且如果您对我们的平台有任何需求,欢迎详细了解。



来源:
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回列表 返回顶部