2016-11-01 18 views
21

मैं वेब एप्लिकेशन बना रहा हूं जो वेबआरटीसी का उपयोग करता है। यह डेस्कटॉप ब्राउज़र पर बस ठीक काम करता है। हालांकि, एक छोटे से स्मार्टफोन वेब ब्राउज़र पर, अवांछित घटनाएं हैं:वेबआरटीसी डेटा कैसे रखें चैनल ब्राउज़र ब्राउज़र में निष्क्रिय टैब खोलें?

एंड्रॉइड के लिए एंड्रॉइड और फ़ायरफ़ॉक्स के लिए मोबाइल वेब ब्राउज़र क्रोम पर टैब स्विच करते समय, .createDataChannel के साथ बनाया गया एक खुला Webrtc डेटा चैनल बंद हो जाता है। dataChannel.onclose इवेंट हैंडलर निकाल दिया गया है। डेटा चैनल को बंद करने से कैसे रोकें? यदि यह संभव नहीं है, तो पूरे सिग्नलिंग चरण को पुनरारंभ किए बिना डेटा चैनल को फिर से खोलना संभव है?

भी ऐसा होता है के साथ <input type="file">

मैं stackoverflow थोड़ा ब्राउज़ किया है और पाया है वहाँ अन्य चीजें हैं जो कटौती कर रहे हैं/requestTimeOut और setInterval तरह निष्क्रिय टैब में धीमा एक फ़ाइल के लिए ब्राउज़।

क्या पृष्ठभूमि में खुले रहने के लिए इसे मजबूर करने के लिए कोई स्वायत्तता आवश्यक है।

+2

बस अंधेरे में एक शॉट: एसडीपी और आईसीई उम्मीदवारों को बचाने की कोशिश करें और सिग्नलिंग चरण फिर से करें, लेकिन वास्तविक सिग्नलिंग के बजाय सहेजे गए डेटा के साथ। – Kevin

+0

कृपया यहां देखें: https://www.webrtc-experiment.com/ –

+0

क्या आप 500 अंक प्राप्त करने का प्रयास करने के लिए कृपया –

उत्तर

0

सफारी में कोई घटना नहीं है जो आपको यह पता लगाने की अनुमति देती है कि टैब को रोका जा रहा है या नहीं, हालांकि आप नियमित रूप से दोहराए जाने वाले फ़ंक्शन को डालकर कुछ समय बाद टैब को फिर से खोल सकते हैं, जैसे कि यह एक साधारण उदाहरण है -

 var beforeTime = new Date.getTime(); 
     var getTime = function() { 
     var timeNow = new Date.getTime       
     if (timeNow - beforeTime > 1000) { 
      console.log("Woken Up)"; 
    } 
     beforeTime = nowTime; 
     setTimeout(getTime, 500); 
} 

आप एक कुकी के लिए datachannel के डेटा को बचाने के लिए और अगर यह समय इस समारोह में निर्दिष्ट के बाद पुन: खोलता है (10 सेकंड) तो आप डेटा कुकी

से फिर से लोड कर सकता है window.onunload इस्तेमाल कर सकते हैं उम्मीद है कि यह मदद की, mukund2003

+2

आपने कुछ और जवाब दिया। –

1

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

2

WebRTC के mozilla प्रलेखन के अनुसार ..

चैनल की स्थिति से निपटने में परिवर्तन

दोनों हमारे स्थानीय और दूरस्थ साथियों एक भी विधि का उपयोग चैनल के कनेक्शन की स्थिति में बदलाव का संकेत ईवेंट प्रबंधित करने के।

स्थानीय साथियों के एक खुली या बंद घटना, handleSendChannelStatusChange() विधि कहा जाता है का अनुभव करता है जब:

function handleSendChannelStatusChange(event) { 
if (sendChannel) { 
    var state = sendChannel.readyState; 

    if (state === "open") { 
    messageInputBox.disabled = false; 
    messageInputBox.focus(); 
    sendButton.disabled = false; 
    disconnectButton.disabled = false; 
    connectButton.disabled = true; 
    } else { 
    messageInputBox.disabled = true; 
    sendButton.disabled = true; 
    connectButton.disabled = false; 
    disconnectButton.disabled = true; 
    } 
} 

}

चैनल के राज्य "खुला" करने के लिए बदल गया है, कि है कि हम को इंगित करता है दोनों साथियों के बीच संबंध स्थापित करना समाप्त कर दिया है। उपयोगकर्ता इंटरफ़ेस को संदेश भेजने के लिए टेक्स्ट इनपुट बॉक्स को सक्षम करके संगत रूप से अद्यतन किया जाता है, इनपुट बॉक्स पर ध्यान केंद्रित करने के लिए ताकि उपयोगकर्ता तुरंत "लिखने" और "डिस्कनेक्ट" बटन सक्षम करने के लिए टाइप करना शुरू कर सके, अब वे उपयोग योग्य हैं, और "कनेक्ट" बटन को अक्षम करना, क्योंकि कनेक्शन की आवश्यकता होने पर इसकी आवश्यकता नहीं है।

यदि राज्य "बंद" हो गया है, तो कार्रवाई का विपरीत सेट होता है: इनपुट बॉक्स और "भेजें" बटन अक्षम कर दिया जाता है, "कनेक्ट" बटन सक्षम होता है ताकि उपयोगकर्ता नया कनेक्शन खोल सके। ऐसा करने की इच्छा है, और "डिस्कनेक्ट" बटन अक्षम है, क्योंकि कोई कनेक्शन मौजूद नहीं होने पर यह उपयोगी नहीं है।

तो handleReceiveChannelStatusChange साथ खेलने की कोशिश
यह उदाहरण दूरस्थ सहकर्मी, दूसरे हाथ पर, स्थिति परिवर्तन की घटनाओं, पर ध्यान नहीं देता कंसोल के लिए घटना लॉग इन करने के लिए छोड़कर:

function handleReceiveChannelStatusChange(event) { 
     if (receiveChannel) { 
       console.log("Receive channel's status has changed to " + 
       receiveChannel.readyState); 
    } 
} 

handleReceiveChannelStatusChange () विधि इनपुट पैरामीटर के रूप में प्राप्त होती है जो घटना होती है; यह एक RTCDataChannelEvent होगा।

+0

मुझे पहले से ही यह पता है। मेरे प्रश्न में मैंने कहा कि डेटाChannel.onclose इवेंट हैंडलर निकाल दिया गया है जिसका मतलब है कि मेरे पास पहले से ही एक हैंडल है ReceiveChannelStatusChange जो सही चीज करता है। मैं बंद होने की घटना को कैसे रोक सकता हूं? –

+0

जो पेस्ट कॉपी करते हैं :), मुझे लगता है कि 500 ​​बहुत अधिक था –

+0

500 से कोई फर्क नहीं पड़ता :)) मुझे आशा है कि आप हल हो जाएंगे! – CristiC777

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