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

example.js 5.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. var options = {
  2. hosts: {
  3. domain: 'hristo.jitsi.net',
  4. muc: 'conference.hristo.jitsi.net', // FIXME: use XEP-0030
  5. bridge: 'jitsi-videobridge.hristo.jitsi.net', // FIXME: use XEP-0030
  6. },
  7. bosh: '//hristo.jitsi.net/http-bind', // FIXME: use xep-0156 for that
  8. clientNode: 'http://jitsi.org/jitsimeet', // The name of client node advertised in XEP-0115 'c' stanza
  9. }
  10. var confOptions = {
  11. openSctp: true,
  12. disableAudioLevels: true
  13. }
  14. /**
  15. * Handles local tracks.
  16. * @param tracks Array with JitsiTrack objects
  17. */
  18. function onLocalTracks(tracks)
  19. {
  20. localTracks = tracks;
  21. for(var i = 0; i < localTracks.length; i++)
  22. {
  23. if(localTracks[i].getType() == "video") {
  24. $("body").append("<video autoplay='1' id='localVideo" + i + "' />");
  25. localTracks[i].attach($("#localVideo" + i ));
  26. } else {
  27. $("body").append("<audio autoplay='1' id='localAudio" + i + "' />");
  28. localTracks[i].attach($("#localAudio" + i ));
  29. }
  30. room.addTrack(localTracks[i]);
  31. console.log(localTracks[i]);
  32. }
  33. }
  34. /**
  35. * Handles remote tracks
  36. * @param track JitsiTrack object
  37. */
  38. function onRemoteTrack(track) {
  39. var participant = track.getParitcipantId();
  40. if(!remoteTracks[participant])
  41. remoteTracks[participant] = [];
  42. var idx = remoteTracks[participant].push(track);
  43. var id = participant + track.getType() + idx;
  44. if(track.getType() == "video") {
  45. $("body").append("<video autoplay='1' id='" + participant + "video" + idx + "' />");
  46. } else {
  47. $("body").append("<audio autoplay='1' id='" + participant + "audio' />");
  48. }
  49. track.attach($("#" + id));
  50. }
  51. /**
  52. * That function is executed when the conference is joined
  53. */
  54. function onConferenceJoined () {
  55. console.log("conference joined!");
  56. JitsiMeetJS.createLocalTracks({devices: ["audio", "video", "desktop"]}).then(onLocalTracks).catch(function (error) {
  57. console.log(error);
  58. });
  59. }
  60. function onUserLeft(id) {
  61. if(!remoteTracks[id])
  62. return;
  63. var tracks = remoteTracks[id];
  64. for(var i = 0; i< tracks.length; i++)
  65. tracks[i].detach($("#" + id + tracks[i].getType()))
  66. }
  67. /**
  68. * That function is called when connection is established successfully
  69. */
  70. function onConnectionSuccess(){
  71. room = connection.initJitsiConference("conference2", confOptions);
  72. room.on(JitsiMeetJS.events.conference.TRACK_ADDED, onRemoteTrack);
  73. room.on(JitsiMeetJS.events.conference.TRACK_REMOVED, function () {
  74. console.debug("track removed!!!");
  75. });
  76. room.on(JitsiMeetJS.events.conference.CONFERENCE_JOINED, onConferenceJoined);
  77. room.on(JitsiMeetJS.events.conference.USER_JOINED, function(id){ remoteTracks[id] = [];});
  78. room.on(JitsiMeetJS.events.conference.USER_LEFT, onUserLeft);
  79. room.on(JitsiMeetJS.events.conference.TRACK_MUTE_CHANGED, function (track) {
  80. console.debug(track.getType() + " - " + track.isMuted());
  81. });
  82. room.on(JitsiMeetJS.events.conference.DISPLAY_NAME_CHANGED, function (userID, displayName) {
  83. console.debug(userID + " - " + displayName);
  84. });
  85. room.on(JitsiMeetJS.events.conference.TRACK_AUDIO_LEVEL_CHANGED,
  86. function(userID, audioLevel){
  87. // console.log(userID + " - " + audioLevel);
  88. });
  89. room.join();
  90. };
  91. /**
  92. * This function is called when the connection fail.
  93. */
  94. function onConnectionFailed(){console.error("Connection Failed!")};
  95. /**
  96. * This function is called when we disconnect.
  97. */
  98. function disconnect(){
  99. console.log("disconnect!");
  100. connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
  101. connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, onConnectionFailed);
  102. connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, disconnect);
  103. }
  104. function unload() {
  105. // room.leave();
  106. connection.disconnect();
  107. }
  108. $(window).bind('beforeunload', unload);
  109. $(window).bind('unload', unload);
  110. // JitsiMeetJS.setLogLevel(JitsiMeetJS.logLevels.ERROR);
  111. var initOptions = {
  112. // Desktop sharing method. Can be set to 'ext', 'webrtc' or false to disable.
  113. desktopSharingChromeMethod: 'ext',
  114. // The ID of the jidesha extension for Chrome.
  115. desktopSharingChromeExtId: 'mbocklcggfhnbahlnepmldehdhpjfcjp',
  116. // The media sources to use when using screen sharing with the Chrome
  117. // extension.
  118. desktopSharingChromeSources: ['screen', 'window'],
  119. // Required version of Chrome extension
  120. desktopSharingChromeMinExtVersion: '0.1',
  121. // The ID of the jidesha extension for Firefox. If null, we assume that no
  122. // extension is required.
  123. desktopSharingFirefoxExtId: null,
  124. // Whether desktop sharing should be disabled on Firefox.
  125. desktopSharingFirefoxDisabled: true,
  126. // The maximum version of Firefox which requires a jidesha extension.
  127. // Example: if set to 41, we will require the extension for Firefox versions
  128. // up to and including 41. On Firefox 42 and higher, we will run without the
  129. // extension.
  130. // If set to -1, an extension will be required for all versions of Firefox.
  131. desktopSharingFirefoxMaxVersionExtRequired: -1,
  132. // The URL to the Firefox extension for desktop sharing.
  133. desktopSharingFirefoxExtensionURL: null
  134. }
  135. JitsiMeetJS.init(initOptions);
  136. var connection = null;
  137. var room = null;
  138. var localTracks = [];
  139. var remoteTracks = {};
  140. connection = new JitsiMeetJS.JitsiConnection(null, null, options);
  141. connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
  142. connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, onConnectionFailed);
  143. connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, disconnect);
  144. connection.connect();