@webex/plugin-meetings 3.3.1-next.7 → 3.3.1-next.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -209,7 +209,7 @@ var Breakout = _webexCore.WebexPlugin.extend({
209
209
  sessionId: this.sessionId
210
210
  });
211
211
  },
212
- version: "3.3.1-next.7"
212
+ version: "3.3.1-next.9"
213
213
  });
214
214
  var _default = exports.default = Breakout;
215
215
  //# sourceMappingURL=breakout.js.map
@@ -1041,7 +1041,7 @@ var Breakouts = _webexCore.WebexPlugin.extend({
1041
1041
  this.trigger(_constants.BREAKOUTS.EVENTS.ASK_RETURN_TO_MAIN);
1042
1042
  }
1043
1043
  },
1044
- version: "3.3.1-next.7"
1044
+ version: "3.3.1-next.9"
1045
1045
  });
1046
1046
  var _default = exports.default = Breakouts;
1047
1047
  //# sourceMappingURL=index.js.map
@@ -373,7 +373,7 @@ var SimultaneousInterpretation = _webexCore.WebexPlugin.extend({
373
373
  throw error;
374
374
  });
375
375
  },
376
- version: "3.3.1-next.7"
376
+ version: "3.3.1-next.9"
377
377
  });
378
378
  var _default = exports.default = SimultaneousInterpretation;
379
379
  //# sourceMappingURL=index.js.map
@@ -18,7 +18,7 @@ var SILanguage = _webexCore.WebexPlugin.extend({
18
18
  languageCode: 'number',
19
19
  languageName: 'string'
20
20
  },
21
- version: "3.3.1-next.7"
21
+ version: "3.3.1-next.9"
22
22
  });
23
23
  var _default = exports.default = SILanguage;
24
24
  //# sourceMappingURL=siLanguage.js.map
@@ -62,7 +62,7 @@ var Webinar = _webexCore.WebexPlugin.extend({
62
62
  updateCanManageWebcast: function updateCanManageWebcast(canManageWebcast) {
63
63
  this.set('canManageWebcast', canManageWebcast);
64
64
  },
65
- version: "3.3.1-next.7"
65
+ version: "3.3.1-next.9"
66
66
  });
67
67
  var _default = exports.default = Webinar;
68
68
  //# sourceMappingURL=index.js.map
package/package.json CHANGED
@@ -43,13 +43,13 @@
43
43
  "@webex/eslint-config-legacy": "0.0.0",
44
44
  "@webex/jest-config-legacy": "0.0.0",
45
45
  "@webex/legacy-tools": "0.0.0",
46
- "@webex/plugin-meetings": "3.3.1-next.7",
47
- "@webex/plugin-rooms": "3.3.1-next.2",
48
- "@webex/test-helper-chai": "3.3.1-next.1",
49
- "@webex/test-helper-mocha": "3.3.1-next.1",
50
- "@webex/test-helper-mock-webex": "3.3.1-next.1",
51
- "@webex/test-helper-retry": "3.3.1-next.1",
52
- "@webex/test-helper-test-users": "3.3.1-next.1",
46
+ "@webex/plugin-meetings": "3.3.1-next.9",
47
+ "@webex/plugin-rooms": "3.3.1-next.3",
48
+ "@webex/test-helper-chai": "3.3.1-next.2",
49
+ "@webex/test-helper-mocha": "3.3.1-next.2",
50
+ "@webex/test-helper-mock-webex": "3.3.1-next.2",
51
+ "@webex/test-helper-retry": "3.3.1-next.2",
52
+ "@webex/test-helper-test-users": "3.3.1-next.2",
53
53
  "chai": "^4.3.4",
54
54
  "chai-as-promised": "^7.1.1",
55
55
  "eslint": "^8.24.0",
@@ -61,20 +61,20 @@
61
61
  "typescript": "^4.7.4"
62
62
  },
