Files
gb28181/internal/web/api/media.go
2025-04-06 00:42:34 +08:00

95 lines
2.8 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/gb28181/internal/conf"
"github.com/gowvp/gb28181/internal/core/media"
"github.com/gowvp/gb28181/internal/core/sms"
"github.com/ixugo/goddd/pkg/hook"
"github.com/ixugo/goddd/pkg/web"
)
type MediaAPI struct {
mediaCore media.Core
smsCore sms.Core
conf *conf.Bootstrap
}
// NewMediaAPI 媒体相关接口
func NewMediaAPI(mc media.Core, sc sms.Core, conf *conf.Bootstrap) MediaAPI {
return MediaAPI{mediaCore: mc, smsCore: sc, conf: conf}
}
func registerMediaAPI(g gin.IRouter, api MediaAPI, handler ...gin.HandlerFunc) {
{
group := g.Group("/stream_pushs", handler...)
group.GET("", web.WarpH(api.findStreamPush))
group.GET("/:id", web.WarpH(api.getStreamPush))
group.PUT("/:id", web.WarpH(api.editStreamPush))
group.POST("", web.WarpH(api.addStreamPush))
group.DELETE("/:id", web.WarpH(api.delStreamPush))
}
}
// >>> streamPush >>>>>>>>>>>>>>>>>>>>
func (a MediaAPI) findStreamPush(c *gin.Context, in *media.FindStreamPushInput) (*web.PageOutput, error) {
items, total, err := a.mediaCore.FindStreamPush(c.Request.Context(), in)
if err != nil {
return nil, err
}
cacheFn := hook.UseCache(func(s string) (*sms.MediaServer, error) {
v, err := a.smsCore.GetMediaServer(c.Request.Context(), s)
if err != nil {
slog.Error("GetMediaServer", "err", err)
}
return v, err
})
out := make([]*media.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 {
addr := fmt.Sprintf("rtmp://%s:%d/%s/%s", web.GetHost(c.Request), svr.Ports.RTMP, item.App, item.Stream)
if !item.IsAuthDisabled {
addr += fmt.Sprintf("?sign=%s", hook.MD5(a.conf.Server.RTMPSecret))
}
rtmpAddrs[0] = addr
}
out[i] = &media.FindStreamPushOutputItem{
StreamPush: *item,
PushAddrs: rtmpAddrs,
}
}
return &web.PageOutput{Items: out, Total: total}, err
}
func (a MediaAPI) getStreamPush(c *gin.Context, _ *struct{}) (*media.StreamPush, error) {
streamPushID := c.Param("id")
return a.mediaCore.GetStreamPush(c.Request.Context(), streamPushID)
}
func (a MediaAPI) editStreamPush(c *gin.Context, in *media.EditStreamPushInput) (*media.StreamPush, error) {
streamPushID := c.Param("id")
return a.mediaCore.EditStreamPush(c.Request.Context(), in, streamPushID)
}
func (a MediaAPI) addStreamPush(c *gin.Context, in *media.AddStreamPushInput) (*media.StreamPush, error) {
return a.mediaCore.AddStreamPush(c.Request.Context(), in)
}
func (a MediaAPI) delStreamPush(c *gin.Context, _ *struct{}) (*media.StreamPush, error) {
streamPushID := c.Param("id")
return a.mediaCore.DelStreamPush(c.Request.Context(), streamPushID)
}