Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.

CustomSignalingLayer.js 2.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. import { getLogger } from '@jitsi/logger';
  2. import SignalingLayer from '../../service/RTC/SignalingLayer';
  3. const logger = getLogger('modules/proxyconnection/CustomSignalingLayer');
  4. /**
  5. * Custom semi-mock implementation for the Proxy connection service.
  6. */
  7. export default class CustomSignalingLayer extends SignalingLayer {
  8. /**
  9. * Creates new instance.
  10. */
  11. constructor() {
  12. super();
  13. /**
  14. * A map that stores SSRCs of remote streams.
  15. * @type {Map<number, string>} maps SSRC number to jid
  16. */
  17. this.ssrcOwners = new Map();
  18. /**
  19. *
  20. * @type {ChatRoom|null}
  21. */
  22. this.chatRoom = null;
  23. }
  24. /**
  25. * @inheritDoc
  26. */
  27. getPeerMediaInfo(owner, mediaType, sourceName) { // eslint-disable-line no-unused-vars
  28. return {};
  29. }
  30. /**
  31. * @inheritDoc
  32. */
  33. getPeerSourceInfo(owner, sourceName) { // eslint-disable-line no-unused-vars
  34. return undefined;
  35. }
  36. /**
  37. * @inheritDoc
  38. */
  39. getSSRCOwner(ssrc) {
  40. return this.ssrcOwners.get(ssrc);
  41. }
  42. /**
  43. * @inheritDoc
  44. */
  45. getTrackSourceName(ssrc) { // eslint-disable-line no-unused-vars
  46. return undefined;
  47. }
  48. /**
  49. * @inheritDoc
  50. */
  51. removeSSRCOwners(ssrcList) {
  52. if (!ssrcList?.length) {
  53. return;
  54. }
  55. for (const ssrc of ssrcList) {
  56. this.ssrcOwners.delete(ssrc);
  57. }
  58. }
  59. /**
  60. * Sets the <tt>ChatRoom</tt> instance used.
  61. * @param {ChatRoom} room
  62. */
  63. setChatRoom(room) {
  64. this.chatRoom = room;
  65. }
  66. /**
  67. * @inheritDoc
  68. */
  69. setSSRCOwner(ssrc, endpointId) {
  70. if (typeof ssrc !== 'number') {
  71. throw new TypeError(`SSRC(${ssrc}) must be a number`);
  72. }
  73. // Now signaling layer instance is shared between different JingleSessionPC instances, so although very unlikely
  74. // an SSRC conflict could potentially occur. Log a message to make debugging easier.
  75. const existingOwner = this.ssrcOwners.get(ssrc);
  76. if (existingOwner && existingOwner !== endpointId) {
  77. logger.error(`SSRC owner re-assigned from ${existingOwner} to ${endpointId}`);
  78. }
  79. this.ssrcOwners.set(ssrc, endpointId);
  80. }
  81. /**
  82. * @inheritDoc
  83. */
  84. setTrackMuteStatus(sourceName, muted) { // eslint-disable-line no-unused-vars
  85. return false;
  86. }
  87. /**
  88. * @inheritDoc
  89. */
  90. setTrackVideoType(sourceName, videoType) { // eslint-disable-line no-unused-vars
  91. return false;
  92. }
  93. /**
  94. * @inheritDoc
  95. */
  96. updateSsrcOwnersOnLeave(id) {
  97. const ssrcs = Array.from(this.ssrcOwners)
  98. .filter(entry => entry[1] === id)
  99. .map(entry => entry[0]);
  100. if (!ssrcs?.length) {
  101. return;
  102. }
  103. this.removeSSRCOwners(ssrcs);
  104. }
  105. }