mirror of
https://github.com/Monibuca/engine.git
synced 2025-10-05 16:46:58 +08:00
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:
@@ -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 = ©
|
||||
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 = ©
|
||||
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
|
||||
})
|
||||
|
Reference in New Issue
Block a user