refactor: rtsp和gb28181不单独声明媒体端口, 强制udp和tcp全开

This commit is contained in:
ydajiang
2025-08-08 17:59:55 +08:00
parent d7ad1dc725
commit cf7041150a
5 changed files with 12 additions and 41 deletions

View File

@@ -72,18 +72,6 @@ func (api *ApiServer) OnGBSourceCreate(v *SourceSDP, w http.ResponseWriter, r *h
//udp收流
}
if tcp && active {
if !tcp {
err = fmt.Errorf("UDP不能主动拉流")
} else if !stream.AppConfig.GB28181.IsEnableTCP() {
err = fmt.Errorf("未开启TCP收流服务,UDP不能主动拉流")
}
if err != nil {
return
}
}
var ssrc string
if v.SessionName == InviteTypeDownload || v.SessionName == InviteTypePlayback {
ssrc = gb28181.GetVodSSRC()

View File

@@ -7,6 +7,7 @@
"idle_timeout": 60,
"receive_timeout":60,
"debug": false,
"media_port": [50000,60000],
"http": {
"port": 8080
@@ -26,9 +27,8 @@
"rtsp": {
"enable": true,
"port": [554,20000,30000],
"password": "123456",
"transport": "UDP|TCP"
"port": 554,
"password": "123456"
},
"webrtc": {
@@ -38,9 +38,7 @@
},
"gb28181": {
"enable": true,
"port": [50000,60000],
"transport": "UDP|TCP"
"enable": true
},
"jt1078": {

View File

@@ -276,16 +276,6 @@ func (source *BaseGBSource) SetTransport(transport transport.Transport) {
// NewGBSource 创建国标推流源, 返回监听的收流端口
func NewGBSource(id string, ssrc uint32, tcp bool, active bool) (GBSource, int, error) {
if tcp {
utils.Assert(stream.AppConfig.GB28181.IsEnableTCP())
} else {
utils.Assert(stream.AppConfig.GB28181.IsEnableUDP())
}
if active {
utils.Assert(tcp && stream.AppConfig.GB28181.IsEnableTCP())
}
var transportServer transport.Transport
var source GBSource
var port int

12
main.go
View File

@@ -75,12 +75,10 @@ func init() {
// 初始化日志
log.InitLogger(config.Log.FileLogging, zapcore.Level(stream.AppConfig.Log.Level), stream.AppConfig.Log.Name, stream.AppConfig.Log.MaxSize, stream.AppConfig.Log.MaxBackup, stream.AppConfig.Log.MaxAge, stream.AppConfig.Log.Compress)
if stream.AppConfig.GB28181.Enable {
gb28181.TransportManger = transport.NewTransportManager(config.ListenIP, uint16(stream.AppConfig.GB28181.Port[0]), uint16(stream.AppConfig.GB28181.Port[1]))
}
if stream.AppConfig.Rtsp.Enable {
rtsp.TransportManger = transport.NewTransportManager(config.ListenIP, uint16(stream.AppConfig.Rtsp.Port[1]), uint16(stream.AppConfig.Rtsp.Port[2]))
if stream.AppConfig.GB28181.Enable || stream.AppConfig.Rtsp.Enable {
transportManager := transport.NewTransportManager(config.ListenIP, uint16(stream.AppConfig.MediaPort[0]), uint16(stream.AppConfig.MediaPort[1]))
gb28181.TransportManger = transportManager
rtsp.TransportManger = transportManager
}
// 创建dump目录
@@ -112,7 +110,7 @@ func main() {
}
if stream.AppConfig.Rtsp.Enable {
rtspAddr, err := net.ResolveTCPAddr("tcp", stream.ListenAddr(stream.AppConfig.Rtsp.Port[0]))
rtspAddr, err := net.ResolveTCPAddr("tcp", stream.ListenAddr(stream.AppConfig.Rtsp.Port))
if err != nil {
panic(rtspAddr)
}

View File

@@ -77,10 +77,8 @@ type JT1078Config struct {
}
type RtspConfig struct {
TransportConfig
enableConfig
Port []int `json:"port"`
Port int `json:"port"`
Password string `json:"password"`
}
@@ -106,8 +104,6 @@ type HttpConfig struct {
type GB28181Config struct {
enableConfig
TransportConfig
Port []int `json:"port"`
}
type WebRtcConfig struct {
@@ -207,7 +203,7 @@ func GetStreamPlayUrls(source string) []string {
if AppConfig.Rtsp.Enable {
// 不拼接userinfo
urls = append(urls, fmt.Sprintf("rtsp://%s:%d/%s", AppConfig.PublicIP, AppConfig.Rtsp.Port[0], source))
urls = append(urls, fmt.Sprintf("rtsp://%s:%d/%s", AppConfig.PublicIP, AppConfig.Rtsp.Port, source))
}
//if AppConfig.Http.Enable {
@@ -265,6 +261,7 @@ type AppConfig_ struct {
IdleTimeout int64 `json:"idle_timeout"` // 多长时间(单位秒)没有拉流. 如果开启hook通知, 根据hook响应, 决定是否关闭Source(200-不关闭/非200关闭). 否则会直接关闭Source.
ReceiveTimeout int64 `json:"receive_timeout"` // 多长时间(单位秒)没有收到流. 如果开启hook通知, 根据hook响应, 决定是否关闭Source(200-不关闭/非200关闭). 否则会直接关闭Source.
Debug bool `json:"debug"` // debug模式, 开启将保存推流
MediaPort []int `json:"media_port"` // 媒体端口范围
//缓存指定时长的包满了之后才发送给Sink. 可以降低用户态和内核态的交互频率,大幅提升性能.
//合并写的大小范围应当大于一帧的时长不超过一组GOP的时长在实际发送流的时候也会遵循此条例.