go-gb28181/cmd/client/main.go

83 lines
2.0 KiB
Go
Raw Normal View History

2025-01-24 02:47:07 +08:00
package main
import (
2025-01-24 15:10:16 +08:00
"git.skcks.cn/Shikong/go-gb28181/pkg/config"
"git.skcks.cn/Shikong/go-gb28181/pkg/handler/message"
"git.skcks.cn/Shikong/go-gb28181/pkg/log"
2025-01-24 22:01:16 +08:00
"git.skcks.cn/Shikong/go-gb28181/pkg/services/zlmediakit"
2025-01-24 15:10:16 +08:00
"github.com/emiago/sipgo"
"github.com/emiago/sipgo/sip"
"github.com/rs/zerolog"
"math"
"time"
"context"
"fmt"
2025-01-24 15:10:16 +08:00
"os"
"os/signal"
"syscall"
2025-01-24 02:47:07 +08:00
)
func main() {
// 解决 sip go udp 包 > 1500 报错
sip.UDPMTUSize = math.MaxInt
output := zerolog.NewConsoleWriter(func(w *zerolog.ConsoleWriter) {
w.Out = os.Stdout
w.TimeFormat = time.RFC3339
})
logger := zerolog.New(output).With().Timestamp().Logger()
2025-01-24 15:10:16 +08:00
clientConfig, err := config.ReadClientConfig()
if err != nil {
logger.Fatal().Any("%s", err)
2025-01-24 15:10:16 +08:00
return
}
2025-01-24 18:32:32 +08:00
fmt.Printf("%#v\n", clientConfig)
2025-01-24 02:47:07 +08:00
if clientConfig.Debug {
sip.SIPDebug = clientConfig.Debug
logger = logger.Level(zerolog.DebugLevel)
} else {
logger = logger.Level(zerolog.InfoLevel)
}
2025-01-24 15:10:16 +08:00
log.SetLogger(&logger)
2025-01-24 22:01:16 +08:00
zlmediakit.SetupZLMediaKitService(clientConfig.ZLMediaKit)
2025-01-24 15:10:16 +08:00
ctx := context.Background()
2025-01-24 15:10:16 +08:00
addr := fmt.Sprintf("%s:%d", clientConfig.ListenIp, clientConfig.ListenPort)
ua, _ := sipgo.NewUA(
sipgo.WithUserAgent(clientConfig.DeviceId),
sipgo.WithUserAgentHostname(addr))
2025-01-24 18:32:32 +08:00
// 客户端, 发送/回复 SIP 指令
client, _ := sipgo.NewClient(ua,
sipgo.WithClientHostname(clientConfig.ListenIp),
sipgo.WithClientPort(clientConfig.ListenPort))
2025-01-24 18:32:32 +08:00
// 服务端, 接受 SIP 指令
srv, _ := sipgo.NewServer(ua, sipgo.WithServerLogger(logger))
message.SetupMessageHandler(srv, client, clientConfig)
2025-01-24 15:10:16 +08:00
quit := make(chan os.Signal, 1)
go func() {
defer func() {
if err := recover(); err != nil {
logger.Fatal().Any("%s", err)
2025-01-24 15:10:16 +08:00
quit <- syscall.SIGKILL
}
}()
2025-01-24 18:32:32 +08:00
// 暂时 默认 udp
// 启动 SIP 服务
2025-01-24 15:10:16 +08:00
if err := srv.ListenAndServe(ctx, "udp", addr); err != nil {
logger.Error().Err(err)
2025-01-24 15:10:16 +08:00
quit <- syscall.SIGTERM
}
}()
signal.Notify(quit, syscall.SIGINT, syscall.SIGKILL, syscall.SIGTERM)
<-quit
2025-01-24 02:47:07 +08:00
}