280 lines
7.5 KiB
Go
280 lines
7.5 KiB
Go
|
package http
|
|||
|
|
|||
|
import (
|
|||
|
"fmt"
|
|||
|
"go-common/library/ecode"
|
|||
|
"go-common/library/log"
|
|||
|
bm "go-common/library/net/http/blademaster"
|
|||
|
"go-common/library/net/metadata"
|
|||
|
"net"
|
|||
|
"strconv"
|
|||
|
)
|
|||
|
|
|||
|
// 获取上行推流地址, 一共三个方法调用
|
|||
|
|
|||
|
// UpStream
|
|||
|
func getUpStreamRtmp(c *bm.Context) {
|
|||
|
params := c.Request.URL.Query()
|
|||
|
room := params.Get("room_id")
|
|||
|
// 来源:pc:表示PC端;ios:表示ios端;android:安卓端;ios_link:表示ios端;android_link: 安卓端;live_mng:表示live后台;vc_mng:表示vc后台;
|
|||
|
platform := params.Get("platform")
|
|||
|
// client_ip
|
|||
|
ip := params.Get("ip")
|
|||
|
// 分区id
|
|||
|
area := params.Get("area_id")
|
|||
|
// 免流标志
|
|||
|
freeFlow := params.Get("free_flow")
|
|||
|
attentions := params.Get("attentions")
|
|||
|
|
|||
|
c.Set("input_params", params)
|
|||
|
|
|||
|
if room == "" || platform == "" || area == "" {
|
|||
|
c.Set("output_data", "some fields are empty")
|
|||
|
c.JSONMap(map[string]interface{}{"message": "some fields are empty"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
roomID, err := strconv.ParseInt(room, 10, 64)
|
|||
|
|
|||
|
if err != nil || roomID <= 0 {
|
|||
|
c.Set("output_data", "room_id is not right")
|
|||
|
c.JSONMap(map[string]interface{}{"message": "房间号错误"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
var attentionsInt int
|
|||
|
if attentions == "" {
|
|||
|
attentionsInt = 0
|
|||
|
} else {
|
|||
|
att, _ := strconv.ParseInt(attentions, 10, 64)
|
|||
|
attentionsInt = int(att)
|
|||
|
}
|
|||
|
|
|||
|
// ip映射
|
|||
|
realIP := ip
|
|||
|
if ip == "" {
|
|||
|
remoteAddr := c.Request.RemoteAddr
|
|||
|
// 使用header: X-REAL-IP + X_FORWARED_FOR + reamoteadd
|
|||
|
if add := c.Request.Header.Get("X-REAL-IP"); add != "" {
|
|||
|
remoteAddr = add
|
|||
|
} else if add = c.Request.Header.Get("X_FORWARED_FOR"); add != "" {
|
|||
|
remoteAddr = add
|
|||
|
} else {
|
|||
|
remoteAddr, _, _ = net.SplitHostPort(remoteAddr)
|
|||
|
}
|
|||
|
|
|||
|
if remoteAddr == "::1" {
|
|||
|
remoteAddr = "127.0.0.1"
|
|||
|
}
|
|||
|
|
|||
|
realIP = remoteAddr
|
|||
|
}
|
|||
|
|
|||
|
areaID, _ := strconv.ParseInt(area, 10, 64)
|
|||
|
|
|||
|
info, err := srv.GetUpStreamRtmp(c, roomID, freeFlow, realIP, areaID, attentionsInt, 0, platform)
|
|||
|
if err != nil {
|
|||
|
c.Set("output_data", err.Error())
|
|||
|
c.JSONMap(map[string]interface{}{"message": "获取线路信息失败,刷新页面或稍后重试"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if info == nil {
|
|||
|
c.Set("output_data", fmt.Sprintf("can find any info by room_id=%d", roomID))
|
|||
|
c.JSONMap(map[string]interface{}{"message": "获取线路信息失败,刷新页面或稍后重试"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
c.Set("output_data", info)
|
|||
|
c.JSONMap(map[string]interface{}{"data": map[string]interface{}{"up_stream": info}}, nil)
|
|||
|
}
|
|||
|
|
|||
|
// getWebRtmp web端调用
|
|||
|
func getWebRtmp(c *bm.Context) {
|
|||
|
// 获取room_id
|
|||
|
params := c.Request.URL.Query()
|
|||
|
room := params.Get("room_id")
|
|||
|
|
|||
|
c.Set("input_params", params)
|
|||
|
|
|||
|
roomID, err := strconv.ParseInt(room, 10, 64)
|
|||
|
|
|||
|
if err != nil || roomID <= 0 {
|
|||
|
c.Set("output_data", "room_id is not right")
|
|||
|
c.JSONMap(map[string]interface{}{"message": "房间号不正确"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// 获取uid
|
|||
|
uid, ok := metadata.Value(c, metadata.Mid).(int64)
|
|||
|
//uid = 19148701
|
|||
|
//ok = true
|
|||
|
|
|||
|
//log.Infov(c, log.KV("log", fmt.Sprintf("uid=%v", uid)))
|
|||
|
if !ok {
|
|||
|
log.Warn("%v=%v", uid, ok)
|
|||
|
c.Set("output_data", "未登陆")
|
|||
|
c.JSONMap(map[string]interface{}{"message": fmt.Sprintf("未登陆")}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
remoteAddr := c.Request.RemoteAddr
|
|||
|
// 使用header: X-REAL-IP + X_FORWARED_FOR + reamoteadd
|
|||
|
if add := c.Request.Header.Get("X-REAL-IP"); add != "" {
|
|||
|
remoteAddr = add
|
|||
|
} else if add = c.Request.Header.Get("X_FORWARED_FOR"); add != "" {
|
|||
|
remoteAddr = add
|
|||
|
} else {
|
|||
|
remoteAddr, _, _ = net.SplitHostPort(remoteAddr)
|
|||
|
}
|
|||
|
|
|||
|
if remoteAddr == "::1" {
|
|||
|
remoteAddr = "127.0.0.1"
|
|||
|
}
|
|||
|
|
|||
|
realIP := remoteAddr
|
|||
|
|
|||
|
info, err := srv.GetWebRtmp(c, roomID, uid, realIP, "web")
|
|||
|
if err != nil {
|
|||
|
c.Set("output_data", err.Error())
|
|||
|
c.JSONMap(map[string]interface{}{"message": "获取线路信息失败,刷新页面或稍后重试"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if info == nil {
|
|||
|
c.Set("output_data", fmt.Sprintf("can find any info by room_id=%d", roomID))
|
|||
|
c.JSONMap(map[string]interface{}{"message": "获取线路信息失败,刷新页面或稍后重试"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
c.Set("output_data", info)
|
|||
|
c.JSONMap(map[string]interface{}{"data": info}, nil)
|
|||
|
}
|
|||
|
|
|||
|
// getMobileRtmp 移动端调用
|
|||
|
func getMobileRtmp(c *bm.Context) {
|
|||
|
params := c.Request.URL.Query()
|
|||
|
room := params.Get("room_id")
|
|||
|
// 来源:pc:表示PC端;ios:表示ios端;android:安卓端;ios_link:表示ios端;android_link: 安卓端;live_mng:表示live后台;vc_mng:表示vc后台;
|
|||
|
platform := params.Get("platform")
|
|||
|
// client_ip
|
|||
|
ip := params.Get("ip")
|
|||
|
// 分区id
|
|||
|
area := params.Get("area_id")
|
|||
|
// 免流标志
|
|||
|
freeFlow := params.Get("free_flow")
|
|||
|
|
|||
|
c.Set("input_params", params)
|
|||
|
|
|||
|
if room == "" || platform == "" || area == "" {
|
|||
|
c.Set("output_data", "some fields are empty")
|
|||
|
c.JSONMap(map[string]interface{}{"message": "some fields are empty"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
roomID, err := strconv.ParseInt(room, 10, 64)
|
|||
|
|
|||
|
if err != nil || roomID <= 0 {
|
|||
|
c.Set("output_data", "房间号错误")
|
|||
|
c.JSONMap(map[string]interface{}{"message": "房间号错误"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
// ip映射
|
|||
|
realIP := ip
|
|||
|
if ip == "" {
|
|||
|
remoteAddr := c.Request.RemoteAddr
|
|||
|
// 使用header: X-REAL-IP + X_FORWARED_FOR + reamoteadd
|
|||
|
if add := c.Request.Header.Get("X-REAL-IP"); add != "" {
|
|||
|
remoteAddr = add
|
|||
|
} else if add = c.Request.Header.Get("X_FORWARED_FOR"); add != "" {
|
|||
|
remoteAddr = add
|
|||
|
} else {
|
|||
|
remoteAddr, _, _ = net.SplitHostPort(remoteAddr)
|
|||
|
}
|
|||
|
|
|||
|
if remoteAddr == "::1" {
|
|||
|
remoteAddr = "127.0.0.1"
|
|||
|
}
|
|||
|
|
|||
|
realIP = remoteAddr
|
|||
|
}
|
|||
|
|
|||
|
areaID, _ := strconv.ParseInt(area, 10, 64)
|
|||
|
|
|||
|
// 获取uid
|
|||
|
uid, ok := metadata.Value(c, metadata.Mid).(int64)
|
|||
|
//uid = 19148701
|
|||
|
//ok = true
|
|||
|
if !ok {
|
|||
|
c.Set("output_data", "未登陆")
|
|||
|
c.JSONMap(map[string]interface{}{"message": fmt.Sprintf("未登陆")}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
info, err := srv.GetUpStreamRtmp(c, roomID, freeFlow, realIP, areaID, 0, uid, platform)
|
|||
|
if err != nil {
|
|||
|
c.Set("output_data", err.Error())
|
|||
|
c.JSONMap(map[string]interface{}{"message": "获取线路信息失败,刷新页面或稍后重试"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if info == nil {
|
|||
|
c.Set("output_data", fmt.Sprintf("can find any info by room_id=%d", roomID))
|
|||
|
c.JSONMap(map[string]interface{}{"message": "获取线路信息失败,刷新页面或稍后重试"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
c.Set("output_data", info)
|
|||
|
c.JSONMap(map[string]interface{}{"data": map[string]interface{}{"up_stream": info}}, nil)
|
|||
|
}
|
|||
|
|
|||
|
// getRoomRtmp 拜年祭房间推流码接口
|
|||
|
func getRoomRtmp(c *bm.Context) {
|
|||
|
params := c.Request.URL.Query()
|
|||
|
|
|||
|
c.Set("input_params", params)
|
|||
|
|
|||
|
room := params.Get("room_id")
|
|||
|
roomID, err := strconv.ParseInt(room, 10, 64)
|
|||
|
|
|||
|
if err != nil || roomID <= 0 {
|
|||
|
c.Set("output_data", "房间号不正确")
|
|||
|
c.JSONMap(map[string]interface{}{"message": "房间号不正确"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
info, err := srv.GetRoomRtmp(c, roomID)
|
|||
|
|
|||
|
if err != nil {
|
|||
|
c.Set("output_data", err.Error())
|
|||
|
c.JSONMap(map[string]interface{}{"message": "获取房间信息失败"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
if info == nil {
|
|||
|
c.Set("output_data", fmt.Sprintf("can find any info by room_id=%d", roomID))
|
|||
|
c.JSONMap(map[string]interface{}{"message": "获取房间信息失败,请确认是否房间存在"}, ecode.RequestErr)
|
|||
|
c.Abort()
|
|||
|
return
|
|||
|
}
|
|||
|
|
|||
|
c.Set("output_data", info)
|
|||
|
c.JSONMap(map[string]interface{}{"data": info}, nil)
|
|||
|
}
|