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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  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. APP.RTC.addStreamListener(onStreamCreated,
  78. StreamEventTypes.EVENT_TYPE_LOCAL_CREATED);
  79. APP.xmpp.addListener(XMPPEvents.DISPOSE_CONFERENCE,
  80. onDisposeConference);
  81. //FIXME: we may want to change CALL INCOMING event to
  82. // onnegotiationneeded
  83. APP.xmpp.addListener(XMPPEvents.CALL_INCOMING, function (event) {
  84. startRemoteStats(event.peerconnection);
  85. // CallStats.init(event);
  86. });
  87. APP.xmpp.addListener(XMPPEvents.PEERCONNECTION_READY,
  88. function (session) {
  89. CallStats.init(session);
  90. });
  91. APP.RTC.addListener(RTCEvents.AUDIO_MUTE, function (mute) {
  92. CallStats.sendMuteEvent(mute, "audio");
  93. });
  94. APP.xmpp.addListener(XMPPEvents.CONFERENCE_SETUP_FAILED, function () {
  95. CallStats.sendSetupFailedEvent();
  96. });
  97. APP.RTC.addListener(RTCEvents.VIDEO_MUTE, function (mute) {
  98. CallStats.sendMuteEvent(mute, "video");
  99. });
  100. }
  101. };
  102. module.exports = statistics;