重构订阅者集合,减少轨道等待

This commit is contained in:
dexter
2022-12-29 17:51:59 +08:00
parent 99126c44f3
commit 95fff02162
12 changed files with 205 additions and 178 deletions

View File

@@ -7,6 +7,9 @@ import (
"m7s.live/engine/v4/config"
"m7s.live/engine/v4/util"
)
type RTPWriter interface {
writeRTPFrame(frame *RTPFrame)
}
func (av *Media[T]) UnmarshalRTPPacket(p *rtp.Packet) (frame *RTPFrame) {
if av.DecoderConfiguration.PayloadType != p.PayloadType {
@@ -30,10 +33,27 @@ func (av *Media[T]) UnmarshalRTP(raw []byte) (frame *RTPFrame) {
return av.UnmarshalRTPPacket(&p)
}
// WriteRTPPack 写入已反序列化的RTP包
func (av *Media[T]) WriteRTPPack(p *rtp.Packet) {
for frame := av.UnmarshalRTPPacket(p); frame != nil; frame = av.nextRTPFrame() {
av.writeRTPFrame(frame)
}
}
// WriteRTP 写入未反序列化的RTP包
func (av *Media[T]) WriteRTP(raw []byte) {
for frame := av.UnmarshalRTP(raw); frame != nil; frame = av.nextRTPFrame() {
av.writeRTPFrame(frame)
}
}
type RTPDemuxer struct {
lastSeq uint16 //上一个收到的序号,用于乱序重排
lastSeq2 uint16 //记录上上一个收到的序列号
乱序重排 util.RTPReorder[*RTPFrame]
RTPWriter
}
// 获取缓存中下一个rtpFrame
@@ -67,4 +87,6 @@ func (av *RTPDemuxer) recorderRTP(frame *RTPFrame) *RTPFrame {
type RTPMuxer struct {
rtpSequence uint16 //用于生成下一个rtp包的序号
}