Beispiel #1
0
        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);
        }
Beispiel #2
0
        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();
            };
        }
Beispiel #3
0
        internal RTCStatsReportAsyncOperation(RTCPeerConnection connection, RTCRtpSender sender)
        {
            NativeMethods.PeerConnectionSenderGetStats(connection.self, sender.self);

            connection.OnStatsDelivered = ptr =>
            {
                Value   = new RTCStatsReport(ptr);
                IsError = false;
                this.Done();
            };
        }
Beispiel #4
0
        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);
 }
Beispiel #7
0
        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);
        }
Beispiel #8
0
 /// <summary>
 ///
 /// </summary>
 /// <param name="sender"></param>
 /// <seealso cref="AddTrack"/>
 public RTCErrorType RemoveTrack(RTCRtpSender sender)
 {
     cacheTracks.Remove(sender.Track);
     return(NativeMethods.PeerConnectionRemoveTrack(GetSelfOrThrow(), sender.self));
 }