voxeet / dolby.io สร้างการประชุมหลายรายการ

Aug 17 2020

ฉันใช้dolby.io

จนถึงตอนนี้ฉันได้ดำเนินการเข้าร่วมการประชุมออกจากการประชุมเริ่มและหยุดวิดีโอเริ่มและหยุดการบันทึกเริ่มและหยุดการแชร์หน้าจอ สิ่งที่ฉันประสบปัญหาคือเกี่ยวกับการประชุมหลายครั้ง ฉันต้องการใช้การประชุมหลายรายการที่มี ID การประชุมที่ไม่ซ้ำกันเพื่อให้ผู้ใช้ทุกคนที่ระบุสำหรับการประชุมที่เกี่ยวข้องควรเข้าร่วมด้วยตนเอง ฉันไม่ได้รับความคิดใด ๆ จากเอกสารอย่างเป็นทางการ

นี่คือรหัสของฉัน

const initUI = () => {
  const nameMessage = document.getElementById('name-message');
  const joinButton = document.getElementById('join-btn');
  const conferenceAliasInput = document.getElementById('alias-input');
  const leaveButton = document.getElementById('leave-btn');
  const startVideoBtn = document.getElementById('start-video-btn');
  const stopVideoBtn = document.getElementById('stop-video-btn');
  const startScreenShareBtn = document.getElementById('start-screenshare-btn');
  const stopScreenShareBtn = document.getElementById('stop-screenshare-btn');
  const startRecordingBtn = document.getElementById('start-recording-btn');
  const stopRecordingBtn = document.getElementById('stop-recording-btn');
  //const mute_unmute = document.getElementById('mute');
  //oxeetSDK.conference.mute(VoxeetSDK.session.participant, VoxeetSDK.session.participant.isMuted);
  //let isMuted = VoxeetSDK.conference.toggleMute(VoxeetSDK.session.participant);
  nameMessage.innerHTML = `${randomName}`; joinButton.disabled = false; joinButton.onclick = () => { let conferenceAlias = conferenceAliasInput.value; /* 1. Create a conference room with an alias 2. Join the conference with its id */ VoxeetSDK.conference.create({ alias: conferenceAlias }) .then((conference) => VoxeetSDK.conference.join(conference, {})) .then(() => { joinButton.disabled = true; leaveButton.disabled = false; startVideoBtn.disabled = false; startScreenShareBtn.disabled = false; startRecordingBtn.disabled = false; }) .catch((e) => console.log('Something wrong happened : ' + e)) }; leaveButton.onclick = () => { VoxeetSDK.conference.leave() .then(() => { joinButton.disabled = false; leaveButton.disabled = true; startScreenShareBtn.disabled = true; stopScreenShareBtn.disabled = true; }) .catch((err) => { console.log(err); }); }; startVideoBtn.onclick = () => { VoxeetSDK.conference.startVideo(VoxeetSDK.session.participant) .then(() => { startVideoBtn.disabled = true; stopVideoBtn.disabled = false; }); }; stopVideoBtn.onclick = () => { VoxeetSDK.conference.stopVideo(VoxeetSDK.session.participant) .then(() => { stopVideoBtn.disabled = true; startVideoBtn.disabled = false; }); }; startScreenShareBtn.onclick = () => { VoxeetSDK.conference.startScreenShare() .then(() => { startScreenShareBtn.disabled = true; stopScreenShareBtn.disabled = false; }) .catch((e) => console.log(e)) }; stopScreenShareBtn.onclick = () => { VoxeetSDK.conference.stopScreenShare() .then(() => { startScreenShareBtn.disabled = false; stopScreenShareBtn.disabled = true; }) .catch((e) => console.log(e)) }; startRecordingBtn.onclick = () => { let recordStatus = document.getElementById('record-status'); VoxeetSDK.recording.start() .then(() => { recordStatus.innerText = 'Recording...'; startRecordingBtn.disabled = true; stopRecordingBtn.disabled = false; }) .catch((err) => { console.log(err); }) }; stopRecordingBtn.onclick = () => { let recordStatus = document.getElementById('record-status'); VoxeetSDK.recording.stop() .then(() => { recordStatus.innerText = ''; startRecordingBtn.disabled = false; stopRecordingBtn.disabled = true; }) .catch((err) => { console.log(err); }) }; }; const addVideoNode = (participant, stream) => { const videoContainer = document.getElementById('video-container'); let videoNode = document.getElementById('video-' + participant.id); if(!videoNode) { videoNode = document.createElement('video'); videoNode.setAttribute('id', 'video-' + participant.id); videoNode.setAttribute('controls', true); //VoxeetSDK.conference.mute(VoxeetSDK.session.participant, VoxeetSDK.session.participant.isMuted); //let isMuted = VoxeetSDK.conference.toggleMute(VoxeetSDK.session.participant); //console.log(isMuted); //videoNode.setAttribute('height', 240); //videoNode.setAttribute('width', 720); videoContainer.appendChild(videoNode); videoNode.autoplay = 'autoplay'; videoNode.muted = true; } navigator.attachMediaStream(videoNode, stream); }; const removeVideoNode = (participant) => { let videoNode = document.getElementById('video-' + participant.id); if (videoNode) { videoNode.parentNode.removeChild(videoNode); } }; const addParticipantNode = (participant) => { //const members_count++; const participantsList = document.getElementById('participants-list'); // if the participant is the current session user, don't add himself to the list if (participant.id === VoxeetSDK.session.participant.id) return; // let participantNode = document.createElement('li'); // participantNode.setAttribute('id', 'participant-' + participant.id); // participantNode.innerText = `${participant.info.name}`;
  //alert(VoxeetSDK.session.participant);

  //document.getElementById('members_count').innerText=participant.id;
  let participantNode = document.createElement('div');
  participantNode.setAttribute('class', 'tabcnt-item');
  participantNode.setAttribute('id', 'participant-' + participant.id);

  //document.getElementById('members_count').innerText = document.getElementById('members_count').innerText + 1;
  //document.getElementById('members_count').innerText = members_count;

  participantNode.innerText = `${participant.info.name}`; const send_html = "<div class='tabcnt-item'><div class='row align-items-center'><div class='col-md-8'><div class='media'><img src='images/pp.png' alt=''><div class='media-body'><h3>'"+`${participant.info.name}`+"'</h3><p>[email protected]</p></div></div></div><div class='col-md-4'><ul><li><a href='#'><i class='fas fa-video'></i></a></li><li><a href='#'><i class='fas fa-microphone'></i></a></li></ul></div></div></div>";
  
  participantNode.innerHTML = send_html;

  participantsList.appendChild(participantNode);
  document.getElementById('members_count').innerText= $('.tab-cnt').length; }; const removeParticipantNode = (participant) => { let participantNode = document.getElementById('participant-' + participant.id); if (participantNode) { participantNode.parentNode.removeChild(participantNode); document.getElementById('members_count').innerText= $('.tab-cnt').length;
  }
};

const addScreenShareNode = (stream) => {
  const screenShareContainer = document.getElementById('screenshare-container');
  let screenShareNode = document.getElementById('screenshare');

  if (screenShareNode) return alert('There is already a participant sharing his screen !');

  screenShareNode = document.createElement('video');
  screenShareNode.setAttribute('id', 'screenshare');
  screenShareNode.autoplay = 'autoplay';
  navigator.attachMediaStream(screenShareNode, stream);

  screenShareContainer.appendChild(screenShareNode);
}

const removeScreenShareNode = () => {
  let screenShareNode = document.getElementById('screenshare');

  if (screenShareNode) {
      screenShareNode.parentNode.removeChild(screenShareNode);
  }
}

ฉันเหนื่อยและเหนื่อยกับการ Googling จะเป็นความช่วยเหลือที่ดีหากบางคนสามารถชี้แนะหรือให้แนวทางในการจัดทำเอกสารที่ละเอียดมากขึ้น ฉันได้อ่าน Dolby docs ทุกชิ้นแล้ว ขอบคุณที่อ่าน

คำตอบ

j12y Aug 25 2020 at 16:19

เมื่อคุณเรียกcreate()ID การประชุมใหม่จะถูกสร้างขึ้นซึ่งเป็นแนวทางเฉพาะสำหรับบัญชีของคุณ คุณสามารถโทรหาget_id ()เพื่อค้นหาได้ คุณยังสามารถระบุนามแฝงเพื่อช่วยในการอ่านเมื่ออาจมีการประชุมหลายรายการที่เปิดใช้งานในช่วงเวลาใดเวลาหนึ่ง

หากคุณต้องการให้มีการประชุมหลายครั้งคุณควรโทรติดต่อcreate()หลายครั้ง นั่นคือความคาดหวังคือแอปทั่วไปจะเริ่มต้นการประชุมเพียงครั้งเดียว แต่มีหลายอินสแตนซ์ที่ทำงานอยู่แต่ละครั้งมีการประชุมของตนเองและ / หรือเชิญผู้อื่นเข้าร่วมการประชุมที่มีอยู่ สำหรับเว็บแอปอาจเป็นเซสชันของผู้ใช้ที่แยกจากกันแทนที่จะเป็นแอปพลิเคชันมือถือที่ปรับใช้แยกต่างหาก คุณอาจต้องการเก็บรักษาหนังสือสำหรับรหัสที่สร้างขึ้นสำหรับผู้ใช้แต่ละคนในบริการของคุณเอง

คุณอาจกำลังมองหาการประชุมทั้งหมดที่ใช้งานอยู่ในบัญชีในช่วงเวลาใดเวลาหนึ่งขณะทดสอบหรือตรวจสอบแอปที่ทำให้ใช้งานได้ คุณสามารถใช้ Monitor API getConferencesเพื่อรับรายการนั้น

หากคุณมีคำถามเพิ่มเติมขอแนะนำให้ใช้Dolby.io Supportเพื่อรับคำตอบและคำแนะนำส่วนบุคคลเพิ่มเติม