feat: add more hooks

This commit is contained in:
langhuihui
2025-05-22 10:03:13 +08:00
parent f475419b7b
commit 8d6bcc7b1b
20 changed files with 434 additions and 298 deletions

View File

@@ -3,12 +3,13 @@ package rtmp
import (
"crypto/tls"
"errors"
"m7s.live/v5/pkg/config"
"m7s.live/v5/pkg/task"
"net"
"net/url"
"strings"
"m7s.live/v5/pkg/config"
"m7s.live/v5/pkg/task"
"m7s.live/v5"
)
@@ -53,7 +54,7 @@ func (c *Client) Start() (err error) {
return err
}
c.Init(conn)
c.Logger = c.Logger.With("local", conn.LocalAddr().String())
c.SetDescription("local", conn.LocalAddr().String())
c.Info("connect")
c.WriteChunkSize = c.chunkSize
c.AppName = strings.Join(ps[1:len(ps)-1], "/")

View File

@@ -31,8 +31,8 @@ func (avcc *RTMPVideo) filterH264(naluSizeLen int) {
reader := avcc.NewReader()
lenReader := reader.NewReader()
reader.Skip(5)
lenReader.Skip(5)
var afterFilter util.Memory
lenReader.RangeN(5, afterFilter.AppendOne)
allocator := avcc.GetAllocator()
var hasBadNalu bool
for {
@@ -49,7 +49,12 @@ func (avcc *RTMPVideo) filterH264(naluSizeLen int) {
reader.RangeN(int(naluLen), func(b []byte) {
naluBuffer = append(naluBuffer, b)
})
if badType := codec.ParseH264NALUType(naluBuffer[0][0]); badType > 9 {
badType := codec.ParseH264NALUType(naluBuffer[0][0])
switch badType {
case 5, 6, 1:
afterFilter.Append(lenBuffer...)
afterFilter.Append(naluBuffer...)
default:
hasBadNalu = true
if allocator != nil {
for _, nalu := range lenBuffer {
@@ -59,9 +64,6 @@ func (avcc *RTMPVideo) filterH264(naluSizeLen int) {
allocator.Free(nalu)
}
}
} else {
afterFilter.Append(lenBuffer...)
afterFilter.Append(naluBuffer...)
}
}
if hasBadNalu {
@@ -166,15 +168,15 @@ func (avcc *RTMPVideo) Parse(t *AVTrack) (err error) {
return
}
} else {
// switch ctx := t.ICodecCtx.(type) {
// case *codec.H264Ctx:
// avcc.filterH264(int(ctx.RecordInfo.LengthSizeMinusOne) + 1)
// case *H265Ctx:
// avcc.filterH265(int(ctx.RecordInfo.LengthSizeMinusOne) + 1)
// }
// if avcc.Size == 0 {
// return ErrSkip
// }
switch ctx := t.ICodecCtx.(type) {
case *codec.H264Ctx:
avcc.filterH264(int(ctx.RecordInfo.LengthSizeMinusOne) + 1)
case *H265Ctx:
avcc.filterH265(int(ctx.RecordInfo.LengthSizeMinusOne) + 1)
}
if avcc.Size <= 5 {
return ErrSkip
}
}
}
return