Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

TalkMutedDetection.js 1.6KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. import * as JitsiTrackEvents from '../../JitsiTrackEvents';
  2. export default class TalkMutedDetection {
  3. /**
  4. * Creates TalkMutedDetection
  5. * @param callback the callback to call when detected local user is talking
  6. * while its microphone is muted.
  7. * @constructor
  8. */
  9. constructor(callback) {
  10. this.callback = callback;
  11. // we track firing the event, in order to avoid sending too many events
  12. this.eventFired = false;
  13. }
  14. /**
  15. * Receives audio level events for all send/receive streams.
  16. * @param ssrc the ssrc of the stream
  17. * @param level the current audio level
  18. * @param isLocal whether this is local or remote stream (sent or received)
  19. */
  20. audioLevelListener(ssrc, level, isLocal) {
  21. // we are interested only in local audio stream
  22. // and if event is not already sent
  23. if (!isLocal || !this.audioTrack || this.eventFired)
  24. return;
  25. if (this.audioTrack.isMuted() && level > 0.6) {
  26. this.eventFired = true;
  27. this.callback();
  28. }
  29. }
  30. /**
  31. * Mute changed for a track.
  32. * @param track the track which mute state has changed.
  33. */
  34. muteChanged(track) {
  35. if (!track.isLocal() || !track.isAudioTrack())
  36. return;
  37. if (track.isMuted())
  38. this.eventFired = false;
  39. }
  40. /**
  41. * Adds local tracks. We are interested only in the audio one.
  42. * @param track
  43. */
  44. addTrack(track) {
  45. if (!track.isAudioTrack())
  46. return;
  47. this.audioTrack = track;
  48. }
  49. }