mirror of
https://github.com/gowvp/gb28181.git
synced 2025-10-05 15:36:57 +08:00
95 lines
2.8 KiB
Go
Executable File
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)
|
|
}
|