fix: rtp audio

This commit is contained in:
langhuihui
2025-09-06 20:59:07 +08:00
parent 7ad6136f23
commit f60c9fd421
3 changed files with 28 additions and 35 deletions

View File

@@ -106,11 +106,9 @@ func (s *ReuseArray[T]) Reset() {
*s = (*s)[:0]
}
func (s *ReuseArray[T]) Reduce() ReuseArray[T] {
func (s *ReuseArray[T]) Reduce() {
ss := *s
ss = ss[:len(ss)-1]
*s = ss
return ss
*s = ss[:len(ss)-1]
}
func (s *ReuseArray[T]) Remove(item *T) bool {

View File

@@ -459,22 +459,24 @@ func (p *MP4Plugin) StartRecord(ctx context.Context, req *mp4pb.ReqStartRecord)
Fragment: fragment,
FilePath: filePath,
}
if stream, ok := p.Server.Streams.SafeGet(req.StreamPath); ok {
job := p.Record(stream, recordConf, nil)
res.Data = uint64(uintptr(unsafe.Pointer(job.GetTask())))
} else {
sub, err := p.Subscribe(ctx, req.StreamPath)
if err == nil && sub != nil {
if stream, ok := p.Server.Streams.SafeGet(req.StreamPath); ok {
job := p.Record(stream, recordConf, nil)
res.Data = uint64(uintptr(unsafe.Pointer(job.GetTask())))
} else {
err = pkg.ErrNotFound
}
} else {
var stream *m7s.Publisher
var ok bool
if stream, ok = p.Server.Streams.SafeGet(req.StreamPath); !ok {
var sub *m7s.Subscriber
sub, err = p.Subscribe(ctx, req.StreamPath)
if err != nil || sub == nil {
err = pkg.ErrNotFound
return
}
defer sub.Stop(task.ErrAutoStop)
if stream, ok = p.Server.Streams.SafeGet(req.StreamPath); !ok {
err = pkg.ErrNotFound
return
}
}
job := p.Record(stream, recordConf, nil)
res.Data = uint64(job.GetTaskPointer())
err = job.WaitStarted()
return
}

View File

@@ -98,19 +98,18 @@ func (r *RTPCtx) GetRTPCodecParameter() webrtc.RTPCodecParameters {
return r.RTPCodecParameters
}
func (r *RTPData) Append(ctx *RTPCtx, ts uint32, payload []byte) *rtp.Packet {
func (r *RTPData) Append(ctx *RTPCtx, ts uint32, payload []byte) (packet *rtp.Packet) {
ctx.SequenceNumber++
r.Packets = append(r.Packets, rtp.Packet{
Header: rtp.Header{
Version: 2,
SequenceNumber: ctx.SequenceNumber,
Timestamp: ts,
SSRC: ctx.SSRC,
PayloadType: uint8(ctx.PayloadType),
},
Payload: payload,
})
return &r.Packets[len(r.Packets)-1]
packet = r.Packets.GetNextPointer()
packet.Header = rtp.Header{
Version: 2,
SequenceNumber: ctx.SequenceNumber,
Timestamp: ts,
SSRC: ctx.SSRC,
PayloadType: uint8(ctx.PayloadType),
}
packet.Payload = payload
return
}
var _ IAVFrame = (*AudioFrame)(nil)
@@ -119,12 +118,6 @@ type AudioFrame struct {
RTPData
}
func (r *AudioFrame) Parse(data IAVFrame) (err error) {
input := data.(*AudioFrame)
r.Packets = append(r.Packets[:0], input.Packets...)
return
}
func payloadLengthInfoDecode(buf []byte) (int, int, error) {
lb := len(buf)
l := 0