public static Task <RTCMediaStreamTrackConfiguration> GetTrackConfigurationForCapabilities(RTCRtpCapabilities sourceCapabilities, RTCRtpCodecCapability preferredCodec) { if (preferredCodec == null) { throw new ArgumentNullException(nameof(preferredCodec)); } return(Task.Run(() => { var capabilities = RTCRtpCapabilities.Clone(sourceCapabilities); // scoope: move prefered codec to be first in the list { var itemsToRemove = capabilities.Codecs.Where(x => x.PreferredPayloadType == preferredCodec.PreferredPayloadType).ToList(); if (itemsToRemove.Count > 0) { RTCRtpCodecCapability codecCapability = itemsToRemove.First(); var modifyList = capabilities.Codecs.ToList(); if (codecCapability != null && modifyList.IndexOf(codecCapability) > 0) { modifyList.Remove(codecCapability); modifyList.Insert(0, codecCapability); } capabilities.Codecs = modifyList; } } RTCMediaStreamTrackConfiguration configuration = new RTCMediaStreamTrackConfiguration() { Capabilities = capabilities }; return configuration; })); }
private void AddTracks() { foreach (var track in videoStream.GetTracks()) { pc1Senders.Add(_pc1.AddTrack(track, videoStream)); } if (!videoUpdateStarted) { StartCoroutine(WebRTC.Update()); videoUpdateStarted = true; } RTCRtpCodecCapability[] codecs = null; if (codecSelector.value == 0) { codecs = RTCRtpSender.GetCapabilities(TrackKind.Video).codecs; } else { RTCRtpCodecCapability preferredCodec = availableCodecs[codecSelector.value - 1]; codecs = new[] { preferredCodec }; } RTCRtpTransceiver transceiver = _pc1.GetTransceivers().First(); RTCErrorType error = transceiver.SetCodecPreferences(codecs); if (error != RTCErrorType.None) { Debug.LogErrorFormat("RTCRtpTransceiver.SetCodecPreferences failed. {0}", error); } }
public void SetCodec(RTCRtpCodecCapability codec) { this.videoCodec = codec; }