mirror of
https://github.com/hkmadao/rtsp2rtmp.git
synced 2025-09-26 19:31:19 +08:00
rtmp connection encrypt support
This commit is contained in:
4
go.mod
4
go.mod
@@ -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
4
go.sum
@@ -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=
|
||||
|
@@ -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
|
||||
|
@@ -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) {
|
||||
|
@@ -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()
|
||||
|
Reference in New Issue
Block a user