private void OnBandwidthChanged(int index) { if (_pc1 == null || _pc2 == null) { return; } ulong? bandwidth = bandwidthOptions.Values.ElementAt(index); RTCRtpSender sender = _pc1.GetSenders().First(); RTCRtpSendParameters parameters = sender.GetParameters(); if (bandwidth == null) { parameters.encodings[0].maxBitrate = null; parameters.encodings[0].minBitrate = null; } else { parameters.encodings[0].maxBitrate = bandwidth * 1000; parameters.encodings[0].minBitrate = bandwidth * 1000; } RTCError error = sender.SetParameters(parameters); if (error.errorType != RTCErrorType.None) { Debug.LogErrorFormat("RTCRtpSender.SetParameters failed {0}", error.errorType); } Debug.Log("SetParameters:" + bandwidth); }
internal RTCStatsReportAsyncOperation(RTCPeerConnection connection, RTCRtpSender sender) { NativeMethods.PeerConnectionSenderGetStats(connection.GetSelfOrThrow(), sender.self); connection.OnStatsDelivered = ptr => { Value = WebRTC.FindOrCreate(ptr, ptr_ => new RTCStatsReport(ptr_)); IsError = false; this.Done(); }; }
internal RTCStatsReportAsyncOperation(RTCPeerConnection connection, RTCRtpSender sender) { NativeMethods.PeerConnectionSenderGetStats(connection.self, sender.self); connection.OnStatsDelivered = ptr => { Value = new RTCStatsReport(ptr); IsError = false; this.Done(); }; }
private IEnumerator UpdateStatsCoroutine() { RTCRtpSender sender = _pc1?.GetSenders().First(); if (sender == null) { yield break; } RTCStatsReportAsyncOperation op = sender.GetStats(); yield return(op); if (op.IsError) { Debug.LogErrorFormat("RTCRtpSender.GetStats() is failed {0}", op.Error.errorType); } else { UpdateStatsPacketSize(op.Value); } }
internal RTCStatsReportAsyncOperation GetStats(RTCRtpSender sender) { return(new RTCStatsReportAsyncOperation(this, sender)); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <seealso cref="AddTrack"/> public void RemoveTrack(RTCRtpSender sender) { NativeMethods.PeerConnectionRemoveTrack( GetSelfOrThrow(), sender.self); }
void Start() { WebRTC.Initialize(WebRTCSettings.EncoderType, WebRTCSettings.LimitTextureSize); StartCoroutine(WebRTC.Update()); StartCoroutine(LoopStatsCoroutine()); toggleEnableMicrophone.isOn = false; toggleEnableMicrophone.onValueChanged.AddListener(OnEnableMicrophone); dropdownAudioClips.interactable = true; dropdownAudioClips.options = audioclipList.Select(clip => new Dropdown.OptionData(clip.name)).ToList(); dropdownMicrophoneDevices.interactable = false; dropdownMicrophoneDevices.options = Microphone.devices.Select(name => new Dropdown.OptionData(name)).ToList(); dropdownMicrophoneDevices.onValueChanged.AddListener(OnDeviceChanged); var audioConf = AudioSettings.GetConfiguration(); dropdownSpeakerMode.options = Enum.GetNames(typeof(AudioSpeakerMode)).Select(mode => new Dropdown.OptionData(mode)).ToList(); dropdownSpeakerMode.value = (int)audioConf.speakerMode; dropdownSpeakerMode.onValueChanged.AddListener(OnSpeakerModeChanged); dropdownDSPBufferSize.options = dspBufferSizeOptions.Select(clip => new Dropdown.OptionData(clip.Key)).ToList(); dropdownDSPBufferSize.onValueChanged.AddListener(OnDSPBufferSizeChanged); // best latency is default OnDSPBufferSizeChanged(dropdownDSPBufferSize.value); dropdownAudioCodecs.AddOptions(new List <string> { "Default" }); var codecs = RTCRtpSender.GetCapabilities(TrackKind.Audio).codecs; var excludeCodecTypes = new[] { "audio/CN", "audio/telephone-event" }; foreach (var codec in codecs) { if (excludeCodecTypes.Count(type => codec.mimeType.Contains(type)) > 0) { continue; } availableCodecs.Add(codec); } dropdownAudioCodecs.AddOptions(availableCodecs.Select(codec => new Dropdown.OptionData(CodecToOptionName(codec))).ToList()); dropdownBandwidth.options = bandwidthOptions .Select(pair => new Dropdown.OptionData { text = pair.Key }) .ToList(); dropdownBandwidth.onValueChanged.AddListener(OnBandwidthChanged); dropdownBandwidth.interactable = false; // Update UI OnDeviceChanged(dropdownMicrophoneDevices.value); buttonStart.onClick.AddListener(OnStart); buttonCall.onClick.AddListener(OnCall); buttonPause.onClick.AddListener(OnPause); buttonResume.onClick.AddListener(OnResume); buttonHangup.onClick.AddListener(OnHangUp); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <seealso cref="AddTrack"/> public RTCErrorType RemoveTrack(RTCRtpSender sender) { cacheTracks.Remove(sender.Track); return(NativeMethods.PeerConnectionRemoveTrack(GetSelfOrThrow(), sender.self)); }