From 7e0b48c8188242f360df7e97f6f1f8ca5356c861 Mon Sep 17 00:00:00 2001 From: Lu Dai Date: Wed, 19 May 2021 14:17:59 -0700 Subject: [PATCH] Add error log when attendeeId is null and return empty video metrics --- CHANGELOG.md | 10 +++++----- docs/classes/defaultclientmetricreport.html | 6 +++--- .../DefaultClientMetricReport.ts | 6 ++++++ .../DefaultClientMetricReport.test.ts | 14 ++++++++++++++ 4 files changed, 28 insertions(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 6d2463cef7..59aa808339 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,13 +17,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Add support for `WKWebView` on iOS. - Output a warning message when the volume adapter cleans up the self-attendee after reconnection. - Add FAQ for more information on `AudioJoinFromAnotherDevice` meeting session status code. -- Add downstream audio webrtc metrics in `observableMetricSpec` -- Add `getObservableVideoMetrics` and in ClientMetricReport to expose video stream metrics in webrtc -- Update `SignalingProtocol` with optional video metric fields +- Add downstream audio webrtc metrics in `observableMetricSpec`. +- Add `getObservableVideoMetrics` and in `ClientMetricReport` to expose video stream metrics in webrtc. +- Update `SignalingProtocol` with optional video metric fields. ### Changed -- Bump version for lodash, y18n, and ssri dependencies -- Mark `getObservableVideoMetrics` optional in ClientMetricReprt and `videoStreamIndex` and `selfAttendeeId` optional in DefaultClientMetricReport +- Bump version for lodash, y18n, and ssri dependencies. +- Mark `getObservableVideoMetrics` optional in ClientMetricReprt and `videoStreamIndex` and `selfAttendeeId` optional in `DefaultClientMetricReport`. ### Removed diff --git a/docs/classes/defaultclientmetricreport.html b/docs/classes/defaultclientmetricreport.html index 21c1fa2133..f9b7f4bc73 100644 --- a/docs/classes/defaultclientmetricreport.html +++ b/docs/classes/defaultclientmetricreport.html @@ -273,7 +273,7 @@

clone

  • @@ -569,7 +569,7 @@

    print

  • Returns void

    @@ -586,7 +586,7 @@

    removeDestroyedSsrcs

  • Returns void

    diff --git a/src/clientmetricreport/DefaultClientMetricReport.ts b/src/clientmetricreport/DefaultClientMetricReport.ts index 9736f409d8..630fded0c2 100644 --- a/src/clientmetricreport/DefaultClientMetricReport.ts +++ b/src/clientmetricreport/DefaultClientMetricReport.ts @@ -557,6 +557,12 @@ export default class DefaultClientMetricReport implements ClientMetricReport { getObservableVideoMetrics(): { [id: string]: { [id: string]: {} } } { const videoStreamMetrics: { [id: string]: { [id: string]: {} } } = {}; + if (!this.videoStreamIndex || !this.selfAttendeeId) { + this.logger.error( + 'Need to define VideoStreamIndex and selfAttendeeId if using getObservableVideoMetrics API' + ); + return; + } for (const ssrc in this.streamMetricReports) { if (this.streamMetricReports[ssrc].mediaType === MediaType.VIDEO) { const metric: { [id: string]: number } = {}; diff --git a/test/clientmetricreport/DefaultClientMetricReport.test.ts b/test/clientmetricreport/DefaultClientMetricReport.test.ts index c8a7541a97..a80da81080 100644 --- a/test/clientmetricreport/DefaultClientMetricReport.test.ts +++ b/test/clientmetricreport/DefaultClientMetricReport.test.ts @@ -478,4 +478,18 @@ describe('DefaultClientMetricReport', () => { expect(clientMetricReport.streamMetricReports[ssrc1]).to.equal(undefined); }); }); + + describe('error logging', () => { + it('returns undefined observable video metrics if no VideoStreamIndex and selfAttendeeId defined stream metric reports', () => { + clientMetricReport = new DefaultClientMetricReport(new NoOpDebugLogger()); + const ssrc = 1; + const report = new StreamMetricReport(); + report.mediaType = MediaType.VIDEO; + report.direction = Direction.UPSTREAM; + report.currentMetrics['framesEncoded'] = 10; + clientMetricReport.streamMetricReports[ssrc] = report; + const videoStreamMetrics = clientMetricReport.getObservableVideoMetrics(); + expect(videoStreamMetrics).to.equal(undefined); + }); + }); });