rtmp connection encrypt support

This commit is contained in:
madao
2025-02-05 00:12:41 +08:00
parent 3ffe980eca
commit ce1f0f9681
5 changed files with 67 additions and 6 deletions

4
go.mod
View File

@@ -4,7 +4,7 @@ go 1.16
require (
github.com/beego/beego/v2 v2.0.1
// github.com/deepch/vdk v0.0.0-20241120073805-439b6309323c //gitUrl v0.0.0-timestamp-commitId
// github.com/deepch/vdk v0.0.0-20241120073805-439b6309323c //gitUrl v0.0.0-timestamp-commitId //timestamp为0时区的时间commitId为前12为
github.com/deepch/vdk v0.0.27
github.com/gin-gonic/gin v1.7.2
github.com/go-cmd/cmd v1.4.3
@@ -13,4 +13,4 @@ require (
github.com/matoous/go-nanoid/v2 v2.1.0
)
replace github.com/deepch/vdk => github.com/hkmadao/vdk v0.0.0-20241127071358-df60b9bc5ae8
replace github.com/deepch/vdk => github.com/hkmadao/vdk v0.0.0-20250204160314-c07ed611e735

4
go.sum
View File

@@ -151,8 +151,8 @@ github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgf
github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw=
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4=
github.com/hkmadao/vdk v0.0.0-20241127071358-df60b9bc5ae8 h1:uc354yQx2guZSJHPZtQh32Q5NQHAWsqPlm00R3dSYac=
github.com/hkmadao/vdk v0.0.0-20241127071358-df60b9bc5ae8/go.mod h1:JlgGyR2ld6+xOIHa7XAxJh+stSDBAkdNvIPkUIdIywk=
github.com/hkmadao/vdk v0.0.0-20250204160314-c07ed611e735 h1:1MUoJJ/gcIM/hS+Ng6vrp23ZiykbXpqwZZcIoHKIwT4=
github.com/hkmadao/vdk v0.0.0-20250204160314-c07ed611e735/go.mod h1:JlgGyR2ld6+xOIHa7XAxJh+stSDBAkdNvIPkUIdIywk=
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20220517205856-0058ec4f073c/go.mod h1:aYm2/VgdVmcIU8iMfdMvDMsRAQjcfZSKFby6HOFvi/w=

View File

@@ -5,6 +5,7 @@ import (
"sync"
"time"
"github.com/beego/beego/v2/core/config"
"github.com/beego/beego/v2/core/logs"
"github.com/deepch/vdk/av"
"github.com/deepch/vdk/format/rtmp"
@@ -104,7 +105,23 @@ func (rfw *RtmpFlvWriter) createConn() error {
logs.Error("not found camera : %s", rfw.code)
return err
}
rtmpConn, err := rtmp.Dial(camera.RtmpUrl)
clientCode, err := config.String("server.remote.client-code")
if err != nil {
logs.Error("get remote client-code error: %v\n", err)
return err
}
signSecret, err := config.String("server.remote.sign-secret")
if err != nil {
logs.Error("get remote sign-secret error: %v\n", err)
return err
}
secretStr, err := config.String("server.remote.secret")
if err != nil {
logs.Error("get remote secret error: %v", err)
return err
}
proxyConnOption := rtmp.NewProxyConnOption(rtmp.AES, clientCode, signSecret, []byte(secretStr))
rtmpConn, err := rtmp.DialEncrypt(camera.RtmpUrl, proxyConnOption)
if err != nil {
logs.Error("rtmp client connection error : %v", err)
return err

View File

@@ -95,7 +95,10 @@ func (r *rtmpServer) startRtmp() {
Addr: ":" + strconv.Itoa(rtmpPort),
HandleConn: r.handleRtmpConn,
}
s.ListenAndServe()
if err := s.ListenAndServe(); err != nil {
logs.Error("encrypt rtmp ListenAndServe error: %v", err)
}
}
func (r *rtmpServer) handleRtmpConn(conn *rtmp.Conn) {

View File

@@ -8,6 +8,7 @@ import (
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/flvadmin"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/tcpclient/tcpclientcommon"
"github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/common"
base_service "github.com/hkmadao/rtsp2rtmp/src/rtsp2rtmp/web/service/base"
)
type RtmpPushParam struct {
@@ -34,6 +35,26 @@ func startRtmpPush(commandMessage tcpclientcommon.CommandMessage) {
}
return
}
condition := common.GetEqualCondition("code", param.CameraCode)
camera, err := base_service.CameraFindOneByCondition(condition)
if err != nil {
logs.Error("startPushRtmp: find camera: %s error: %v", param.CameraCode, err)
result := common.ErrorResult(fmt.Sprintf("startPushRtmp: find camera: %s error: %v", param.CameraCode, err))
_, err = tcpclientcommon.WriteResult(result, conn)
if err != nil {
logs.Error(err)
return
}
}
if !camera.FgPassive {
logs.Error("startPushRtmp: camera: %s fgPassive is false", param.CameraCode)
result := common.ErrorResult(fmt.Sprintf("startPushRtmp: camera: %s fgPassive is false", param.CameraCode))
_, err = tcpclientcommon.WriteResult(result, conn)
if err != nil {
logs.Error(err)
return
}
}
flvadmin.GetSingleRtmpFlvAdmin().RemoteStartWrite(param.CameraCode)
result := common.SuccessResultData("startPushRtmp success")
@@ -64,6 +85,26 @@ func stopRtmpPush(commandMessage tcpclientcommon.CommandMessage) {
}
return
}
condition := common.GetEqualCondition("code", param.CameraCode)
camera, err := base_service.CameraFindOneByCondition(condition)
if err != nil {
logs.Error("stopPushRtmp: find camera: %s error: %v", param.CameraCode, err)
result := common.ErrorResult(fmt.Sprintf("stopPushRtmp: find camera: %s error: %v", param.CameraCode, err))
_, err = tcpclientcommon.WriteResult(result, conn)
if err != nil {
logs.Error(err)
return
}
}
if !camera.FgPassive {
logs.Error("stopPushRtmp: camera: %s fgPassive is false", param.CameraCode)
result := common.ErrorResult(fmt.Sprintf("stopPushRtmp: camera: %s fgPassive is false", param.CameraCode))
_, err = tcpclientcommon.WriteResult(result, conn)
if err != nil {
logs.Error(err)
return
}
}
flvadmin.GetSingleRtmpFlvAdmin().RemoteStopWrite(param.CameraCode)
defer conn.Close()