modified lib-jitsi-meet dev repo
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.

example.js 7.6KB

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