2015-06-06 7 views
8

में शामिल होने तक मैं उपयोगकर्ता को शामिल होने का इंतजार कैसे करूंगा, मैं एक वीडियो कॉन्फ़्रेंस रूम लागू कर रहा हूं जिसमें कोई उपयोगकर्ता वीडियो कॉन्फ़्रेंस बना सकता है और अन्य उपयोगकर्ताओं को आमंत्रित कर सकता है।मीटिंग आयोजक पहले

अब मैं यह सुनिश्चित करना चाहता हूं कि जब तक मीटिंग आयोजक कमरे खोलता है तब तक उपयोगकर्ता सम्मेलन में शामिल नहीं हो सकता।

मेरे पास निम्न कोड है लेकिन यह काम नहीं कर रहा है। बैठक आयोजक कमरे खोल सकता है लेकिन जब उपयोगकर्ता "सम्मेलन में शामिल होने" पर क्लिक करते हैं तो इसमें शामिल नहीं होता है।

// https://github.com/muaz-khan/RTCMultiConnection 

var rmc = new RTCMultiConnection(); 

rmc.userid = "<?php echo $user->fname . ' ' . $user->lname . ' (' . $user->username . ')' ; ?>"; 
rmc.session = { 
    video: true, 
    audio: true, 
    data: true 
}; 

var room_status = 0; //room closed 
$('#open-room').click(function() { 
    // http://www.rtcmulticonnection.org/docs/open/ 
    room_status = 1; //room opened 
    rmc.open(); 
    rmc.streams.mute({video : true}); 
    document.getElementById("on-off-video").style.color= 'red'; 
}); 

$('#join-room').click(function() { 
    if(room_status == 1) { 
     // http://www.rtcmulticonnection.org/docs/connect/ 
     rmc.connect(); 
     rmc.streams.mute({video: true}); 
     document.getElementById("on-off-video").style.color= 'red'; 
    } 
    console.log("Waiting for meeting organizer"); 
}); 

// display a notification box 
window.addEventListener('beforeunload', function() { 
    return 'Do you want to leave?'; 
}, false); 

// leave here 
window.addEventListener('unload', function() { 
    rmc.leave(); 
}, false); 

rmc.onMediaCaptured = function() { 
    $('#share-screen').removeAttr('disabled'); 
    $('#open-room').attr('disabled', 'disabled'); 
    $('#join-room').attr('disabled', 'disabled'); 
}; 

//chat 
rmc.onopen = function (event) { 
    //alert('Text chat has been opened between you and ' + event.userid); 
    document.getElementById('input-text-chat').disabled = false; 
    room_status = 1; 
}; 

//end of chat 
$('#disconnect').click(function() { 
    room_status = 0; //room closed 
    rmc.leave(); 
    setTimeout("location.href = '../';",2000); 
}); 

//to know the stream type 
rmc.onstream = function (e) { 
    if (e.type == 'local') { 
     // alert("the stream is local"); 
    } 
    if (e.type == 'remote') { 
     // alert("the stream is remote"); 
    } 
    if (e.isVideo) { 
     var uibox = document.createElement("div"); 
     uibox.appendChild(document.createTextNode(e.userid)); 
     uibox.className = "userid"; 
     uibox.id = "uibox-" + e.userid.replace(/ |\(|\)/g, ''); 
     document.getElementById('video-container').appendChild(e.mediaElement); 
     document.getElementById('video-container').appendChild(uibox); 
    } 
    else if (e.isAudio) { 
     document.getElementById('video-container').appendChild(e.mediaElement); 
    } 
    else if (e.isScreen) { 
     $('#cotools-panel iframe').hide(); 
     $('#cotools-panel video').remove(); 
     document.getElementById('cotools-panel').appendChild(e.mediaElement); 
    } 

}; 

//removes the div containing the userid of the user who is leaving 
rmc.onleave = function (e) { 
    $('#' + "uibox-" + e.userid.replace(/ |\(|\)/g, '')).remove(); 
}; 
+0

ऐसा लगता है कि room_status $ ('# join-room') के दायरे में नहीं है। इसे वैश्विक बनाने या इसे संदेश भेजने पर विचार करें। –

+0

रुको, वह बेवकूफ था। आप var के साथ घोषित नहीं कर रहे हैं इसलिए यह वैश्विक है। मुझे इसे और अधिक विचार देने की आवश्यकता होगी। –

+1

क्या आप इसे हमेशा कंसोल नंबर में प्राप्त कर रहे हैं? ("आयोजक से मिलने की प्रतीक्षा"); आपको सभी ब्राउज़रों को सूचित करना चाहिए कि रूम_स्टैटस के लिए मान 1 के बराबर है जब कोई कमरा खोलता है। (सभी ब्राउज़रों को एक संदेश उत्सर्जित करें अन्यथा प्रत्येक ब्राउज़र के लिए मूल्य हमेशा 0 होगा)। – ecarrizo

