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.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  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. tracks[0].attach($("#localAudio"));
  22. tracks[1].attach($("#localVideo"));
  23. for(var i = 0; i < localTracks.length; i++)
  24. {
  25. room.addTrack(localTracks[i]);
  26. console.log(localTracks[i]);
  27. }
  28. }
  29. /**
  30. * Handles remote tracks
  31. * @param track JitsiTrack object
  32. */
  33. function onRemoteTrack(track) {
  34. var participant = track.getParitcipantId();
  35. if(!remoteTracks[participant])
  36. remoteTracks[participant] = [];
  37. remoteTracks[participant].push(track);
  38. var id = participant + track.getType();
  39. if(track.getType() == "video") {
  40. $("body").append("<video autoplay='1' id='" + participant + "video' />");
  41. } else {
  42. $("body").append("<audio autoplay='1' id='" + participant + "audio' />");
  43. }
  44. track.attach($("#" + id));
  45. }
  46. /**
  47. * That function is executed when the conference is joined
  48. */
  49. function onConferenceJoined () {
  50. console.log("conference joined!");
  51. JitsiMeetJS.createLocalTracks({}).then(onLocalTracks);
  52. }
  53. function onUserLeft(id) {
  54. if(!remoteTracks[id])
  55. return;
  56. var tracks = remoteTracks[id];
  57. for(var i = 0; i< tracks.length; i++)
  58. tracks[i].detach($("#" + id + tracks[i].getType()))
  59. }
  60. /**
  61. * That function is called when connection is established successfully
  62. */
  63. function onConnectionSuccess(){
  64. room = connection.initJitsiConference("conference2", confOptions);
  65. room.on(JitsiMeetJS.events.conference.TRACK_ADDED, onRemoteTrack);
  66. room.on(JitsiMeetJS.events.conference.TRACK_REMOVED, function () {
  67. console.debug("track removed!!!");
  68. });
  69. room.on(JitsiMeetJS.events.conference.CONFERENCE_JOINED, onConferenceJoined);
  70. room.on(JitsiMeetJS.events.conference.USER_JOINED, function(id){ remoteTracks[id] = [];});
  71. room.on(JitsiMeetJS.events.conference.USER_LEFT, onUserLeft);
  72. room.on(JitsiMeetJS.events.conference.TRACK_MUTE_CHANGED, function (track) {
  73. console.debug(track.getType() + " - " + track.isMuted());
  74. });
  75. room.on(JitsiMeetJS.events.conference.DISPLAY_NAME_CHANGED, function (userID, displayName) {
  76. console.debug(userID + " - " + displayName);
  77. });
  78. room.on(JitsiMeetJS.events.conference.TRACK_AUDIO_LEVEL_CHANGED,
  79. function(userID, audioLevel){
  80. // console.log(userID + " - " + audioLevel);
  81. });
  82. room.join();
  83. };
  84. /**
  85. * This function is called when the connection fail.
  86. */
  87. function onConnectionFailed(){console.error("Connection Failed!")};
  88. /**
  89. * This function is called when we disconnect.
  90. */
  91. function disconnect(){
  92. console.log("disconnect!");
  93. connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
  94. connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, onConnectionFailed);
  95. connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, disconnect);
  96. }
  97. function unload() {
  98. // room.leave();
  99. connection.disconnect();
  100. }
  101. $(window).bind('beforeunload', unload);
  102. $(window).bind('unload', unload);
  103. // JitsiMeetJS.setLogLevel(JitsiMeetJS.logLevels.ERROR);
  104. JitsiMeetJS.init();
  105. var connection = null;
  106. var room = null;
  107. var localTracks = [];
  108. var remoteTracks = {};
  109. connection = new JitsiMeetJS.JitsiConnection(null, null, options);
  110. connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
  111. connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, onConnectionFailed);
  112. connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, disconnect);
  113. connection.connect();