fix: webrtc拉流丢包没有重传问题

This commit is contained in:
ydajiang
2025-01-11 10:38:40 +08:00
parent 4e62e7edb2
commit 7d4d7644b5

View File

@@ -7,6 +7,7 @@ import (
"github.com/lkmio/lkm/stream"
"github.com/pion/webrtc/v3"
"github.com/pion/webrtc/v3/pkg/media"
"io"
"time"
)
@@ -72,12 +73,27 @@ func (s *Sink) StartStreaming(transStream stream.TransStream) error {
remoteTrack, err = webrtc.NewTrackLocalStaticSample(webrtc.RTPCodecCapability{MimeType: mimeType}, id, "pion")
if err != nil {
return err
} else if _, err := connection.AddTransceiverFromTrack(remoteTrack, webrtc.RTPTransceiverInit{Direction: webrtc.RTPTransceiverDirectionSendonly}); err != nil {
return err
} else if _, err = connection.AddTrack(remoteTrack); err != nil {
}
transceiver, err := connection.AddTransceiverFromTrack(remoteTrack, webrtc.RTPTransceiverInit{Direction: webrtc.RTPTransceiverDirectionSendonly})
if err != nil {
return err
}
// pion需要在外部读取rtcp包,才会处理nack包丢包重传. https://github.com/pion/interceptor/blob/e1874104865b23ba465ecc505f959daf156cc2a5/pkg/nack/responder_interceptor.go#L82
go func() {
for {
_, _, err := transceiver.Sender().ReadRTCP()
if err == nil {
continue
} else if io.EOF == err || io.ErrClosedPipe == err {
break
} else {
println(err.Error())
}
}
}()
s.tracks[index] = remoteTrack
}