63
63
  "dependencies": {
64
- "@webex/common": "3.3.1-next.1",
64
+ "@webex/common": "3.3.1-next.2",
65
65
  "@webex/internal-media-core": "2.5.3",
66
- "@webex/internal-plugin-conversation": "3.3.1-next.2",
67
- "@webex/internal-plugin-device": "3.3.1-next.1",
68
- "@webex/internal-plugin-llm": "3.3.1-next.2",
69
- "@webex/internal-plugin-mercury": "3.3.1-next.2",
70
- "@webex/internal-plugin-metrics": "3.3.1-next.1",
71
- "@webex/internal-plugin-support": "3.3.1-next.2",
72
- "@webex/internal-plugin-user": "3.3.1-next.1",
73
- "@webex/internal-plugin-voicea": "3.3.1-next.7",
74
- "@webex/media-helpers": "3.3.1-next.3",
75
- "@webex/plugin-people": "3.3.1-next.2",
76
- "@webex/plugin-rooms": "3.3.1-next.2",
77
- "@webex/webex-core": "3.3.1-next.1",
66
+ "@webex/internal-plugin-conversation": "3.3.1-next.3",
67
+ "@webex/internal-plugin-device": "3.3.1-next.2",
68
+ "@webex/internal-plugin-llm": "3.3.1-next.3",
69
+ "@webex/internal-plugin-mercury": "3.3.1-next.3",
70
+ "@webex/internal-plugin-metrics": "3.3.1-next.2",
71
+ "@webex/internal-plugin-support": "3.3.1-next.3",
72
+ "@webex/internal-plugin-user": "3.3.1-next.2",
73
+ "@webex/internal-plugin-voicea": "3.3.1-next.9",
74
+ "@webex/media-helpers": "3.3.1-next.4",
75
+ "@webex/plugin-people": "3.3.1-next.3",
76
+ "@webex/plugin-rooms": "3.3.1-next.3",
77
+ "@webex/webex-core": "3.3.1-next.2",
78
78
  "ampersand-collection": "^2.0.2",
79
79
  "bowser": "^2.11.0",
80
80
  "btoa": "^1.2.1",
@@ -91,5 +91,5 @@
91
91
  "//": [
92
92
  "TODO: upgrade jwt-decode when moving to node 18"
93
93
  ],
94
- "version": "3.3.1-next.7"
94
+ "version": "3.3.1-next.9"
95
95
  }
@@ -905,14 +905,17 @@ describe('plugin-meetings', () => {
905
905
  );
906
906
  });
907
907
 
