From 44370b5f565834809dd403f45309607e71d1812f Mon Sep 17 00:00:00 2001 From: Jae-Sung Lee Date: Fri, 30 Sep 2022 06:47:11 +0000 Subject: [PATCH 1/4] Add RTMPS listen --- conf/lalserver.conf.json | 3 +++ pkg/logic/config.go | 3 +++ pkg/logic/server_manager__.go | 10 ++++++++-- pkg/rtmp/server.go | 17 ++++++++++++++++- 4 files changed, 30 insertions(+), 3 deletions(-) diff --git a/conf/lalserver.conf.json b/conf/lalserver.conf.json index 818b365..f8d3e34 100644 --- a/conf/lalserver.conf.json +++ b/conf/lalserver.conf.json @@ -3,6 +3,9 @@ "conf_version": "v0.3.3", "rtmp": { "enable": true, + "enable_rtmps": true, + "rtmps_cert_file": "./conf/cert.pem", + "rtmps_key_file": "./conf/key.pem", "addr": ":1935", "gop_num": 0, "merge_write_size": 0, diff --git a/pkg/logic/config.go b/pkg/logic/config.go index 411d728..aab61e2 100644 --- a/pkg/logic/config.go +++ b/pkg/logic/config.go @@ -52,7 +52,10 @@ type Config struct { type RtmpConfig struct { Enable bool `json:"enable"` + EnableRtmps bool `json:"enable_rtmps"` Addr string `json:"addr"` + RtmpsCertFile string `json:"rtmps_cert_file"` + RtmpsKeyFile string `json:"rtmps_key_file"` GopNum int `json:"gop_num"` // TODO(chef): refactor 更名为gop_cache_num MergeWriteSize int `json:"merge_write_size"` AddDummyAudioEnable bool `json:"add_dummy_audio_enable"` diff --git a/pkg/logic/server_manager__.go b/pkg/logic/server_manager__.go index e589e04..a75cb88 100644 --- a/pkg/logic/server_manager__.go +++ b/pkg/logic/server_manager__.go @@ -210,8 +210,14 @@ func (sm *ServerManager) RunLoop() error { } if sm.rtmpServer != nil { - if err := sm.rtmpServer.Listen(); err != nil { - return err + if sm.config.RtmpConfig.EnableRtmps { + if err := sm.rtmpServer.ListenWithTLS(sm.config.RtmpConfig.RtmpsCertFile, sm.config.RtmpConfig.RtmpsKeyFile); err != nil { + return err + } + } else { + if err := sm.rtmpServer.Listen(); err != nil { + return err + } } go func() { if err := sm.rtmpServer.RunLoop(); err != nil { diff --git a/pkg/rtmp/server.go b/pkg/rtmp/server.go index 75b3b49..bb39cea 100644 --- a/pkg/rtmp/server.go +++ b/pkg/rtmp/server.go @@ -9,8 +9,10 @@ package rtmp import ( - "github.com/q191201771/lal/pkg/base" + "crypto/tls" "net" + + "github.com/q191201771/lal/pkg/base" ) type IServerObserver interface { @@ -55,6 +57,19 @@ func (server *Server) Listen() (err error) { return } +func (server *Server) ListenWithTLS(certFile, keyFile string) (err error) { + cert, err := tls.LoadX509KeyPair(certFile, keyFile) + if err != nil { + return + } + tlsConfig := &tls.Config{Certificates: []tls.Certificate{cert}} + if server.ln, err = tls.Listen("tcp", server.addr, tlsConfig); err != nil { + return + } + Log.Infof("start rtmps server listen. addr=%s", server.addr) + return +} + func (server *Server) RunLoop() error { for { conn, err := server.ln.Accept() From 03cc3f4896912f1f08deee734f6a500db2026102 Mon Sep 17 00:00:00 2001 From: Jae-Sung Lee Date: Tue, 4 Oct 2022 04:23:19 +0000 Subject: [PATCH 2/4] Add RTMP listen with RTMPS --- conf/lalserver.conf.json | 9 ++++++--- pkg/logic/config.go | 11 ++++++++--- pkg/logic/group__core_streaming.go | 5 +++-- pkg/logic/server_manager__.go | 25 +++++++++++++++++-------- 4 files changed, 34 insertions(+), 16 deletions(-) diff --git a/conf/lalserver.conf.json b/conf/lalserver.conf.json index f8d3e34..8f01670 100644 --- a/conf/lalserver.conf.json +++ b/conf/lalserver.conf.json @@ -3,15 +3,18 @@ "conf_version": "v0.3.3", "rtmp": { "enable": true, - "enable_rtmps": true, - "rtmps_cert_file": "./conf/cert.pem", - "rtmps_key_file": "./conf/key.pem", "addr": ":1935", "gop_num": 0, "merge_write_size": 0, "add_dummy_audio_enable": false, "add_dummy_audio_wait_audio_ms": 150 }, + "rtmps": { + "enable": true, + "addr": ":4935", + "cert_file": "./conf/cert.pem", + "key_file": "./conf/key.pem" + }, "default_http": { "http_listen_addr": ":8080", "https_listen_addr": ":4433", diff --git a/pkg/logic/config.go b/pkg/logic/config.go index aab61e2..c775240 100644 --- a/pkg/logic/config.go +++ b/pkg/logic/config.go @@ -32,6 +32,7 @@ const ( type Config struct { ConfVersion string `json:"conf_version"` RtmpConfig RtmpConfig `json:"rtmp"` + RtmpsConfig RtmpsConfig `json:"rtmps"` DefaultHttpConfig DefaultHttpConfig `json:"default_http"` HttpflvConfig HttpflvConfig `json:"httpflv"` HlsConfig HlsConfig `json:"hls"` @@ -52,16 +53,20 @@ type Config struct { type RtmpConfig struct { Enable bool `json:"enable"` - EnableRtmps bool `json:"enable_rtmps"` Addr string `json:"addr"` - RtmpsCertFile string `json:"rtmps_cert_file"` - RtmpsKeyFile string `json:"rtmps_key_file"` GopNum int `json:"gop_num"` // TODO(chef): refactor 更名为gop_cache_num MergeWriteSize int `json:"merge_write_size"` AddDummyAudioEnable bool `json:"add_dummy_audio_enable"` AddDummyAudioWaitAudioMs int `json:"add_dummy_audio_wait_audio_ms"` } +type RtmpsConfig struct { + Enable bool `json:"enable"` + Addr string `json:"addr"` + CertFile string `json:"cert_file"` + KeyFile string `json:"key_file"` +} + type DefaultHttpConfig struct { CommonHttpAddrConfig } diff --git a/pkg/logic/group__core_streaming.go b/pkg/logic/group__core_streaming.go index 4fb64fa..5a17493 100644 --- a/pkg/logic/group__core_streaming.go +++ b/pkg/logic/group__core_streaming.go @@ -9,9 +9,10 @@ package logic import ( + "net" + "github.com/q191201771/lal/pkg/rtmp" "github.com/q191201771/naza/pkg/nazalog" - "net" "github.com/q191201771/lal/pkg/mpegts" @@ -370,7 +371,7 @@ func (group *Group) broadcastByRtmpMsg(msg base.RtmpMsg) { } // # 缓存关键信息,以及gop - if group.config.RtmpConfig.Enable { + if group.config.RtmpConfig.Enable || group.config.RtmpsConfig.Enable { group.rtmpGopCache.Feed(msg, lazyRtmpChunkDivider.GetEnsureWithoutSdf()) if msg.Header.MsgTypeId == base.RtmpTypeIdMetadata { group.rtmpGopCache.SetMetadata(lazyRtmpChunkDivider.GetEnsureWithSdf(), lazyRtmpChunkDivider.GetEnsureWithoutSdf()) diff --git a/pkg/logic/server_manager__.go b/pkg/logic/server_manager__.go index a75cb88..5741cc5 100644 --- a/pkg/logic/server_manager__.go +++ b/pkg/logic/server_manager__.go @@ -46,6 +46,7 @@ type ServerManager struct { hlsServerHandler *hls.ServerHandler rtmpServer *rtmp.Server + rtmpsServer *rtmp.Server rtspServer *rtsp.Server httpApiServer *HttpApiServer pprofServer *http.Server @@ -123,6 +124,9 @@ Doc: %s if sm.config.RtmpConfig.Enable { sm.rtmpServer = rtmp.NewServer(sm.config.RtmpConfig.Addr, sm) } + if sm.config.RtmpsConfig.Enable { + sm.rtmpsServer = rtmp.NewServer(sm.config.RtmpsConfig.Addr, sm) + } if sm.config.RtspConfig.Enable { sm.rtspServer = rtsp.NewServer(sm.config.RtspConfig.Addr, sm, sm.config.RtspConfig.ServerAuthConfig) } @@ -210,14 +214,8 @@ func (sm *ServerManager) RunLoop() error { } if sm.rtmpServer != nil { - if sm.config.RtmpConfig.EnableRtmps { - if err := sm.rtmpServer.ListenWithTLS(sm.config.RtmpConfig.RtmpsCertFile, sm.config.RtmpConfig.RtmpsKeyFile); err != nil { - return err - } - } else { - if err := sm.rtmpServer.Listen(); err != nil { - return err - } + if err := sm.rtmpServer.Listen(); err != nil { + return err } go func() { if err := sm.rtmpServer.RunLoop(); err != nil { @@ -226,6 +224,17 @@ func (sm *ServerManager) RunLoop() error { }() } + if sm.rtmpsServer != nil { + if err := sm.rtmpServer.ListenWithTLS(sm.config.RtmpsConfig.CertFile, sm.config.RtmpsConfig.KeyFile); err != nil { + return err + } + go func() { + if err := sm.rtmpsServer.RunLoop(); err != nil { + Log.Error(err) + } + }() + } + if sm.rtspServer != nil { if err := sm.rtspServer.Listen(); err != nil { return err From 0d7576dd37854b8143a06cd723415b17f7357faa Mon Sep 17 00:00:00 2001 From: Jae-Sung Lee Date: Tue, 4 Oct 2022 05:21:12 +0000 Subject: [PATCH 3/4] typo correction --- pkg/logic/server_manager__.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkg/logic/server_manager__.go b/pkg/logic/server_manager__.go index 5741cc5..e46d272 100644 --- a/pkg/logic/server_manager__.go +++ b/pkg/logic/server_manager__.go @@ -225,7 +225,7 @@ func (sm *ServerManager) RunLoop() error { } if sm.rtmpsServer != nil { - if err := sm.rtmpServer.ListenWithTLS(sm.config.RtmpsConfig.CertFile, sm.config.RtmpsConfig.KeyFile); err != nil { + if err := sm.rtmpsServer.ListenWithTLS(sm.config.RtmpsConfig.CertFile, sm.config.RtmpsConfig.KeyFile); err != nil { return err } go func() { From f2f8580f2f1ce5210981423d0116be4920c4ab43 Mon Sep 17 00:00:00 2001 From: Jae-Sung Lee Date: Thu, 6 Oct 2022 00:38:18 +0000 Subject: [PATCH 4/4] move the RTMPS config block into the RTMP block --- conf/lalserver.conf.json | 10 ++++------ pkg/logic/config.go | 12 ++++-------- pkg/logic/group__core_streaming.go | 2 +- pkg/logic/server_manager__.go | 6 +++--- 4 files changed, 12 insertions(+), 18 deletions(-) diff --git a/conf/lalserver.conf.json b/conf/lalserver.conf.json index 8f01670..7c67eb5 100644 --- a/conf/lalserver.conf.json +++ b/conf/lalserver.conf.json @@ -4,17 +4,15 @@ "rtmp": { "enable": true, "addr": ":1935", + "rtmps_enable": true, + "rtmps_addr": ":4935", + "rtmps_cert_file": "./conf/cert.pem", + "rtmps_key_file": "./conf/key.pem", "gop_num": 0, "merge_write_size": 0, "add_dummy_audio_enable": false, "add_dummy_audio_wait_audio_ms": 150 }, - "rtmps": { - "enable": true, - "addr": ":4935", - "cert_file": "./conf/cert.pem", - "key_file": "./conf/key.pem" - }, "default_http": { "http_listen_addr": ":8080", "https_listen_addr": ":4433", diff --git a/pkg/logic/config.go b/pkg/logic/config.go index c775240..b9152e5 100644 --- a/pkg/logic/config.go +++ b/pkg/logic/config.go @@ -32,7 +32,6 @@ const ( type Config struct { ConfVersion string `json:"conf_version"` RtmpConfig RtmpConfig `json:"rtmp"` - RtmpsConfig RtmpsConfig `json:"rtmps"` DefaultHttpConfig DefaultHttpConfig `json:"default_http"` HttpflvConfig HttpflvConfig `json:"httpflv"` HlsConfig HlsConfig `json:"hls"` @@ -54,19 +53,16 @@ type Config struct { type RtmpConfig struct { Enable bool `json:"enable"` Addr string `json:"addr"` + RtmpsEnable bool `json:"rtmps_enable"` + RtmpsAddr string `json:"rtmps_addr"` + RtmpsCertFile string `json:"rtmps_cert_file"` + RtmpsKeyFile string `json:"rtmps_key_file"` GopNum int `json:"gop_num"` // TODO(chef): refactor 更名为gop_cache_num MergeWriteSize int `json:"merge_write_size"` AddDummyAudioEnable bool `json:"add_dummy_audio_enable"` AddDummyAudioWaitAudioMs int `json:"add_dummy_audio_wait_audio_ms"` } -type RtmpsConfig struct { - Enable bool `json:"enable"` - Addr string `json:"addr"` - CertFile string `json:"cert_file"` - KeyFile string `json:"key_file"` -} - type DefaultHttpConfig struct { CommonHttpAddrConfig } diff --git a/pkg/logic/group__core_streaming.go b/pkg/logic/group__core_streaming.go index 5a17493..78ecf31 100644 --- a/pkg/logic/group__core_streaming.go +++ b/pkg/logic/group__core_streaming.go @@ -371,7 +371,7 @@ func (group *Group) broadcastByRtmpMsg(msg base.RtmpMsg) { } // # 缓存关键信息,以及gop - if group.config.RtmpConfig.Enable || group.config.RtmpsConfig.Enable { + if group.config.RtmpConfig.Enable || group.config.RtmpConfig.RtmpsEnable { group.rtmpGopCache.Feed(msg, lazyRtmpChunkDivider.GetEnsureWithoutSdf()) if msg.Header.MsgTypeId == base.RtmpTypeIdMetadata { group.rtmpGopCache.SetMetadata(lazyRtmpChunkDivider.GetEnsureWithSdf(), lazyRtmpChunkDivider.GetEnsureWithoutSdf()) diff --git a/pkg/logic/server_manager__.go b/pkg/logic/server_manager__.go index e46d272..b8447f5 100644 --- a/pkg/logic/server_manager__.go +++ b/pkg/logic/server_manager__.go @@ -124,8 +124,8 @@ Doc: %s if sm.config.RtmpConfig.Enable { sm.rtmpServer = rtmp.NewServer(sm.config.RtmpConfig.Addr, sm) } - if sm.config.RtmpsConfig.Enable { - sm.rtmpsServer = rtmp.NewServer(sm.config.RtmpsConfig.Addr, sm) + if sm.config.RtmpConfig.RtmpsEnable { + sm.rtmpsServer = rtmp.NewServer(sm.config.RtmpConfig.RtmpsAddr, sm) } if sm.config.RtspConfig.Enable { sm.rtspServer = rtsp.NewServer(sm.config.RtspConfig.Addr, sm, sm.config.RtspConfig.ServerAuthConfig) @@ -225,7 +225,7 @@ func (sm *ServerManager) RunLoop() error { } if sm.rtmpsServer != nil { - if err := sm.rtmpsServer.ListenWithTLS(sm.config.RtmpsConfig.CertFile, sm.config.RtmpsConfig.KeyFile); err != nil { + if err := sm.rtmpsServer.ListenWithTLS(sm.config.RtmpConfig.RtmpsCertFile, sm.config.RtmpConfig.RtmpsKeyFile); err != nil { return err } go func() {