MCPcopy
hub / github.com/livekit/livekit / AddTrack

Method AddTrack

pkg/rtc/transport.go:1057–1112  ·  view source on GitHub ↗
(
	trackLocal webrtc.TrackLocal,
	params types.AddTrackParams,
	enabledCodecs []*livekit.Codec,
	rtcpFeedbackConfig RTCPFeedbackConfig,
)

Source from the content-addressed store, hash-verified

1055}
1056
1057func (t *PCTransport) AddTrack(
1058 trackLocal webrtc.TrackLocal,
1059 params types.AddTrackParams,
1060 enabledCodecs []*livekit.Codec,
1061 rtcpFeedbackConfig RTCPFeedbackConfig,
1062) (sender *webrtc.RTPSender, transceiver *webrtc.RTPTransceiver, err error) {
1063 t.lock.Lock()
1064 canReuse := t.canReuseTransceiver
1065 td, ok := t.previousTrackDescription[trackLocal.ID()]
1066 if ok {
1067 delete(t.previousTrackDescription, trackLocal.ID())
1068 }
1069 t.lock.Unlock()
1070
1071 // keep track use same mid after migration if possible
1072 if td != nil && td.sender != nil {
1073 for _, tr := range t.pc.GetTransceivers() {
1074 if tr.Mid() == td.mid {
1075 return td.sender, tr, tr.SetSender(td.sender, trackLocal)
1076 }
1077 }
1078 }
1079
1080 // if never negotiated with client, can't reuse transceiver for track not subscribed before migration
1081 if !canReuse {
1082 return t.AddTransceiverFromTrack(trackLocal, params, enabledCodecs, rtcpFeedbackConfig)
1083 }
1084
1085 sender, err = t.pc.AddTrack(trackLocal)
1086 if err != nil {
1087 return
1088 }
1089
1090 for _, tr := range t.pc.GetTransceivers() {
1091 if tr.Sender() == sender {
1092 transceiver = tr
1093 break
1094 }
1095 }
1096
1097 if transceiver == nil {
1098 err = ErrNoTransceiver
1099 return
1100 }
1101
1102 t.queueOrConfigureSender(
1103 transceiver,
1104 enabledCodecs,
1105 rtcpFeedbackConfig,
1106 params.Stereo,
1107 !params.Red || !t.params.ClientInfo.SupportsAudioRED(),
1108 )
1109
1110 t.adjustNumOutstandingMedia(transceiver)
1111 return
1112}
1113
1114func (t *PCTransport) AddTransceiverFromTrack(

Callers

nothing calls this directly

Calls 6

SupportsAudioREDMethod · 0.80
IDMethod · 0.65
AddTrackMethod · 0.65

Tested by

no test coverage detected