908
- it('emits the correct transmittedFrameRate/receivedFrameRate', async () => {
909
- it('at the start of the stats analyzer', async () => {
908
+ describe('frame rate reporting in stats analyzer', () => {
909
+ beforeEach(async () => {
910
910
  await startStatsAnalyzer();
911
+ });
912
+
913
+ it('should report a zero frame rate for both transmitted and received video at the start', async () => {
911
914
  assert.strictEqual(mqeData.videoTransmit[0].streams[0].common.transmittedFrameRate, 0);
912
915
  assert.strictEqual(mqeData.videoReceive[0].streams[0].common.receivedFrameRate, 0);
913
916
  });
914
917
 
915
- it('after frames are sent and received', async () => {
918
+ it('should accurately report the transmitted and received frame rate after video frames are processed', async () => {
916
919
  fakeStats.video.senders[0].report[0].framesSent += 300;
917
920
  fakeStats.video.receivers[0].report[0].framesReceived += 300;
918
921
  await progressTime(MQA_INTERVAL);
@@ -923,9 +926,12 @@ describe('plugin-meetings', () => {
923
926
  });
924
927
  });
925
928
 
926
- it('emits the correct rtpPackets', async () => {
927
- it('at the start of the stats analyzer', async () => {
929
+ describe('RTP packets count in stats analyzer', () => {
930
+ beforeEach(async () => {
928
931
  await startStatsAnalyzer();
932
+ });
933
+
934
+ it('should report zero RTP packets for all streams at the start of the stats analyzer', async () => {
929
935
  assert.strictEqual(mqeData.audioTransmit[0].common.rtpPackets, 0);
930
936
  assert.strictEqual(mqeData.audioTransmit[0].streams[0].common.rtpPackets, 0);
931
937
  assert.strictEqual(mqeData.audioReceive[0].common.rtpPackets, 0);
@@ -936,7 +942,7 @@ describe('plugin-meetings', () => {
936
942
  assert.strictEqual(mqeData.videoReceive[0].streams[0].common.rtpPackets, 0);
937
943
  });
938
944
 
939
- it('after packets are sent', async () => {
945
+ it('should update the RTP packets count correctly after audio and video packets are sent', async () => {
940
946
  fakeStats.audio.senders[0].report[0].packetsSent += 5;
941
947
  fakeStats.video.senders[0].report[0].packetsSent += 5;
942
948
  await progressTime(MQA_INTERVAL);
@@ -947,7 +953,7 @@ describe('plugin-meetings', () => {
947
953
  assert.strictEqual(mqeData.videoTransmit[0].streams[0].common.rtpPackets, 5);
948
954
  });
949
955
 
950
- it('after packets are received', async () => {
956
+ it('should update the RTP packets count correctly after audio and video packets are received', async () => {
951
957
  fakeStats.audio.senders[0].report[0].packetsSent += 10;
952
958
  fakeStats.video.senders[0].report[0].packetsSent += 10;
953
959
  fakeStats.audio.receivers[0].report[0].packetsReceived += 10;
@@ -961,20 +967,23 @@ describe('plugin-meetings', () => {
961
967
  });
962
968
  });
963
969
 
964
- it('emits the correct fecPackets', async () => {
965
- it('at the start of the stats analyzer', async () => {
970
+ describe('FEC packet reporting in stats analyzer', () => {
971
+ beforeEach(async () => {
966
972
  await startStatsAnalyzer();
973
+ })
974
+
975
+ it('should initially report zero FEC packets at the start of the stats analyzer', async () => {
967
976
  assert.strictEqual(mqeData.audioReceive[0].common.fecPackets, 0);
968
977
  });
969
978
 
970
- it('after FEC packets are received', async () => {
979
+ it('should accurately report the count of FEC packets received', async () => {
971
980
  fakeStats.audio.receivers[0].report[0].fecPacketsReceived += 5;
972
981
  await progressTime(MQA_INTERVAL);
973
982
 
974
983
  assert.strictEqual(mqeData.audioReceive[0].common.fecPackets, 5);
975
984
  });
976
985
 
977
- it('after FEC packets are received and some FEC packets are discarded', async () => {
986
+ it('should correctly adjust the FEC packet count when packets are discarded', async () => {
978
987
  fakeStats.audio.receivers[0].report[0].fecPacketsReceived += 15;
979
988
  fakeStats.audio.receivers[0].report[0].fecPacketsDiscarded += 5;
980
989
  await progressTime(MQA_INTERVAL);
@@ -983,16 +992,19 @@ describe('plugin-meetings', () => {
983
992
  });
984
993
  });
985
994
 
986
- it('emits the correct mediaHopByHopLost/rtpHopByHopLost', async () => {
987
- it('at the start of the stats analyzer', async () => {
995
+ describe('packet loss metrics reporting in stats analyzer', () => {
996
+ beforeEach(async () => {
988
997
  await startStatsAnalyzer();
998
+ })
999
+
1000
+ it('should report zero packet loss for both audio and video at the start of the stats analyzer', async () => {
989
1001
  assert.strictEqual(mqeData.audioReceive[0].common.mediaHopByHopLost, 0);
990
1002
  assert.strictEqual(mqeData.audioReceive[0].common.rtpHopByHopLost, 0);
991
1003
  assert.strictEqual(mqeData.videoReceive[0].common.mediaHopByHopLost, 0);
992
1004
  assert.strictEqual(mqeData.videoReceive[0].common.rtpHopByHopLost, 0);
993
1005
  });
994
1006
 
995
- it('after packets are lost', async () => {
1007
+ it('should update packet loss metrics correctly for both audio and video after packet loss is detected', async () => {
996
1008
  fakeStats.audio.receivers[0].report[0].packetsLost += 5;
997
1009
  fakeStats.video.receivers[0].report[0].packetsLost += 5;
998
1010
  await progressTime(MQA_INTERVAL);
@@ -1004,14 +1016,17 @@ describe('plugin-meetings', () => {
1004
1016
  });
1005
1017
  });
1006
1018
 
1007
- it('emits the correct remoteLossRate', async () => {
1008
- it('at the start of the stats analyzer', async () => {
1019
+ describe('remote loss rate reporting in stats analyzer', () => {
1020
+ beforeEach(async () => {
1009
1021
  await startStatsAnalyzer();
1022
+ });
1023
+
1024
+ it('should report a zero remote loss rate for both audio and video at the start', async () => {
1010
1025
  assert.strictEqual(mqeData.audioTransmit[0].common.remoteLossRate, 0);
1011
1026
  assert.strictEqual(mqeData.videoTransmit[0].common.remoteLossRate, 0);
1012
1027
  });
1013
1028
 
1014
- it('after packets are sent', async () => {
1029
+ it('should maintain a zero remote loss rate for both audio and video after packets are sent without loss', async () => {
1015
1030
  fakeStats.audio.senders[0].report[0].packetsSent += 100;
1016
1031
  fakeStats.video.senders[0].report[0].packetsSent += 100;
1017
1032
  await progressTime(MQA_INTERVAL);
@@ -1020,7 +1035,7 @@ describe('plugin-meetings', () => {
1020
1035
  assert.strictEqual(mqeData.videoTransmit[0].common.remoteLossRate, 0);
1021
1036
  });
1022
1037
 
1023
- it('after packets are sent and some packets are lost', async () => {
1038
+ it('should accurately calculate the remote loss rate for both audio and video after packet loss is detected', async () => {
1024
1039
  fakeStats.audio.senders[0].report[0].packetsSent += 200;
1025
1040
  fakeStats.audio.senders[0].report[1].packetsLost += 10;
1026
1041
  fakeStats.video.senders[0].report[0].packetsSent += 200;
@@ -1032,6 +1047,7 @@ describe('plugin-meetings', () => {
1032
1047
  });
1033
1048
  });
1034
1049
 
1050
+
1035
1051
  it('has the correct localIpAddress set when the candidateType is host', async () => {
1036
1052
  await startStatsAnalyzer();
1037
1053
 
@@ -1646,189 +1662,191 @@ describe('plugin-meetings', () => {
1646
1662
  ]);
1647
1663
  });
1648
1664
 
1649
- it('has three streams for video senders for simulcast', async () => {
1650
- pc.getTransceiverStats = sinon.stub().resolves({
1651
- audio: {
1652
- senders: [fakeStats.audio.senders[0]],
1653
- receivers: [fakeStats.audio.receivers[0]],
1654
- },
1655
- video: {
1656
- senders: [
1657
- {
1658
- localTrackLabel: 'fake-camera',
1659
- report: [
1660
- {
1661
- type: 'outbound-rtp',
1662
- bytesSent: 1,
1663
- framesSent: 0,
1664
- packetsSent: 0,
1665
- isRequested: true,
1666
- },
1667
- {
1668
- type: 'outbound-rtp',
1669
- bytesSent: 1,
1670
- framesSent: 0,
1671
- packetsSent: 0,
1672
- isRequested: true,
1673
- },
1674
- {
1675
- type: 'outbound-rtp',
1676
- bytesSent: 1000,
1677
- framesSent: 1,
1678
- packetsSent: 1,
1679
- isRequested: true,
1680
- },
1681
- {
1682
- type: 'remote-inbound-rtp',
1683
- packetsLost: 0,
1684
- },
1685
- {
1686
- type: 'candidate-pair',
1687
- state: 'succeeded',
1688
- localCandidateId: 'fake-candidate-id',
1689
- },
1690
- {
1691
- type: 'candidate-pair',
1692
- state: 'failed',
1693
- localCandidateId: 'bad-candidate-id',
1694
- },
1695
- {
1696
- type: 'local-candidate',
1697
- id: 'fake-candidate-id',
1698
- protocol: 'tcp',
1699
- },
1700
- ],
1701
- },
1702
- ],
1703
- receivers: [fakeStats.video.receivers[0]],
1704
- },
1705
- screenShareAudio: {
1706
- senders: [fakeStats.audio.senders[0]],
1707
- receivers: [fakeStats.audio.receivers[0]],
1708
- },
1709
- screenShareVideo: {
1710
- senders: [fakeStats.video.senders[0]],
1711
- receivers: [fakeStats.video.receivers[0]],
1712
- },
1713
- });
1714
-
1715
- await startStatsAnalyzer({expected: {receiveVideo: true}});
1716
-
1717
- await progressTime();
1665
+ describe('stream count for simulcast', async() => {
1666
+ it('has three streams for video senders for simulcast', async () => {
1667
+ pc.getTransceiverStats = sinon.stub().resolves({
1668
+ audio: {
1669
+ senders: [fakeStats.audio.senders[0]],
1670
+ receivers: [fakeStats.audio.receivers[0]],
1671
+ },
1672
+ video: {
1673
+ senders: [
1674
+ {
1675
+ localTrackLabel: 'fake-camera',
1676
+ report: [
1677
+ {
1678
+ type: 'outbound-rtp',
1679
+ bytesSent: 1,
1680
+ framesSent: 0,
1681
+ packetsSent: 0,
1682
+ isRequested: true,
1683
+ },
1684
+ {
1685
+ type: 'outbound-rtp',
1686
+ bytesSent: 1,
1687
+ framesSent: 0,
1688
+ packetsSent: 1,
1689
+ isRequested: true,
1690
+ },
1691
+ {
1692
+ type: 'outbound-rtp',
1693
+ bytesSent: 1000,
1694
+ framesSent: 1,
1695
+ packetsSent: 0,
1696
+ isRequested: true,
1697
+ },
1698
+ {
1699
+ type: 'remote-inbound-rtp',
1700
+ packetsLost: 0,
1701
+ },
1702
+ {
1703
+ type: 'candidate-pair',
1704
+ state: 'succeeded',
1705
+ localCandidateId: 'fake-candidate-id',
1706
+ },
1707
+ {
1708
+ type: 'candidate-pair',
1709
+ state: 'failed',
1710
+ localCandidateId: 'bad-candidate-id',
1711
+ },
1712
+ {
1713
+ type: 'local-candidate',
1714
+ id: 'fake-candidate-id',
1715
+ protocol: 'tcp',
1716
+ },
1717
+ ],
1718
+ },
1719
+ ],
1720
+ receivers: [fakeStats.video.receivers[0]],
1721
+ },
1722
+ screenShareAudio: {
1723
+ senders: [fakeStats.audio.senders[0]],
1724
+ receivers: [fakeStats.audio.receivers[0]],
1725
+ },
1726
+ screenShareVideo: {
1727
+ senders: [fakeStats.video.senders[0]],
1728
+ receivers: [fakeStats.video.receivers[0]],
1729
+ },
1730
+ });
1718
1731
 
1719
- assert.deepEqual(mqeData.videoTransmit[0].streams, [
1720
- {
1721
- common: {
1722
- codec: 'H264',
1723
- csi: [],
1724
- duplicateSsci: 0,
1732
+ await startStatsAnalyzer({expected: {receiveVideo: true}});
1733
+
1734
+ await progressTime();
1735
+
1736
+ assert.deepEqual(mqeData.videoTransmit[0].streams, [
1737
+ {
1738
+ common: {
1739
+ codec: 'H264',
1740
+ csi: [],
1741
+ duplicateSsci: 0,
1742
+ requestedBitrate: 0,
1743
+ requestedFrames: 0,
1744
+ rtpPackets: 0,
1745
+ ssci: 0,
1746
+ transmittedBitrate: 0.13333333333333333,
1747
+ transmittedFrameRate: 0
1748
+ },
1749
+ h264CodecProfile: 'BP',
1750
+ isAvatar: false,
1751
+ isHardwareEncoded: false,
1752
+ localConfigurationChanges: 2,
1753
+ maxFrameQp: 0,
1754
+ maxNoiseLevel: 0,
1755
+ minRegionQp: 0,
1756
+ remoteConfigurationChanges: 0,
1757
+ requestedFrameSize: 0,
1758
+ requestedKeyFrames: 0,
1759
+ transmittedFrameSize: 0,
1760
+ transmittedHeight: 0,
1761
+ transmittedKeyFrames: 0,
1762
+ transmittedKeyFramesClient: 0,
1763
+ transmittedKeyFramesConfigurationChange: 0,
1764
+ transmittedKeyFramesFeedback: 0,
1765
+ transmittedKeyFramesLocalDrop: 0,
1766
+ transmittedKeyFramesOtherLayer: 0,
1767
+ transmittedKeyFramesPeriodic: 0,
1768
+ transmittedKeyFramesSceneChange: 0,
1769
+ transmittedKeyFramesStartup: 0,
1770
+ transmittedKeyFramesUnknown: 0,
1771
+ transmittedWidth: 0,
1725
1772
  requestedBitrate: 0,
1726
- requestedFrames: 0,
1727
- rtpPackets: 0,
1728
- ssci: 0,
1729
- transmittedBitrate: 0.13333333333333333,
1730
- transmittedFrameRate: 0
1731
1773
  },
1732
- h264CodecProfile: 'BP',
1733
- isAvatar: false,
1734
- isHardwareEncoded: false,
1735
- localConfigurationChanges: 2,
1736
- maxFrameQp: 0,
1737
- maxNoiseLevel: 0,
1738
- minRegionQp: 0,
1739
- remoteConfigurationChanges: 0,
1740
- requestedFrameSize: 0,
1741
- requestedKeyFrames: 0,
1742
- transmittedFrameSize: 0,
1743
- transmittedHeight: 0,
1744
- transmittedKeyFrames: 0,
1745
- transmittedKeyFramesClient: 0,
1746
- transmittedKeyFramesConfigurationChange: 0,
1747
- transmittedKeyFramesFeedback: 0,
1748
- transmittedKeyFramesLocalDrop: 0,
1749
- transmittedKeyFramesOtherLayer: 0,
1750
- transmittedKeyFramesPeriodic: 0,
1751
- transmittedKeyFramesSceneChange: 0,
1752
- transmittedKeyFramesStartup: 0,
1753
- transmittedKeyFramesUnknown: 0,
1754
- transmittedWidth: 0,
1755
- requestedBitrate: 0,
1756
- },
1757
- {
1758
- common: {
1759
- codec: 'H264',
1760
- csi: [],
1761
- duplicateSsci: 0,
1774
+ {
1775
+ common: {
1776
+ codec: 'H264',
1777
+ csi: [],
1778
+ duplicateSsci: 0,
1779
+ requestedBitrate: 0,
1780
+ requestedFrames: 0,
1781
+ rtpPackets: 1,
1782
+ ssci: 0,
1783
+ transmittedBitrate: 0.13333333333333333,
1784
+ transmittedFrameRate: 0,
1785
+ },
1786
+ h264CodecProfile: 'BP',
1787
+ isAvatar: false,
1788
+ isHardwareEncoded: false,
1789
+ localConfigurationChanges: 2,
1790
+ maxFrameQp: 0,
1791
+ maxNoiseLevel: 0,
1792
+ minRegionQp: 0,
1793
+ remoteConfigurationChanges: 0,
1794
+ requestedFrameSize: 0,
1795
+ requestedKeyFrames: 0,
1796
+ transmittedFrameSize: 0,
1797
+ transmittedHeight: 0,
1798
+ transmittedKeyFrames: 0,
1799
+ transmittedKeyFramesClient: 0,
1800
+ transmittedKeyFramesConfigurationChange: 0,
1801
+ transmittedKeyFramesFeedback: 0,
1802
+ transmittedKeyFramesLocalDrop: 0,
1803
+ transmittedKeyFramesOtherLayer: 0,
1804
+ transmittedKeyFramesPeriodic: 0,
1805
+ transmittedKeyFramesSceneChange: 0,
1806
+ transmittedKeyFramesStartup: 0,
1807
+ transmittedKeyFramesUnknown: 0,
1808
+ transmittedWidth: 0,
1762
1809
  requestedBitrate: 0,
1763
- requestedFrames: 0,
1764
- rtpPackets: 0,
1765
- ssci: 0,
1766
- transmittedBitrate: 0.13333333333333333,
1767
- transmittedFrameRate: 0,
1768
1810
  },
1769
- h264CodecProfile: 'BP',
1770
- isAvatar: false,
1771
- isHardwareEncoded: false,
1772
- localConfigurationChanges: 2,
1773
- maxFrameQp: 0,
1774
- maxNoiseLevel: 0,
1775
- minRegionQp: 0,
1776
- remoteConfigurationChanges: 0,
1777
- requestedFrameSize: 0,
1778
- requestedKeyFrames: 0,
1779
- transmittedFrameSize: 0,
1780
- transmittedHeight: 0,
1781
- transmittedKeyFrames: 0,
1782
- transmittedKeyFramesClient: 0,
1783
- transmittedKeyFramesConfigurationChange: 0,
1784
- transmittedKeyFramesFeedback: 0,
1785
- transmittedKeyFramesLocalDrop: 0,
1786
- transmittedKeyFramesOtherLayer: 0,
1787
- transmittedKeyFramesPeriodic: 0,
1788
- transmittedKeyFramesSceneChange: 0,
1789
- transmittedKeyFramesStartup: 0,
1790
- transmittedKeyFramesUnknown: 0,
1791
- transmittedWidth: 0,
1792
- requestedBitrate: 0,
1793
- },
1794
- {
1795
- common: {
1796
- codec: 'H264',
1797
- csi: [],
1798
- duplicateSsci: 0,
1811
+ {
1812
+ common: {
1813
+ codec: 'H264',
1814
+ csi: [],
1815
+ duplicateSsci: 0,
1816
+ requestedBitrate: 0,
1817
+ requestedFrames: 0,
1818
+ rtpPackets: 0,
1819
+ ssci: 0,
1820
+ transmittedBitrate: 133.33333333333334,
1821
+ transmittedFrameRate: 0,
1822
+ },
1823
+ h264CodecProfile: 'BP',
1824
+ isAvatar: false,
1825
+ isHardwareEncoded: false,
1826
+ localConfigurationChanges: 2,
1827
+ maxFrameQp: 0,
1828
+ maxNoiseLevel: 0,
1829
+ minRegionQp: 0,
1830
+ remoteConfigurationChanges: 0,
1831
+ requestedFrameSize: 0,
1832
+ requestedKeyFrames: 0,
1833
+ transmittedFrameSize: 0,
1834
+ transmittedHeight: 0,
1835
+ transmittedKeyFrames: 0,
1836
+ transmittedKeyFramesClient: 0,
1837
+ transmittedKeyFramesConfigurationChange: 0,
1838
+ transmittedKeyFramesFeedback: 0,
1839
+ transmittedKeyFramesLocalDrop: 0,
1840
+ transmittedKeyFramesOtherLayer: 0,
1841
+ transmittedKeyFramesPeriodic: 0,
1842
+ transmittedKeyFramesSceneChange: 0,
1843
+ transmittedKeyFramesStartup: 0,
1844
+ transmittedKeyFramesUnknown: 0,
1845
+ transmittedWidth: 0,
1799
1846
  requestedBitrate: 0,
1800
- requestedFrames: 0,
1801
- rtpPackets: 1,
1802
- ssci: 0,
1803
- transmittedBitrate: 133.33333333333334,
1804
- transmittedFrameRate: 0,
1805
- },
1806
- h264CodecProfile: 'BP',
1807
- isAvatar: false,
1808
- isHardwareEncoded: false,
1809
- localConfigurationChanges: 2,
1810
- maxFrameQp: 0,
1811
- maxNoiseLevel: 0,
1812
- minRegionQp: 0,
1813
- remoteConfigurationChanges: 0,
1814
- requestedFrameSize: 0,
1815
- requestedKeyFrames: 0,
1816
- transmittedFrameSize: 0,
1817
- transmittedHeight: 0,
1818
- transmittedKeyFrames: 0,
1819
- transmittedKeyFramesClient: 0,
1820
- transmittedKeyFramesConfigurationChange: 0,
1821
- transmittedKeyFramesFeedback: 0,
1822
- transmittedKeyFramesLocalDrop: 0,
1823
- transmittedKeyFramesOtherLayer: 0,
1824
- transmittedKeyFramesPeriodic: 0,
1825
- transmittedKeyFramesSceneChange: 0,
1826
- transmittedKeyFramesStartup: 0,
1827
- transmittedKeyFramesUnknown: 0,
1828
- transmittedWidth: 0,
1829
- requestedBitrate: 0,
1830
- }
1831
- ]);
1847
+ }
1848
+ ]);
1849
+ });
1832
1850
  });
1833
1851
  describe('active speaker status emission', async () => {
1834
1852
  beforeEach(async () => {