mirror of
https://github.com/lkmio/lkm.git
synced 2025-10-05 07:06:57 +08:00
支持保存推流数据包到文件. 打印拉流url
This commit is contained in:
@@ -2,30 +2,48 @@ package gb28181
|
||||
|
||||
import (
|
||||
"github.com/yangjiechina/avformat/transport"
|
||||
"github.com/yangjiechina/lkm/log"
|
||||
"github.com/yangjiechina/lkm/stream"
|
||||
"net"
|
||||
)
|
||||
|
||||
// TCPServer GB28181TCP被动收流
|
||||
type TCPServer struct {
|
||||
stream.StreamServer[*TCPSession]
|
||||
|
||||
tcp *transport.TCPServer
|
||||
filter Filter
|
||||
}
|
||||
|
||||
func (T *TCPServer) OnConnected(conn net.Conn) []byte {
|
||||
log.Sugar.Infof("GB28181连接 conn:%s", conn.RemoteAddr().String())
|
||||
func (T *TCPServer) OnNewSession(conn net.Conn) *TCPSession {
|
||||
return NewTCPSession(conn, T.filter)
|
||||
}
|
||||
|
||||
con := conn.(*transport.Conn)
|
||||
session := NewTCPSession(conn, T.filter)
|
||||
con.Data = session
|
||||
func (T *TCPServer) OnCloseSession(session *TCPSession) {
|
||||
session.Close()
|
||||
|
||||
if session.source != nil {
|
||||
T.filter.RemoveSource(session.source.SSRC())
|
||||
}
|
||||
|
||||
if stream.AppConfig.GB28181.IsMultiPort() {
|
||||
T.tcp.Close()
|
||||
T.Handler = nil
|
||||
}
|
||||
}
|
||||
|
||||
func (T *TCPServer) OnConnected(conn net.Conn) []byte {
|
||||
T.StreamServer.OnConnected(conn)
|
||||
|
||||
//TCP使用ReceiveBuffer区别在于,多端口模式从第一包就使用ReceiveBuffer, 单端口模式先解析出ssrc, 找到source. 后续再使用ReceiveBuffer.
|
||||
if session.source != nil {
|
||||
return session.receiveBuffer.GetBlock()
|
||||
if conn.(*transport.Conn).Data.(*TCPSession).source != nil {
|
||||
return conn.(*transport.Conn).Data.(*TCPSession).receiveBuffer.GetBlock()
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (T *TCPServer) OnPacket(conn net.Conn, data []byte) []byte {
|
||||
T.StreamServer.OnPacket(conn, data)
|
||||
session := conn.(*transport.Conn).Data.(*TCPSession)
|
||||
|
||||
//单端口收流
|
||||
@@ -42,22 +60,16 @@ func (T *TCPServer) OnPacket(conn net.Conn, data []byte) []byte {
|
||||
return nil
|
||||
}
|
||||
|
||||
func (T *TCPServer) OnDisConnected(conn net.Conn, err error) {
|
||||
log.Sugar.Infof("GB28181断开连接 conn:%s", conn.RemoteAddr().String())
|
||||
|
||||
con := conn.(*transport.Conn)
|
||||
if con.Data != nil && con.Data.(*TCPSession).source != nil {
|
||||
con.Data.(*TCPSession).source.Close()
|
||||
}
|
||||
|
||||
con.Data = nil
|
||||
}
|
||||
|
||||
func NewTCPServer(addr net.Addr, filter Filter) (*TCPServer, error) {
|
||||
server := &TCPServer{
|
||||
filter: filter,
|
||||
}
|
||||
|
||||
server.StreamServer = stream.StreamServer[*TCPSession]{
|
||||
SourceType: stream.SourceType28181,
|
||||
Handler: server,
|
||||
}
|
||||
|
||||
tcp := &transport.TCPServer{}
|
||||
tcp.SetHandler(server)
|
||||
if err := tcp.Bind(addr); err != nil {
|
||||
|
Reference in New Issue
Block a user