| 56 | } |
| 57 | |
| 58 | func NewWrappedReceiver(params WrappedReceiverParams) *WrappedReceiver { |
| 59 | sfuReceivers := make([]sfu.TrackReceiver, 0, len(params.Receivers)) |
| 60 | for _, r := range params.Receivers { |
| 61 | sfuReceivers = append(sfuReceivers, r) |
| 62 | } |
| 63 | |
| 64 | codecs := params.UpstreamCodecs |
| 65 | if len(codecs) == 1 { |
| 66 | normalizedMimeType := mime.NormalizeMimeType(codecs[0].MimeType) |
| 67 | if normalizedMimeType == mime.MimeTypeRED { |
| 68 | // if upstream is opus/red, then add opus to match clients that don't support red |
| 69 | codecs = append(codecs, protoCodecs.OpusCodecParameters) |
| 70 | } else if !params.DisableRed && normalizedMimeType == mime.MimeTypeOpus { |
| 71 | // if upstream is opus only and red enabled, add red to match clients that support red |
| 72 | codecs = append(codecs, protoCodecs.RedCodecParameters) |
| 73 | // prefer red codec |
| 74 | codecs[0], codecs[1] = codecs[1], codecs[0] |
| 75 | } |
| 76 | } |
| 77 | |
| 78 | return &WrappedReceiver{ |
| 79 | params: params, |
| 80 | receivers: sfuReceivers, |
| 81 | codecs: codecs, |
| 82 | } |
| 83 | } |
| 84 | |
| 85 | func (r *WrappedReceiver) TrackID() livekit.TrackID { |
| 86 | return r.params.TrackID |