您最多选择25个主题 主题必须以字母或数字开头,可以包含连字符 (-),并且长度不得超过35个字符

example.js 5.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. //var options = {
  2. // hosts: {
  3. // domain: "prod-us-east-1-app-xmpp1.internal.meet.hipchat.ninja",
  4. // focus: "focus.prod-us-east-1-app-xmpp1.internal.meet.hipchat.ninja",
  5. // muc: "conference.prod-us-east-1-app-xmpp1.internal.meet.hipchat.ninja", // FIXME: use XEP-0030
  6. // },
  7. // bosh: "https://xmpp1-meet.hipchat.me/http-bind", // FIXME: use xep-0156 for that
  8. // clientNode: "http://prod-us-east-1-app-xmpp1.internal.meet.hipchat.ninja/jitsimeet" // The name of client node advertised in XEP-0115 'c' stanza
  9. //};
  10. var options = {
  11. hosts: {
  12. domain: 'hristo.jitsi.net',
  13. muc: 'conference.hristo.jitsi.net', // FIXME: use XEP-0030
  14. bridge: 'jitsi-videobridge.hristo.jitsi.net', // FIXME: use XEP-0030
  15. },
  16. bosh: '//hristo.jitsi.net/http-bind', // FIXME: use xep-0156 for that
  17. clientNode: 'http://jitsi.org/jitsimeet', // The name of client node advertised in XEP-0115 'c' stanza
  18. }
  19. // var options = {
  20. // hosts: {
  21. // domain: 'whatever.jitsi.net',
  22. // muc: 'conference.whatever.jitsi.net', // FIXME: use XEP-0030
  23. // bridge: 'jitsi-videobridge.whatever.jitsi.net', // FIXME: use XEP-0030
  24. // },
  25. // bosh: '//whatever.jitsi.net/http-bind?ROOM_NAME=conference2', // FIXME: use xep-0156 for that
  26. // clientNode: 'http://jitsi.org/jitsimeet', // The name of client node advertised in XEP-0115 'c' stanza
  27. // }
  28. var confOptions = {
  29. openSctp: true,
  30. disableAudioLevels: true
  31. }
  32. /**
  33. * Handles local tracks.
  34. * @param tracks Array with JitsiTrack objects
  35. */
  36. function onLocalTracks(tracks)
  37. {
  38. localTracks = tracks;
  39. tracks[0].attach($("#localAudio"));
  40. tracks[1].attach($("#localVideo"));
  41. for(var i = 0; i < localTracks.length; i++)
  42. {
  43. console.log(localTracks[i]);
  44. }
  45. }
  46. /**
  47. * Handles remote tracks
  48. * @param track JitsiTrack object
  49. */
  50. function onRemoteTrack(track) {
  51. var participant = track.getParitcipantId();
  52. if(!remoteTracks[participant])
  53. remoteTracks[participant] = [];
  54. remoteTracks[participant].push(track);
  55. var id = participant + track.getType();
  56. if(track.getType() == "video") {
  57. $("body").append("<video autoplay='1' id='" + participant + "video' />");
  58. } else {
  59. $("body").append("<audio autoplay='1' id='" + participant + "audio' />");
  60. }
  61. track.attach($("#" + id));
  62. }
  63. /**
  64. * That function is executed when the conference is joined
  65. */
  66. function onConferenceJoined () {
  67. console.log("conference joined!");
  68. for(var i = 0; i < localTracks.length; i++)
  69. {
  70. room.addTrack(localTracks[i]);
  71. }
  72. }
  73. function onUserLeft(id) {
  74. if(!remoteTracks[id])
  75. return;
  76. var tracks = remoteTracks[id];
  77. for(var i = 0; i< tracks.length; i++)
  78. tracks[i].detach($("#" + id + tracks[i].getType()))
  79. }
  80. /**
  81. * That function is called when connection is established successfully
  82. */
  83. function onConnectionSuccess(){
  84. room = connection.initJitsiConference("conference2", confOptions);
  85. room.on(JitsiMeetJS.events.conference.TRACK_ADDED, onRemoteTrack);
  86. room.on(JitsiMeetJS.events.conference.TRACK_REMOVED, function () {
  87. console.debug("track removed!!!");
  88. });
  89. room.on(JitsiMeetJS.events.conference.CONFERENCE_JOINED, onConferenceJoined);
  90. room.on(JitsiMeetJS.events.conference.USER_JOINED, function(id){ remoteTracks[id] = [];});
  91. room.on(JitsiMeetJS.events.conference.USER_LEFT, onUserLeft);
  92. room.on(JitsiMeetJS.events.conference.TRACK_MUTE_CHANGED, function (track) {
  93. console.debug(track.getType() + " - " + track.isMuted());
  94. });
  95. room.on(JitsiMeetJS.events.conference.DISPLAY_NAME_CHANGED, function (userID, displayName) {
  96. console.debug(userID + " - " + displayName);
  97. });
  98. room.on(JitsiMeetJS.events.conference.TRACK_AUDIO_LEVEL_CHANGED,
  99. function(userID, audioLevel){
  100. // console.log(userID + " - " + audioLevel);
  101. });
  102. room.join();
  103. };
  104. /**
  105. * This function is called when the connection fail.
  106. */
  107. function onConnectionFailed(){console.error("Connection Failed!")};
  108. /**
  109. * This function is called when we disconnect.
  110. */
  111. function disconnect(){
  112. console.log("disconnect!");
  113. connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
  114. connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, onConnectionFailed);
  115. connection.removeEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, disconnect);
  116. }
  117. function unload() {
  118. // room.leave();
  119. connection.disconnect();
  120. }
  121. $(window).bind('beforeunload', unload);
  122. $(window).bind('unload', unload);
  123. // JitsiMeetJS.setLogLevel(JitsiMeetJS.logLevels.ERROR);
  124. JitsiMeetJS.init();
  125. JitsiMeetJS.createLocalTracks({resolution: "720"}).then(onLocalTracks);
  126. var connection = new JitsiMeetJS.JitsiConnection(null, null, options);
  127. var room = null;
  128. var localTracks = [];
  129. var remoteTracks = {};
  130. connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_ESTABLISHED, onConnectionSuccess);
  131. connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_FAILED, onConnectionFailed);
  132. connection.addEventListener(JitsiMeetJS.events.connection.CONNECTION_DISCONNECTED, disconnect);
  133. connection.connect();