fix: send rtcp

This commit is contained in:
langhuihui
2024-11-30 22:56:13 +08:00
parent 2eb847c0c4
commit 305ef1834a
2 changed files with 42 additions and 12 deletions

View File

@@ -21,26 +21,52 @@ func ParseLevel(level string) slog.Level {
return lv.Level()
}
type HandlerInfo struct {
slog.Handler
origin slog.Handler
}
type MultiLogHandler struct {
handlers []slog.Handler
attrChildren sync.Map
parentLevel *slog.Level
level *slog.Level
handlers []HandlerInfo
attrChildren, groupChildren sync.Map
parentLevel *slog.Level
level *slog.Level
}
func (m *MultiLogHandler) Add(h slog.Handler) {
m.handlers = append(m.handlers, h)
m.add(h, h)
}
func (m *MultiLogHandler) add(origin slog.Handler, warp slog.Handler) {
m.handlers = append(m.handlers, HandlerInfo{origin: origin, Handler: warp})
m.attrChildren.Range(func(key, value any) bool {
child := key.(*MultiLogHandler)
child.Add(h.WithAttrs(value.([]slog.Attr)))
child.add(origin, origin.WithAttrs(value.([]slog.Attr)))
return true
})
m.groupChildren.Range(func(key, value any) bool {
child := key.(*MultiLogHandler)
child.add(origin, origin.WithGroup(value.(string)))
return true
})
}
func (m *MultiLogHandler) Remove(h slog.Handler) {
if i := slices.Index(m.handlers, h); i != -1 {
if i := slices.IndexFunc(m.handlers, func(info HandlerInfo) bool {
return info.origin == h
}); i != -1 {
m.handlers = slices.Delete(m.handlers, i, i+1)
}
m.attrChildren.Range(func(key, value any) bool {
child := key.(*MultiLogHandler)
child.Remove(h)
return true
})
m.groupChildren.Range(func(key, value any) bool {
child := key.(*MultiLogHandler)
child.Remove(h)
return true
})
}
func (m *MultiLogHandler) SetLevel(level slog.Level) {
@@ -72,7 +98,7 @@ func (m *MultiLogHandler) Handle(ctx context.Context, rec slog.Record) error {
// WithAttrs implements slog.Handler.
func (m *MultiLogHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
result := &MultiLogHandler{
handlers: make([]slog.Handler, len(m.handlers)),
handlers: make([]HandlerInfo, len(m.handlers)),
parentLevel: m.parentLevel,
}
m.attrChildren.Store(result, attrs)
@@ -80,7 +106,7 @@ func (m *MultiLogHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
result.parentLevel = m.level
}
for i, h := range m.handlers {
result.handlers[i] = h.WithAttrs(attrs)
result.handlers[i] = HandlerInfo{origin: h.origin, Handler: h.WithAttrs(attrs)}
}
return result
}
@@ -88,14 +114,15 @@ func (m *MultiLogHandler) WithAttrs(attrs []slog.Attr) slog.Handler {
// WithGroup implements slog.Handler.
func (m *MultiLogHandler) WithGroup(name string) slog.Handler {
result := &MultiLogHandler{
handlers: make([]slog.Handler, len(m.handlers)),
handlers: make([]HandlerInfo, len(m.handlers)),
parentLevel: m.parentLevel,
}
m.groupChildren.Store(result, name)
if m.level != nil {
result.parentLevel = m.level
}
for i, h := range m.handlers {
result.handlers[i] = h.WithGroup(name)
result.handlers[i] = HandlerInfo{origin: h.origin, Handler: h.WithGroup(name)}
}
return result
}

View File

@@ -176,8 +176,11 @@ func (r *Receiver) Receive() (err error) {
if err != nil {
return err
}
length := len(rawRR) + len(rawSDES)
rtcp := append([]byte{'$', 0x03, byte(length >> 8), byte(length)}, rawRR...)
rtcp = append(rtcp, rawSDES...)
// Send RTCP packets
if _, err = r.NetConnection.Write(append(rawRR, rawSDES...)); err != nil {
if _, err = r.NetConnection.Write(rtcp); err != nil {
return err
}
}