Fix timing issue between track republish (#3428)

This commit is contained in:
cnderrauber
2025-02-13 13:59:03 +08:00
committed by GitHub
parent f160f6200a
commit 7e4df818ee
2 changed files with 7 additions and 3 deletions
+2 -3
View File
@@ -1773,9 +1773,6 @@ func (p *ParticipantImpl) onMediaTrack(rtcTrack *webrtc.TrackRemote, rtpReceiver
var track sfu.TrackRemote = sfu.NewTrackRemoteFromSdp(rtcTrack, codec)
publishedTrack, isNewTrack := p.mediaTrackReceived(track, rtpReceiver)
if publishedTrack == nil {
p.pendingTracksLock.Lock()
p.pendingRemoteTracks = append(p.pendingRemoteTracks, &pendingRemoteTrack{track: rtcTrack, receiver: rtpReceiver})
p.pendingTracksLock.Unlock()
p.pubLogger.Debugw(
"webrtc Track published but can't find MediaTrack, add to pendingTracks",
"kind", track.Kind().String(),
@@ -2397,6 +2394,7 @@ func (p *ParticipantImpl) mediaTrackReceived(track sfu.TrackRemote, rtpReceiver
"mid", mid,
)
if mid == "" {
p.pendingRemoteTracks = append(p.pendingRemoteTracks, &pendingRemoteTrack{track: track.RTCTrack(), receiver: rtpReceiver})
p.pendingTracksLock.Unlock()
p.pubLogger.Warnw("could not get mid for track", nil, "trackID", track.ID())
return nil, false
@@ -2408,6 +2406,7 @@ func (p *ParticipantImpl) mediaTrackReceived(track sfu.TrackRemote, rtpReceiver
if !ok {
signalCid, ti, migrated, createdAt := p.getPendingTrack(track.ID(), ToProtoTrackKind(track.Kind()), true)
if ti == nil {
p.pendingRemoteTracks = append(p.pendingRemoteTracks, &pendingRemoteTrack{track: track.RTCTrack(), receiver: rtpReceiver})
p.pendingTracksLock.Unlock()
return nil, false
}
+5
View File
@@ -10,6 +10,7 @@ type TrackRemote interface {
StreamID() string
Kind() webrtc.RTPCodecType
Codec() webrtc.RTPCodecParameters
RTCTrack() *webrtc.TrackRemote
}
// TrackRemoteFromSdp represents a remote track that could be created by the sdp.
@@ -30,3 +31,7 @@ func NewTrackRemoteFromSdp(track *webrtc.TrackRemote, codec webrtc.RTPCodecParam
func (t *TrackRemoteFromSdp) Codec() webrtc.RTPCodecParameters {
return t.sdpCodec
}
func (t *TrackRemoteFromSdp) RTCTrack() *webrtc.TrackRemote {
return t.TrackRemote
}