feat: add insert sei

feat: add engine init done event
refactor: remove ring_lock
fix: retry connect to console
fix: h265 sps parse error
fix: concurrent publish

desc:
- 增加插入SEI帧的功能
- 增加engine初始化完成事件
- 删除ring_lock,DataTrack和MediaTrack共用一个ring
- 修复console无限重连导致远程服务器崩溃问题
- 修复h265 sps解析错误问题
- 修复并发发布导致的问题
This commit is contained in:
langhuihui
2023-06-15 20:04:14 +08:00
parent 1769ba1549
commit b87416b78e
24 changed files with 416 additions and 287 deletions

View File

@@ -148,7 +148,7 @@ func (s *Subscriber) OnEvent(event any) {
}
func (s *Subscriber) CreateTrackReader(t *track.Media) (result *track.AVRingReader) {
result = track.NewAVRingReader(t, s.Config.Poll)
result = track.NewAVRingReader(t)
result.Logger = s.With(zap.String("track", t.Name))
return
}
@@ -170,7 +170,7 @@ func (s *Subscriber) AddTrack(t Track) bool {
default:
return false
}
s.Info("track+1", zap.String("name", t.GetBase().Name))
s.Info("track+1", zap.String("name", t.GetName()))
return true
}
@@ -236,11 +236,12 @@ func (s *Subscriber) PlayBlock(subType byte) {
var videoSeq, audioSeq uint16
sendVideoFrame = func(frame *AVFrame) {
// fmt.Println("v", frame.Sequence, frame.AbsTime, s.VideoReader.AbsTime, frame.IFrame)
delta := uint32(s.VideoReader.SkipTs * 90 / time.Millisecond)
frame.RTP.Range(func(vp RTPFrame) bool {
videoSeq++
copy := *vp.Packet
vp.Packet = &copy
vp.Header.Timestamp = vp.Header.Timestamp - uint32(s.VideoReader.SkipTs*90/time.Millisecond)
vp.Header.Timestamp = vp.Header.Timestamp - delta
vp.Header.SequenceNumber = videoSeq
spesic.OnEvent((VideoRTP)(vp))
return true
@@ -249,12 +250,13 @@ func (s *Subscriber) PlayBlock(subType byte) {
sendAudioFrame = func(frame *AVFrame) {
// fmt.Println("a", frame.Sequence, frame.AbsTime, s.AudioReader.AbsTime)
delta := uint32(s.AudioReader.SkipTs / time.Millisecond * time.Duration(s.AudioReader.Track.SampleRate) / 1000)
frame.RTP.Range(func(ap RTPFrame) bool {
audioSeq++
copy := *ap.Packet
ap.Packet = &copy
ap.Header.SequenceNumber = audioSeq
ap.Header.Timestamp = ap.Header.Timestamp - uint32(s.AudioReader.SkipTs/time.Millisecond*time.Duration(s.AudioReader.Track.SampleRate)/1000)
ap.Header.Timestamp = ap.Header.Timestamp - delta
spesic.OnEvent((AudioRTP)(ap))
return true
})