Exemplo n.º 1
0
        private void PeerConnection_OnTrack(IRTCTrackEvent Event)
        {
            if (Event.Track.Kind == "video")
            {
                _peerVideoTrack = Event.Track;

                if (_peerVideoTrack != null)
                {
                    _peerVideoTrack.Element = MediaElementMaker.Bind(Devices.Instance.PeerVideo);
                    ((MediaStreamTrack)_peerVideoTrack).OnFrameRateChanged += (float frameRate) =>
                    {
                        FramesPerSecondChanged?.Invoke("PEER", frameRate.ToString("0.0"));
                    };
                    ((MediaStreamTrack)_peerVideoTrack).OnResolutionChanged += (uint width, uint height) =>
                    {
                        ResolutionChanged?.Invoke("PEER", width, height);
                    };
                }
            }
            else if (Event.Track.Kind == "audio")
            {
                _peerAudioTrack = Event.Track;
            }

            OnAddRemoteTrack?.Invoke(Event.Track);
        }
Exemplo n.º 2
0
 private void BindSelfVideo()
 {
     if (_selfVideoTrack != null)
     {
         _selfVideoTrack.Element = MediaElementMaker.Bind(Devices.Instance.SelfVideo);
         ((MediaStreamTrack)_selfVideoTrack).OnFrameRateChanged += (float frameRate) =>
         {
             FramesPerSecondChanged?.Invoke("SELF", frameRate.ToString("0.0"));
         };
         ((MediaStreamTrack)_selfVideoTrack).OnResolutionChanged += (uint width, uint height) =>
         {
             ResolutionChanged?.Invoke("SELF", width, height);
         };
     }
 }
Exemplo n.º 3
0
 private void UpdateCurrentFrame(IRTCStats stats)
 {
     switch (stats.StatsType)
     {
     case RTCStatsType.Track:
         var mediaStreamTrackStats = RTCMediaStreamTrackStats.Cast(stats);
         if (mediaStreamTrackStats != null && !mediaStreamTrackStats.TrackId.Contains("audio"))
         {
             if (mediaStreamTrackStats.RemoteSource)
             {
                 FramesPerSecondChanged?.Invoke("PEER", mediaStreamTrackStats.FramesPerSecond.ToString("0.#"));
                 ResolutionChanged?.Invoke("PEER", mediaStreamTrackStats.FrameWidth, mediaStreamTrackStats.FrameHeight);
             }
             else
             {
                 FramesPerSecondChanged?.Invoke("SELF", mediaStreamTrackStats.FramesPerSecond.ToString("0.#"));
                 ResolutionChanged?.Invoke("SELF", mediaStreamTrackStats.FrameWidth, mediaStreamTrackStats.FrameHeight);
             }
         }
         break;
     }
 }
Exemplo n.º 4
0
        private void ParseStats(IRTCStats stats, StatsData statsData)
        {
            try
            {
                switch (stats.StatsType)
                {
                case RTCStatsType.InboundRtp:
                    //Debug.WriteLine("RTCStatsType.InboundRtp:" + statId);
                    var inboundRtpStreamStats = RTCInboundRtpStreamStats.Cast(stats);
                    if (inboundRtpStreamStats != null)
                    {
                        TrackStatsData tsd =
                            statsData.GetTrackStatsData(inboundRtpStreamStats.MediaTrackId, false);

                        if (tsd != null)
                        {
                            if (statsData.TimeToSetupCall.Milliseconds == 0 && inboundRtpStreamStats.PacketsReceived > 0)
                            {
                                statsData.TimeToSetupCall = DateTime.Now - statsData.StarTime;
                            }

                            //if (!tsd.IsAudio)
                            //    TestReceivedBytes.Add(inboundRtpStreamStats.BytesReceived);
                            tsd.AddAverage(RtcStatsValueName.StatsValueNameBytesReceived,
                                           inboundRtpStreamStats.BytesReceived);

                            //if (!tsd.IsAudio)
                            //TestReceivedPackets.Add(inboundRtpStreamStats.PacketsReceived);
                            tsd.AddAverage(RtcStatsValueName.StatsValueNamePacketsReceived,
                                           inboundRtpStreamStats.PacketsReceived);

                            tsd.AddAverage(RtcStatsValueName.StatsValueNamePacketsLost, inboundRtpStreamStats.PacketsLost);

                            tsd.AddData(RtcStatsValueName.StatsValueNameCurrentEndToEndDelayMs,
                                        inboundRtpStreamStats.EndToEndDelay.TotalMilliseconds);
                        }
                    }
                    break;

                case RTCStatsType.OutboundRtp:
                    var outboundRtpStreamStats = RTCOutboundRtpStreamStats.Cast(stats);
                    if (outboundRtpStreamStats != null)
                    {
                        TrackStatsData tsd =
                            statsData.GetTrackStatsData(outboundRtpStreamStats.MediaTrackId);

                        if (tsd != null)
                        {
                            tsd.AddAverage(RtcStatsValueName.StatsValueNameBytesSent, outboundRtpStreamStats.BytesSent);

                            tsd.AddAverage(RtcStatsValueName.StatsValueNamePacketsSent, outboundRtpStreamStats.PacketsSent);
                        }
                    }
                    break;

                case RTCStatsType.Track:
                    var mediaStreamTrackStats = RTCMediaStreamTrackStats.Cast(stats);
                    if (mediaStreamTrackStats != null)
                    {
                        try
                        {
                            TrackStatsData tsd =
                                statsData.GetTrackStatsData(mediaStreamTrackStats.TrackId, !mediaStreamTrackStats.RemoteSource);

                            if (tsd != null && !tsd.IsAudio)
                            {
                                if (mediaStreamTrackStats.RemoteSource)
                                {
                                    tsd.AddData(RtcStatsValueName.StatsValueNameFrameRateReceived,
                                                mediaStreamTrackStats.FramesPerSecond);
                                    tsd.AddData(RtcStatsValueName.StatsValueNameFrameWidthReceived,
                                                mediaStreamTrackStats.FrameWidth);
                                    tsd.AddData(RtcStatsValueName.StatsValueNameFrameHeightReceived,
                                                mediaStreamTrackStats.FrameHeight);
                                    FramesPerSecondChanged?.Invoke("PEER", mediaStreamTrackStats.FramesPerSecond.ToString("0.#"));
                                    ResolutionChanged?.Invoke("PEER", mediaStreamTrackStats.FrameWidth, mediaStreamTrackStats.FrameHeight);
                                }
                                else
                                {
                                    tsd.AddData(RtcStatsValueName.StatsValueNameFrameRateSent,
                                                mediaStreamTrackStats.FramesPerSecond);
                                    tsd.AddData(RtcStatsValueName.StatsValueNameFrameWidthSent,
                                                mediaStreamTrackStats.FrameWidth);
                                    tsd.AddData(RtcStatsValueName.StatsValueNameFrameHeightSent,
                                                mediaStreamTrackStats.FrameHeight);
                                    FramesPerSecondChanged?.Invoke("SELF", mediaStreamTrackStats.FramesPerSecond.ToString("0.#"));
                                    ResolutionChanged?.Invoke("SELF", mediaStreamTrackStats.FrameWidth, mediaStreamTrackStats.FrameHeight);
                                }
                            }
                        }
                        catch (Exception e)
                        {
                            Debug.Write(e);
                        }
                    }
                    break;
                }
            }
            catch (Exception e)
            {
                Debug.Write(e);
            }
        }