Files
gb28181/internal/web/api/push.go
T
2026-01-13 12:17:26 +08:00

99 lines
2.9 KiB
Go
Executable File

// Code generated by godddx, DO AVOID EDIT.
package api
import (
"fmt"
"log/slog"
"github.com/gin-gonic/gin"
"github.com/gowvp/owl/internal/conf"
"github.com/gowvp/owl/internal/core/push"
"github.com/gowvp/owl/internal/core/sms"
"github.com/ixugo/goddd/pkg/hook"
"github.com/ixugo/goddd/pkg/web"
)
type PushAPI struct {
pushCore push.Core
smsCore sms.Core
conf *conf.Bootstrap
}
// NewPushAPI 媒体相关接口
func NewPushAPI(mc push.Core, sc sms.Core, conf *conf.Bootstrap) PushAPI {
return PushAPI{pushCore: mc, smsCore: sc, conf: conf}
}
func registerPushAPI(g gin.IRouter, api PushAPI, handler ...gin.HandlerFunc) {
{
group := g.Group("/stream_pushs", handler...)
group.GET("", web.WrapH(api.findStreamPush))
group.GET("/:id", web.WrapH(api.getStreamPush))
group.PUT("/:id", web.WrapH(api.editStreamPush))
group.POST("", web.WrapH(api.addStreamPush))
group.DELETE("/:id", web.WrapH(api.delStreamPush))
}
}
// >>> streamPush >>>>>>>>>>>>>>>>>>>>
func (a PushAPI) findStreamPush(c *gin.Context, in *push.FindStreamPushInput) (*web.PageOutput[*push.FindStreamPushOutputItem], error) {
items, total, err := a.pushCore.FindStreamPush(c.Request.Context(), in)
if err != nil {
return nil, err
}
cacheFn := func(s string) (*sms.MediaServer, error) {
v, err := a.smsCore.GetMediaServer(c.Request.Context(), s)
if err != nil {
slog.ErrorContext(c.Request.Context(), "GetMediaServer", "err", err)
}
return v, err
}
out := make([]*push.FindStreamPushOutputItem, len(items))
for i, item := range items {
rtmpAddrs := []string{"unknow"}
mediaID := item.MediaServerID
if mediaID == "" {
mediaID = sms.DefaultMediaServerID
}
if svr, _ := cacheFn(mediaID); svr != nil {
port := svr.Ports.RTMP
if port == 0 {
port = 1935
}
addr := fmt.Sprintf("rtmp://%s:%d/%s/%s", web.GetHost(c.Request), port, item.App, item.Stream)
if !item.IsAuthDisabled {
addr += fmt.Sprintf("?sign=%s", hook.MD5(a.conf.Server.RTMPSecret))
}
rtmpAddrs[0] = addr
}
out[i] = &push.FindStreamPushOutputItem{
StreamPush: *item,
PushAddrs: rtmpAddrs,
}
}
return &web.PageOutput[*push.FindStreamPushOutputItem]{Items: out, Total: total}, err
}
func (a PushAPI) getStreamPush(c *gin.Context, _ *struct{}) (*push.StreamPush, error) {
streamPushID := c.Param("id")
return a.pushCore.GetStreamPush(c.Request.Context(), streamPushID)
}
func (a PushAPI) editStreamPush(c *gin.Context, in *push.EditStreamPushInput) (*push.StreamPush, error) {
streamPushID := c.Param("id")
return a.pushCore.EditStreamPush(c.Request.Context(), in, streamPushID)
}
func (a PushAPI) addStreamPush(c *gin.Context, in *push.AddStreamPushInput) (*push.StreamPush, error) {
return a.pushCore.AddStreamPush(c.Request.Context(), in)
}
func (a PushAPI) delStreamPush(c *gin.Context, _ *struct{}) (*push.StreamPush, error) {
streamPushID := c.Param("id")
return a.pushCore.DelStreamPush(c.Request.Context(), streamPushID)
}