mirror of
https://github.com/langhuihui/monibuca.git
synced 2025-12-24 13:48:04 +08:00
feat: add more hooks
This commit is contained in:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user