उत्तर

2

ऐसा लगता है कि आपको यहां 3 समस्याएं हैं।

1) सबसे पहले, मुझे लगता है कि आप केवल एक आरटीसीएमल्टीआईकनेक्शन ऑब्जेक्ट का उपयोग कमरे में खोलने और जुड़ने के लिए नहीं कर सकते हैं। आपको 2 अलग-अलग वस्तुएं बनाना है। लेकिन, कमरे को खोलने और जुड़ने के लिए, आपका कोड उसी विंडो में नहीं चलना चाहिए। इसलिए यदि आप इसे एक बार विंडो में खोलने के लिए एक बार खिड़की में चलाते हैं और दूसरी विंडो में इसे शामिल करने में कोई समस्या नहीं है।

इस मामले में आपको एक और महत्वपूर्ण समस्या है। जब आप एक विंडो में कमरे खोलते हैं तो आपका परिवर्तनीय रूम_स्टैटस 1 पर सेट होता है। लेकिन दूसरी विंडो में, room_status अभी भी 0 के बराबर है, इसलिए आप $ (if #) में '(' # join-room ') के अंदर कोड को कॉल नहीं करते हैं। फ़ंक्शन पर क्लिक करें।

यह एक बड़ा सौदा नहीं है, अब, अगर यह सुनिश्चित करने के लिए कि आपका कोड निष्पादित किया गया है (और अपने मूल लक्ष्य के लिए मेरा बिंदु 3 पढ़ें) तो अगर कथन हटा दें।

2) मैं https://github.com/muaz-khan/RTCMultiConnection पर दिए गए सरल उदाहरण के लिए तत्पर: https://jsfiddle.net/c46de0L8/ और यह आप में शामिल होने और कनेक्ट नहीं इस्तेमाल करना चाहिए लगता है। और सबसे ऊपर, आपको 2 उपयोगकर्ताओं को जोड़ने में सक्षम होने के लिए एक चैनल आईडी और एक रूम आईडी का उपयोग करना चाहिए।

तो मैं अपने कोड एक छोटे से बदल सकते हैं और यह अच्छी तरह से काम करने लगता है:

var CHANNEL_ID = "MYCHANNEL-" + window.RMCDefaultChannel; 
var ROOM_ID = "MYROOM"; 
var SESSION = { 
    video: true, 
    audio: true, 
    data: true 
}; 
var USERID = "<?php echo $user->fname . ' ' . $user->lname . ' (' . $user->username . ')' ; ?>"; 

var rmc = undefined; 

var room_status = 0; //room closed 
$('#open-room').click(function() { 
    // http://www.rtcmulticonnection.org/docs/open/ 
    room_status = 1; //room opened 
    rmc = new RTCMultiConnection(CHANNEL_ID); 
    rmc.userid = USERID; 
    rmc.session = SESSION; 
    rmc.open({ 
     dontTransmit: true, 
     sessionid: ROOM_ID 
    }); 
    rmc.streams.mute({video : true}); 
    document.getElementById("on-off-video").style.color= 'red'; 
}); 

$('#join-room').click(function() { 
    //if(room_status == 1) { 
     // http://www.rtcmulticonnection.org/docs/connect/ 
     rmc = new RTCMultiConnection(CHANNEL_ID); 
     rmc.join({ 
      sessionid: ROOM_ID, 
      userid: USERID, 
      session: SESSION 
     }); 
     rmc.streams.mute({video: true}); 
     document.getElementById("on-off-video").style.color= 'red'; 
    //} 
    console.log("Waiting for meeting organizer"); 
}); 

कोड के बाकी अपरिवर्तित रहता है। कैसे सुनिश्चित करें कि कमरे से पहले ही शामिल होने के लिए सक्षम होने के लिए खोला जाता है होना करने के लिए: https://jsfiddle.net/sebdoncker/fjtkvnjq/2/

3) अब आप अभी भी समस्या है:

मैं एक JSFiddle में एक किसी न किसी काम के कोड डाल दिया। मुझे लगता है कि आप इसके लिए रोम आईडी का उपयोग कर सकते हैं। जब एक उपयोगकर्ता एक नया कमरा खोलता है तो आपको एक रूट आईडी उत्पन्न करनी चाहिए। अब, आपको यह ROOM आईडी अपने योजक उपयोगकर्ता (सर्वर संचार द्वारा या किसी अन्य तरीके से अपने एप्लिकेशन आर्किटेक्चर के आधार पर) भेजनी होगी। और चूंकि योजक उपयोगकर्ता के पास ROOM आईडी नहीं है, इसलिए आप शामिल बटन को अक्षम कर सकते हैं।

यह सिर्फ एक लीड है, यह आपके समग्र एप्लिकेशन आर्किटेक्चर पर निर्भर करता है।

संबंधित मुद्दे