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

@@ -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