You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
279 lines
7.5 KiB
279 lines
7.5 KiB
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) |
|
}
|
|
|