Пример #1
0
        public ActionResult GetStatistics()
        {
            if (CallStatus.Connected != CallController.Instance.CurrentCallStatus)
            {
                return(GetErrInfo(Constants.ErrorCode.NO_CONFERENCE));
            }

            EVStatsCli mediaStats = new EVStatsCli();

            EVSdkManager.Instance.GetStats(ref mediaStats);
            StatisticsInfo statisticsInfo = new StatisticsInfo();

            statisticsInfo.statistics = new CallStatistics();
            statisticsInfo.statistics.media_statistics     = new MediaStatistics();
            statisticsInfo.statistics.media_statistics.ar  = new List <StreamStatus>();
            statisticsInfo.statistics.media_statistics.@as = new List <StreamStatus>();
            statisticsInfo.statistics.media_statistics.cr  = new List <StreamStatus>();
            statisticsInfo.statistics.media_statistics.cs  = new List <StreamStatus>();
            statisticsInfo.statistics.media_statistics.pr  = new List <StreamStatus>();
            statisticsInfo.statistics.media_statistics.ps  = new List <StreamStatus>();
            for (var i = 0; i < mediaStats.size; ++i)
            {
                EVStreamStatsCli streamStats = mediaStats.stats[i];
                var restStatus = new StreamStatus()
                {
                    codec      = null != streamStats.payload_type ? streamStats.payload_type : "",
                    resolution = EV_STREAM_TYPE_CLI.EV_STREAM_AUDIO == streamStats.type ? "" : streamStats.resolution.width + "x" + streamStats.resolution.height,
                    //pipeName            = "AR",
                    packetLost         = streamStats.cum_packet_loss,
                    packetLostRate     = streamStats.packet_loss_rate,
                    jitter             = 0,
                    frameRate          = EV_STREAM_TYPE_CLI.EV_STREAM_AUDIO == streamStats.type ? 0 : (int)streamStats.fps,
                    encrypted          = streamStats.is_encrypted,
                    rtp_actualBitRate  = (int)streamStats.real_bandwidth,
                    rtp_settingBitRate = (int)streamStats.nego_bandwidth,
                    totalPacket        = streamStats.cum_packet
                };
                switch (streamStats.type)
                {
                case EV_STREAM_TYPE_CLI.EV_STREAM_AUDIO:
                    if (EV_STREAM_DIR_CLI.EV_STREAM_DOWNLOAD == streamStats.dir)
                    {
                        restStatus.pipeName = "AR";
                        statisticsInfo.statistics.media_statistics.ar.Add(restStatus);
                    }
                    else
                    {
                        restStatus.pipeName = "AS";
                        [email protected](restStatus);
                    }
                    break;

                case EV_STREAM_TYPE_CLI.EV_STREAM_VIDEO:
                    if (EV_STREAM_DIR_CLI.EV_STREAM_DOWNLOAD == streamStats.dir)
                    {
                        restStatus.pipeName = "PR";
                        statisticsInfo.statistics.media_statistics.pr.Add(restStatus);
                    }
                    else
                    {
                        restStatus.pipeName = "PS";
                        statisticsInfo.statistics.media_statistics.ps.Add(restStatus);
                    }
                    break;

                case EV_STREAM_TYPE_CLI.EV_STREAM_CONTENT:
                    if (EV_STREAM_DIR_CLI.EV_STREAM_DOWNLOAD == streamStats.dir)
                    {
                        restStatus.pipeName = "CR";
                        statisticsInfo.statistics.media_statistics.cr.Add(restStatus);
                    }
                    else
                    {
                        restStatus.pipeName = "CS";
                        statisticsInfo.statistics.media_statistics.cs.Add(restStatus);
                    }
                    break;

                case EV_STREAM_TYPE_CLI.EV_STREAM_WHITE_BOARD:
                    if (EV_STREAM_DIR_CLI.EV_STREAM_DOWNLOAD == streamStats.dir)
                    {
                        restStatus.pipeName = "CR";
                        statisticsInfo.statistics.media_statistics.cr.Add(restStatus);
                    }
                    else
                    {
                        restStatus.pipeName = "CS";
                        statisticsInfo.statistics.media_statistics.cs.Add(restStatus);
                    }
                    break;
                }
            }

            statisticsInfo.statistics.signal_statistics = new SignalStatistics()
            {
                call_type  = "SVC",
                call_rate  = SettingManager.Instance.GetCurrentCallRate(),
                call_index = 0
            };

            return(Json(statisticsInfo));
        }
        private void OnTimerRefreshMediaStatistics(object source, ElapsedEventArgs e)
        {
            string     notEncrypted = LanguageUtil.Instance.GetValueByKey("NOT_ENCRYPTED");
            string     encrypted    = LanguageUtil.Instance.GetValueByKey("ENCRYPTED");
            EVStatsCli mediaStats   = new EVStatsCli();

            EVSdkManager.Instance.GetStats(ref mediaStats);
            List <MediaStatisticsItem> tempList = new List <MediaStatisticsItem>();

            for (int i = 0; i < mediaStats.size; ++i)
            {
                EVStreamStatsCli    streamStats = mediaStats.stats[i];
                MediaStatisticsItem item        = new MediaStatisticsItem()
                {
                    Codec          = null != streamStats.payload_type ? streamStats.payload_type : "",
                    LineRate       = streamStats.nego_bandwidth.ToString(),
                    ActualLineRate = ((int)Math.Ceiling(streamStats.real_bandwidth)).ToString(),
                    Resolution     = EV_STREAM_TYPE_CLI.EV_STREAM_AUDIO == streamStats.type ? "-" : TranslateResolution(streamStats.resolution),
                    FrameRate      = EV_STREAM_TYPE_CLI.EV_STREAM_AUDIO == streamStats.type ? "-" : ((int)Math.Ceiling(streamStats.fps)).ToString(),
                    PacketLossInfo = streamStats.cum_packet_loss.ToString() + "(" + Math.Round(streamStats.packet_loss_rate, 1).ToString() + "%)",
                    Encrypted      = streamStats.is_encrypted ? encrypted : notEncrypted
                };

                switch (streamStats.type)
                {
                case EV_STREAM_TYPE_CLI.EV_STREAM_AUDIO:
                    if (EV_STREAM_DIR_CLI.EV_STREAM_DOWNLOAD == streamStats.dir)
                    {
                        item.MediaOrientation = LanguageUtil.Instance.GetValueByKey("AUDIO_RECEPTION");
                    }
                    else
                    {
                        item.MediaOrientation = LanguageUtil.Instance.GetValueByKey("AUDIO_SENDING");
                    }
                    break;

                case EV_STREAM_TYPE_CLI.EV_STREAM_VIDEO:
                    if (EV_STREAM_DIR_CLI.EV_STREAM_DOWNLOAD == streamStats.dir)
                    {
                        item.MediaOrientation = LanguageUtil.Instance.GetValueByKey("VIDEO_RECEPTION");
                    }
                    else
                    {
                        item.MediaOrientation = LanguageUtil.Instance.GetValueByKey("VIDEO_SENDING");
                    }
                    break;

                case EV_STREAM_TYPE_CLI.EV_STREAM_CONTENT:
                    if (EV_STREAM_DIR_CLI.EV_STREAM_DOWNLOAD == streamStats.dir)
                    {
                        item.MediaOrientation = LanguageUtil.Instance.GetValueByKey("CONTENT_RECEPTION");
                    }
                    else
                    {
                        item.MediaOrientation = LanguageUtil.Instance.GetValueByKey("CONTENT_SENDING");
                    }
                    break;

                case EV_STREAM_TYPE_CLI.EV_STREAM_WHITE_BOARD:
                    if (EV_STREAM_DIR_CLI.EV_STREAM_DOWNLOAD == streamStats.dir)
                    {
                        item.MediaOrientation = LanguageUtil.Instance.GetValueByKey("WHITE_BOARD_RECEPTION");
                    }
                    else
                    {
                        item.MediaOrientation = LanguageUtil.Instance.GetValueByKey("WHITE_BOARD_SENDING");
                    }
                    break;
                }
                tempList.Add(item);
            }
            MediaStatisticsItemList = tempList;
        }