You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

statistics.js 4.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /* global require, APP */
  2. /**
  3. * Created by hristo on 8/4/14.
  4. */
  5. var LocalStats = require("./LocalStatsCollector.js");
  6. var RTPStats = require("./RTPStatsCollector.js");
  7. var EventEmitter = require("events");
  8. var StreamEventTypes = require("../../service/RTC/StreamEventTypes.js");
  9. var XMPPEvents = require("../../service/xmpp/XMPPEvents");
  10. var CallStats = require("./CallStats");
  11. var RTCEvents = require("../../service/RTC/RTCEvents");
  12. var StatisticsEvents = require("../../service/statistics/Events");
  13. var eventEmitter = new EventEmitter();
  14. var localStats = null;
  15. var rtpStats = null;
  16. function stopLocal() {
  17. if (localStats) {
  18. localStats.stop();
  19. localStats = null;
  20. }
  21. }
  22. function stopRemote() {
  23. if (rtpStats) {
  24. rtpStats.stop();
  25. eventEmitter.emit(StatisticsEvents.STOP);
  26. rtpStats = null;
  27. }
  28. }
  29. function startRemoteStats (peerconnection) {
  30. if (rtpStats) {
  31. rtpStats.stop();
  32. }
  33. rtpStats = new RTPStats(peerconnection, 200, 2000, eventEmitter);
  34. rtpStats.start();
  35. }
  36. function onStreamCreated(stream) {
  37. if(stream.getOriginalStream().getAudioTracks().length === 0) {
  38. return;
  39. }
  40. localStats = new LocalStats(stream.getOriginalStream(), 200, statistics,
  41. eventEmitter);
  42. localStats.start();
  43. }
  44. function onDisposeConference(onUnload) {
  45. CallStats.sendTerminateEvent();
  46. stopRemote();
  47. if(onUnload) {
  48. stopLocal();
  49. eventEmitter.removeAllListeners();
  50. }
  51. }
  52. var statistics = {
  53. /**
  54. * Indicates that this audio level is for local jid.
  55. * @type {string}
  56. */
  57. LOCAL_JID: 'local',
  58. addListener: function(type, listener) {
  59. eventEmitter.on(type, listener);
  60. },
  61. removeListener: function (type, listener) {
  62. eventEmitter.removeListener(type, listener);
  63. },
  64. stop: function () {
  65. stopLocal();
  66. stopRemote();
  67. if(eventEmitter)
  68. {
  69. eventEmitter.removeAllListeners();
  70. }
  71. },
  72. stopRemoteStatistics: function()
  73. {
  74. stopRemote();
  75. },
  76. start: function () {
  77. return;
  78. APP.RTC.addStreamListener(onStreamCreated,
  79. StreamEventTypes.EVENT_TYPE_LOCAL_CREATED);
  80. APP.xmpp.addListener(XMPPEvents.DISPOSE_CONFERENCE,
  81. onDisposeConference);
  82. //FIXME: we may want to change CALL INCOMING event to
  83. // onnegotiationneeded
  84. APP.xmpp.addListener(XMPPEvents.CALL_INCOMING, function (event) {
  85. startRemoteStats(event.peerconnection);
  86. // CallStats.init(event);
  87. });
  88. APP.xmpp.addListener(XMPPEvents.PEERCONNECTION_READY,
  89. function (session) {
  90. CallStats.init(session);
  91. });
  92. APP.RTC.addListener(RTCEvents.AUDIO_MUTE, function (mute) {
  93. CallStats.sendMuteEvent(mute, "audio");
  94. });
  95. APP.xmpp.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED, function () {
  96. CallStats.sendSetupFailedEvent();
  97. });
  98. APP.RTC.addListener(RTCEvents.VIDEO_MUTE, function (mute) {
  99. CallStats.sendMuteEvent(mute, "video");
  100. });
  101. APP.RTC.addListener(RTCEvents.GET_USER_MEDIA_FAILED, function (e) {
  102. CallStats.sendGetUserMediaFailed(e);
  103. });
  104. APP.xmpp.addListener(RTCEvents.CREATE_OFFER_FAILED, function (e, pc) {
  105. CallStats.sendCreateOfferFailed(e, pc);
  106. });
  107. APP.xmpp.addListener(RTCEvents.CREATE_ANSWER_FAILED, function (e, pc) {
  108. CallStats.sendCreateAnswerFailed(e, pc);
  109. });
  110. APP.xmpp.addListener(
  111. RTCEvents.SET_LOCAL_DESCRIPTION_FAILED,
  112. function (e, pc) {
  113. CallStats.sendSetLocalDescFailed(e, pc);
  114. }
  115. );
  116. APP.xmpp.addListener(
  117. RTCEvents.SET_REMOTE_DESCRIPTION_FAILED,
  118. function (e, pc) {
  119. CallStats.sendSetRemoteDescFailed(e, pc);
  120. }
  121. );
  122. APP.xmpp.addListener(
  123. RTCEvents.ADD_ICE_CANDIDATE_FAILED,
  124. function (e, pc) {
  125. CallStats.sendAddIceCandidateFailed(e, pc);
  126. }
  127. );
  128. }
  129. };
  130. module.exports = statistics;