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:
@@ -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], "/")
|
||||
|
||||
@@ -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