Skip to content

Commit

Permalink
Add pkt_size option fort RTSP server
Browse files Browse the repository at this point in the history
  • Loading branch information
AlexxIT committed Apr 24, 2023
1 parent 813c8b3 commit a20de73
Show file tree
Hide file tree
Showing 6 changed files with 29 additions and 3 deletions.
9 changes: 8 additions & 1 deletion cmd/rtsp/rtsp.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ func Init() {
Username string `yaml:"username" json:"-"`
Password string `yaml:"password" json:"-"`
DefaultQuery string `yaml:"default_query" json:"default_query"`
PacketSize uint16 `yaml:"pkt_size"`
} `yaml:"rtsp"`
}

Expand Down Expand Up @@ -67,6 +68,7 @@ func Init() {
}

c := rtsp.NewServer(conn)
c.PacketSize = conf.Mod.PacketSize
// skip check auth for localhost
if conf.Mod.Username != "" && !conn.RemoteAddr().(*net.TCPAddr).IP.IsLoopback() {
c.Auth(conf.Mod.Username, conf.Mod.Password)
Expand Down Expand Up @@ -174,13 +176,18 @@ func tcpHandler(conn *rtsp.Conn) {

conn.SessionName = app.UserAgent

conn.Medias = mp4.ParseQuery(conn.URL.Query())
query := conn.URL.Query()
conn.Medias = mp4.ParseQuery(query)
if conn.Medias == nil {
for _, media := range defaultMedias {
conn.Medias = append(conn.Medias, media.Clone())
}
}

if s := query.Get("pkt_size"); s != "" {
conn.PacketSize = uint16(core.Atoi(s))
}

if err := stream.AddConsumer(conn); err != nil {
log.Warn().Err(err).Str("stream", name).Msg("[rtsp]")
return
Expand Down
4 changes: 4 additions & 0 deletions pkg/h264/rtp.go
Original file line number Diff line number Diff line change
Expand Up @@ -94,6 +94,10 @@ func RTPDepay(codec *core.Codec, handler core.HandlerFunc) core.HandlerFunc {
}

func RTPPay(mtu uint16, handler core.HandlerFunc) core.HandlerFunc {
if mtu == 0 {
mtu = 1472
}

payloader := &Payloader{IsAVC: true}
sequencer := rtp.NewRandomSequencer()
mtu -= 12 // rtp.Header size
Expand Down
4 changes: 4 additions & 0 deletions pkg/h265/rtp.go
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,10 @@ func RTPDepay(codec *core.Codec, handler core.HandlerFunc) core.HandlerFunc {
}

func RTPPay(mtu uint16, handler core.HandlerFunc) core.HandlerFunc {
if mtu == 0 {
mtu = 1472
}

payloader := &Payloader{}
sequencer := rtp.NewRandomSequencer()
mtu -= 12 // rtp.Header size
Expand Down
1 change: 1 addition & 0 deletions pkg/rtsp/conn.go
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@ type Conn struct {
// public

Backchannel bool
PacketSize uint16
SessionName string

Medias []*core.Media
Expand Down
13 changes: 11 additions & 2 deletions pkg/rtsp/consumer.go
Original file line number Diff line number Diff line change
Expand Up @@ -104,14 +104,23 @@ func (c *Conn) packetWriter(codec *core.Codec, channel, payloadType uint8) core.
if !codec.IsRTP() {
switch codec.Name {
case core.CodecH264:
handlerFunc = h264.RTPPay(1500, handlerFunc)
handlerFunc = h264.RTPPay(c.PacketSize, handlerFunc)
case core.CodecH265:
handlerFunc = h265.RTPPay(1500, handlerFunc)
handlerFunc = h265.RTPPay(c.PacketSize, handlerFunc)
case core.CodecAAC:
handlerFunc = aac.RTPPay(handlerFunc)
case core.CodecJPEG:
handlerFunc = mjpeg.RTPPay(handlerFunc)
}
} else if c.PacketSize != 0 {
switch codec.Name {
case core.CodecH264:
handlerFunc = h264.RTPPay(c.PacketSize, handlerFunc)
handlerFunc = h264.RTPDepay(codec, handlerFunc)
case core.CodecH265:
handlerFunc = h265.RTPPay(c.PacketSize, handlerFunc)
handlerFunc = h265.RTPDepay(codec, handlerFunc)
}
}

return handlerFunc
Expand Down
1 change: 1 addition & 0 deletions pkg/webrtc/api.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ import (
)

// ReceiveMTU = Ethernet MTU (1500) - IP Header (20) - UDP Header (8)
// https://ffmpeg.org/ffmpeg-all.html#Muxer
const ReceiveMTU = 1472

func NewAPI(address string) (*webrtc.API, error) {
Expand Down

0 comments on commit a20de73

Please sign in to comment.