Android WebRTC - getStats () не предоставляет достаточно информации - PullRequest
0 голосов
/ 06 мая 2019

Я пытаюсь получить всю информацию, касающуюся медиапотоков, чтобы получить качество звонка.Метод Peerconnection.getStats () устарел, но предоставляет всю информацию в соответствии с моим требованием, такую ​​как "bytesReceived", "packetLost", "packetReceived", "googCodecName" и "googJitterBufferMs".

peerConnection.getStats(reports -> {
   for (StatsReport report : reports) {
      Log.d(TAG, "Stats: " + report.toString());
   }
}, null);

Response:

{
values: [
    bytesReceived: 951618
  ],
  [
    codecImplementationName: OMX.qcom.video.decoder.vp8
  ],
  [
    framesDecoded: 171
  ],
  [
    mediaType: video
  ],
  [
    packetsLost: 4
  ],
  [
    packetsReceived: 908
  ],
  [
    qpSum: 6409
  ],
  [
    ssrc: 3637617127
  ],
  [
    transportId: Channel-audio-1
  ],
  [
    googCaptureStartNtpTimeMs: 3766113175824
  ],
  [
    googCodecName: VP8
  ],
  [
    googContentType: realtime
  ],
  [
    googCurrentDelayMs: 196
  ],
  [
    googDecodeMs: 54
  ],
  [
    googFirsSent: 0
  ],
  [
    googFirstFrameReceivedToDecodedMs: 225
  ],
  [
    googFrameHeightReceived: 720
  ],
  [
    googFrameRateDecoded: 22
  ],
  [
    googFrameRateOutput: 22
  ],
  [
    googFrameRateReceived: 20
  ],
  [
    googFrameWidthReceived: 960
  ],
  [
    googInterframeDelayMax: 55
  ],
  [
    googJitterBufferMs: 116
  ],
  [
    googMaxDecodeMs: 70
  ],
  [
    googMinPlayoutDelayMs: 91
  ],
  [
    googNacksSent: 6
  ],
  [
    googPlisSent: 0
  ],
  [
    googRenderDelayMs: 10
  ],
  [
    googTargetDelayMs: 196
  ],
  [
    googTrackId: 100
  ]
}

Теперь я могу 'Не используйте этот метод как устаревший.Когда я пытаюсь использовать новый метод getStats (), он не предоставляет всей такой информации, а также ответ очень неорганизован.

peerConnection.getStats(new RTCStatsCollectorCallback() {
          @Override
          public void onStatsDelivered(RTCStatsReport rtcStatsReport) {
                 Log.d(TAG, "RTCStatsReport: "+rtcStatsReport.getStatsMap().toString());
          }
});

Response:-

    {
  RTCCodec_audio_Inbound_0={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_0,
    payloadType: 0,
    mimeType: "audio/PCMU",
    clockRate: 8000
  },
  RTCCodec_audio_Inbound_102={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_102,
    payloadType: 102,
    mimeType: "audio/ILBC",
    clockRate: 8000
  },
  RTCCodec_audio_Inbound_103={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_103,
    payloadType: 103,
    mimeType: "audio/ISAC",
    clockRate: 16000
  },
  RTCCodec_audio_Inbound_105={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_105,
    payloadType: 105,
    mimeType: "audio/CN",
    clockRate: 16000
  },
  RTCCodec_audio_Inbound_110={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_110,
    payloadType: 110,
    mimeType: "audio/telephone-event",
    clockRate: 48000
  },
  RTCCodec_audio_Inbound_111={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_111,
    payloadType: 111,
    mimeType: "audio/opus",
    clockRate: 48000
  },
  RTCCodec_audio_Inbound_113={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_113,
    payloadType: 113,
    mimeType: "audio/telephone-event",
    clockRate: 16000
  },
  RTCCodec_audio_Inbound_126={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_126,
    payloadType: 126,
    mimeType: "audio/telephone-event",
    clockRate: 8000
  },
  RTCCodec_audio_Inbound_13={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_13,
    payloadType: 13,
    mimeType: "audio/CN",
    clockRate: 8000
  },
  RTCCodec_audio_Inbound_8={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_8,
    payloadType: 8,
    mimeType: "audio/PCMA",
    clockRate: 8000
  },
  RTCCodec_audio_Inbound_9={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Inbound_9,
    payloadType: 9,
    mimeType: "audio/G722",
    clockRate: 8000
  },
  RTCCodec_audio_Outbound_0={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Outbound_0,
    payloadType: 0,
    mimeType: "audio/PCMU",
    clockRate: 8000
  },
  RTCCodec_audio_Outbound_102={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Outbound_102,
    payloadType: 102,
    mimeType: "audio/ILBC",
    clockRate: 8000
  },
  RTCCodec_audio_Outbound_103={
    timestampUs: 1557124386437087,
    type: codec,
    id: RTCCodec_audio_Outbound_103,
    payloadType: 103,
    mimeType: "audio/ISAC",
    clockRate: 16000
  }
}

Я нажимаю метод getStats () через каждую секунду и каждый разэто дает мне ответ с другими данными.Этот ответ не документирован нигде в документах WebRTC.

Как я могу получить "bytesReceived", "packagesLost", "packetReceived", "googCodecName" и "googJitterBufferMs" с помощью нового метода getStats ().

...