Advertisement
Guest User

Untitled

a guest
Mar 31st, 2025
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.91 KB | None | 0 0
  1. const APP_ID = ''
  2.  
  3. let uid = sessionStorage.getItem('uid')
  4. if (!uid) {
  5. uid = String(Math.floor(Math.random() * 10000))
  6. sessionStorage.setItem('uid', uid)
  7. }
  8.  
  9. let token = null;
  10. let client;
  11.  
  12. let rtmClient;
  13. let channel;
  14.  
  15. const queryString = window.location.search
  16. const urlParams = new URLSearchParams(queryString)
  17. let roomId = urlParams.get('room')
  18. console.log('Room ID:', roomId);
  19.  
  20. if (!roomId) {
  21. roomId = 'main'
  22. }
  23.  
  24. let displayName = sessionStorage.getItem('display_name')
  25.  
  26. let localTracks = []
  27. let remoteUsers = {}
  28.  
  29. let localScreenTracks;
  30. let sharingScreen = false;
  31.  
  32. let joinRoomInit = async () => {
  33. rtmClient = await AgoraRTM.createInstance(APP_ID)
  34. await rtmClient.login({ uid, token })
  35.  
  36. await rtmClient.addOrUpdateLocalUserAttributes({ 'name': displayName })
  37.  
  38. channel = await rtmClient.createChannel(roomId)
  39. await channel.join()
  40.  
  41. channel.on('MemberJoined', handleMemberJoined)
  42. channel.on('MemberLeft', handleMemberLeft)
  43. channel.on('ChannelMessage', handleChannelMessage)
  44.  
  45. getMembers()
  46. addBotMessageToDom(`Witaj na zajęciach ${displayName}! 👋`)
  47.  
  48. client = AgoraRTC.createClient({ mode: 'rtc', codec: 'vp8' })
  49. await client.join(APP_ID, roomId, token, uid)
  50.  
  51. client.on('user-published', handleUserPublished)
  52. client.on('user-left', handleUserLeft)
  53.  
  54. joinStream()
  55. }
  56.  
  57. let joinStream = async () => {
  58. localTracks = await AgoraRTC.createMicrophoneAndCameraTracks({}, { encoderConfig: {
  59. width: { min: 640, ideal: 1920, max: 1920 },
  60. height: { min: 480, ideal: 1080, max: 1080 }
  61. } })
  62.  
  63. if (!localTracks[0] || !localTracks[1]) {
  64. console.error("Błąd: Nie udało się uzyskać dostępu do mikrofonu lub kamery.");
  65. return;
  66. }
  67.  
  68.  
  69. let player = `<div class="video__container" id="user-container-${uid}">
  70. <div class="video-player" id="user-${uid}"></div>
  71. </div>`
  72.  
  73. document.getElementById('streams__container').insertAdjacentHTML('beforeend', player)
  74. document.getElementById(`user-container-${uid}`).addEventListener('click', expandVideoFrame)
  75.  
  76. localTracks[1].play(`user-${uid}`)
  77. await client.publish([localTracks[0], localTracks[1]])
  78.  
  79. let cameraBtn = document.getElementById('camera-btn');
  80. cameraBtn.classList.remove('active');
  81. }
  82.  
  83. let switchToCamera = async () => {
  84. let player = `<div class="video__container" id="user-container-${uid}">
  85. <div class="video-player" id="user-${uid}"></div>
  86. </div>`
  87. displayFrame.insertAdjacentHTML('beforeend', player)
  88.  
  89. await localTracks[0].setMuted(true)
  90. await localTracks[1].setMuted(true)
  91.  
  92. document.getElementById('mic-btn').classList.remove('active')
  93. document.getElementById('screen-btn').classList.remove('active')
  94.  
  95. localTracks[1].play(`user-${uid}`)
  96. await client.publish([localTracks[1]])
  97. }
  98.  
  99. let handleUserPublished = async (user, mediaType) => {
  100. remoteUsers[user.uid] = user
  101.  
  102. await client.subscribe(user, mediaType)
  103.  
  104. let player = document.getElementById(`user-container-${user.uid}`)
  105. if (player === null) {
  106. player = `<div class="video__container" id="user-container-${user.uid}">
  107. <div class="video-player" id="user-${user.uid}"></div>
  108. </div>`
  109.  
  110. document.getElementById('streams__container').insertAdjacentHTML('beforeend', player)
  111. document.getElementById(`user-container-${user.uid}`).addEventListener('click', expandVideoFrame)
  112. }
  113.  
  114. if (mediaType === 'video') {
  115. user.videoTrack.play(`user-${user.uid}`)
  116. }
  117.  
  118. if (mediaType === 'audio') {
  119. user.audioTrack.play()
  120. }
  121. }
  122.  
  123. let handleUserLeft = async (user) => {
  124. delete remoteUsers[user.uid]
  125. document.getElementById(`user-container-${user.uid}`).remove()
  126.  
  127. if (userIdInDisplayFrame === `user-container-${user.uid}`) {
  128. displayFrame.style.display = null
  129.  
  130. let videoFrames = document.getElementsByClassName('video__container')
  131.  
  132. for (let i = 0; videoFrames.length > i; i++) {
  133. videoFrames[i].style.height = '300px'
  134. videoFrames[i].style.width = '300px'
  135. }
  136. }
  137.  
  138. await client.publish([localTracks[0], localTracks[1]]);
  139. }
  140.  
  141. let toggleMic = async (e) => {
  142. let button = e.currentTarget
  143.  
  144. if (localTracks[0].muted) {
  145. await localTracks[0].setMuted(false)
  146. button.classList.add('active')
  147. } else {
  148. await localTracks[0].setMuted(true)
  149. button.classList.remove('active')
  150. }
  151. }
  152.  
  153. let toggleCamera = async (e) => {
  154. let button = e.currentTarget
  155.  
  156. if (localTracks[1].muted) {
  157. await localTracks[1].setMuted(false)
  158. button.classList.add('active')
  159. }
  160. else {
  161. await localTracks[1].setMuted(true)
  162. button.classList.remove('active')
  163. }
  164. }
  165.  
  166. let toggleScreen = async (e) => {
  167. let screenButton = e.currentTarget
  168. let cameraButton = document.getElementById('camera-btn')
  169.  
  170. if (!sharingScreen) {
  171. sharingScreen = true
  172.  
  173. screenButton.classList.add('active')
  174. cameraButton.classList.remove('active')
  175. cameraButton.style.display = 'none'
  176.  
  177. localScreenTracks = await AgoraRTC.createScreenVideoTrack()
  178.  
  179. document.getElementById(`user-container-${uid}`).remove()
  180. displayFrame.style.display = 'block'
  181.  
  182. let player = `<div class="video__container" id="user-container-${uid}">
  183. <div class="video-player" id="user-${uid}"></div>
  184. </div>`
  185.  
  186. displayFrame.insertAdjacentHTML('beforeend', player)
  187. document.getElementById(`user-container-${uid}`).addEventListener('click', expandVideoFrame)
  188.  
  189. userIdInDisplayFrame = `user-container-${uid}`
  190. localScreenTracks.play(`user-${uid}`)
  191.  
  192. await client.unpublish([localTracks[1]])
  193. await client.publish([localScreenTracks])
  194.  
  195. let videoFrames = document.getElementsByClassName('video__container')
  196. for (let i = 0; videoFrames.length > i; i++) {
  197. if (videoFrames[i].id != userIdInDisplayFrame) {
  198. videoFrames[i].style.height = '100px'
  199. videoFrames[i].style.width = '100px'
  200. }
  201. }
  202. }
  203. else {
  204. sharingScreen = false
  205. cameraButton.style.display = 'block'
  206. document.getElementById(`user-container-${uid}`).remove()
  207. await client.unpublish([localScreenTracks])
  208.  
  209. switchToCamera()
  210. }
  211. }
  212.  
  213. let leaveChannelAndGoToLobby = async () => {
  214. await leaveChannel();
  215.  
  216. window.location = '/strefa-wiedzy/'
  217. }
  218.  
  219. document.getElementById('camera-btn').addEventListener('click', toggleCamera)
  220. document.getElementById('mic-btn').addEventListener('click', toggleMic)
  221. document.getElementById('screen-btn').addEventListener('click', toggleScreen)
  222. document.getElementById('leave-btn').addEventListener('click', leaveChannelAndGoToLobby);
  223.  
  224. joinRoomInit()
  225.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement