コード例 #1
0
    // Display the video codec that is actually used.
    IEnumerator CheckActualCodec()
    {
        yield return(new WaitForSeconds(1f));

        var op = _pc1.GetStats();

        yield return(op);

        if (op.IsError)
        {
            Debug.LogErrorFormat("RTCPeerConnection.GetStats failed: {0}", op.Error);
            yield break;
        }

        RTCStatsReport report = op.Value;

        IEnumerable <RTCOutboundRTPStreamStats> outBoundStatsList = report.Stats.Values.Where(
            stats => stats.Type == RTCStatsType.OutboundRtp).Cast <RTCOutboundRTPStreamStats>();

        RTCOutboundRTPStreamStats outBoundStats = outBoundStatsList.First(stats => stats.kind == "video");
        string codecId = outBoundStats.codecId;

        IEnumerable <RTCCodecStats> codecStatsList = report.Stats.Values.Where(
            stats => stats.Type == RTCStatsType.Codec).Cast <RTCCodecStats>();

        RTCCodecStats codecStats =
            codecStatsList.First(stats => stats.Id == codecId);

        var arr  = outBoundStatsList.ToArray();
        var arr2 = codecStatsList.ToArray();


        Debug.Log(arr);
        Debug.Log(arr2);

        //foreach (var s in report.Stats.Values.Where(stats => stats is RTCCodecStats))
        //{
        //    var s2 = s as RTCCodecStats;
        //    Debug.Log(s2.Type + " " + s2.Id);
        //}


        actualCodecText.text = string.Format("Using {0} {1}, payloadType={2}.",
                                             codecStats.mimeType,
                                             codecStats.sdpFmtpLine,
                                             codecStats.payloadType
                                             );
    }
        public void AddInput(RTCOutboundRTPStreamStats input)
        {
            var timestamp = input.UtcTimeStamp;

            firCountGraph.AddInput(timestamp, input.firCount);
            pliCountGraph.AddInput(timestamp, input.pliCount);
            nackCountGraph.AddInput(timestamp, input.nackCount);
            qpSumGraph.AddInput(timestamp, input.qpSum);
            packetsSentGraph.AddInput(timestamp, input.packetsSent);
            retransmittedPacketsSentGraph.AddInput(timestamp, input.retransmittedPacketsSent);
            bytesSentGraph.AddInput(timestamp, input.bytesSent);
            headerBytesSentGraph.AddInput(timestamp, input.headerBytesSent);
            retransmittedBytesSentGraph.AddInput(timestamp, input.retransmittedBytesSent);
            targetBitrateGraph.AddInput(timestamp, (float)input.targetBitrate);
            framesDecodedGraph.AddInput(timestamp, input.framesEncoded);
            keyFramesDecodedGraph.AddInput(timestamp, input.keyFramesEncoded);
            totalEncodeTimeGraph.AddInput(timestamp, (float)input.totalEncodeTime);
            totalEncodedBytesTargetGraph.AddInput(timestamp, input.totalEncodedBytesTarget);
            totalPacketSendDelayGraph.AddInput(timestamp, (float)input.totalPacketSendDelay);
        }
コード例 #3
0
    // Display the video codec that is actually used.
    IEnumerator CheckActualCodec()
    {
        yield return(new WaitForSeconds(1f));

        if (_pc1 == null)
        {
            yield break;
        }

        var op = _pc1.GetStats();

        yield return(op);

        if (op.IsError)
        {
            Debug.LogErrorFormat("RTCPeerConnection.GetStats failed: {0}", op.Error);
            yield break;
        }

        RTCStatsReport report = op.Value;

        List <RTCOutboundRTPStreamStats> outBoundStatsList = report.Stats.Values.Where(
            stats => stats.Type == RTCStatsType.OutboundRtp).Cast <RTCOutboundRTPStreamStats>().ToList();

        if (!outBoundStatsList.Any())
        {
            Debug.LogWarning($"{nameof(RTCStatsReport)} don't contain any {nameof(RTCOutboundRTPStreamStats)}");
            yield break;
        }

        RTCOutboundRTPStreamStats outBoundStats = outBoundStatsList.FirstOrDefault(stats => stats.kind == "video");

        if (outBoundStats == null)
        {
            Debug.LogWarning($"{nameof(RTCOutboundRTPStreamStats)} with kind video is not included in {nameof(outBoundStatsList)}.");
            yield break;
        }

        string codecId = outBoundStats.codecId;
        List <RTCCodecStats> codecStatsList = report.Stats.Values.Where(
            stats => stats.Type == RTCStatsType.Codec).Cast <RTCCodecStats>().ToList();

        if (!codecStatsList.Any())
        {
            Debug.LogWarning($"{nameof(RTCOutboundRTPStreamStats)} don't contain any {nameof(RTCCodecStats)}");
            yield break;
        }

        RTCCodecStats codecStats =
            codecStatsList.FirstOrDefault(stats => stats.Id == codecId);

        if (codecStats == null)
        {
            Debug.LogWarning($"{nameof(RTCCodecStats)} with codecId {codecId} is not included in {nameof(codecStatsList)}.");
            yield break;
        }


        actualCodecText.text = string.Format("Using {0} {1}, payloadType={2}.",
                                             codecStats.mimeType,
                                             codecStats.sdpFmtpLine,
                                             codecStats.payloadType
                                             );
    }