2012-01-25 28 views
6

में एचटीएमएल 5 वीडियो स्रोत अनुरोध को अवरुद्ध करना मेरे पास एक ऐप है जो वेबव्यू में एक वीडियो तत्व के साथ एक HTML5 पृष्ठ दिखाता है। वीडियो काम करने के तरीके को समझने में मुझे कुछ समय लगा, लेकिन आखिर में मैं एक सैमसंग गैलेक्सी टैब (एंड्रॉइड 3.1) पर वेबव्यू में एम्बेडेड वीडियो चलाने में सफल रहा। मैं वीडियो टैग के लिए निम्न कोड का प्रयोग किया:एंड्रॉइड वेबव्यू

<video controls poster="img/poster.jpg" height="240" width="360"> 
     <source src="video/BigBuck.m4v"> 
     <source src="video/BigBuck.theora.ogv" type="video/ogg"> 
     <source src="video/BigBuck.webm" type="video/webm"> 
     HTML5 video not supported. 
</video> 

वीडियो तत्व कई स्रोतों है और अब मैं चयनित वीडियो स्रोत (और प्रारूप) पर कब्जा करने से पहले वीडियो खेलने के लिए शुरू होता है कोशिश कर रहा हूँ। जब मैं play बटन पर क्लिक करता हूं, तो मुझे वेब सर्वर पर आने वाली वीडियो फ़ाइल के लिए HTTP अनुरोध दिखाई देता है जहां वीडियो फ़ाइलें संग्रहीत होती हैं, लेकिन मैं ऐप-साइड पर इस अनुरोध को अवरुद्ध करने में सफल नहीं हूं।

मैंने यह देखने के लिए कई विधियों को देखा कि वीडियो फ़ाइल का अनुरोध वहां से गुजरता है, लेकिन मैंने इसे किसी भी में पास नहीं देखा।

  • shouldOverrideUrlLoading(WebView view, String url) में WebViewClient में केवल प्रारंभिक HTML5 पृष्ठ अनुरोध पास होता है।
  • में shouldInterceptRequest (WebView view, String url) में मैं केवल प्रारंभिक एचटीएमएल 5 पेज अनुरोध और वीडियो पोस्टर छवि के लिए अनुरोध को देख रहा हूं, लेकिन वीडियो फ़ाइल के लिए नहीं।
  • onShowCustomView(View view, CustomViewCallback callback) मेरे WebChromeClient में केवल तभी कॉल किया जाता है जब मैं पहले से ही खेल रहा हूं, लेकिन जब मैं play बटन पर क्लिक करता हूं तो HTML5 पृष्ठ पर पूर्णस्क्रीन नियंत्रण बटन पर क्लिक करता हूं। (क्या वास्तव में इस विधि का उद्देश्य है?)

किसी को भी, जहां मैं वीडियो फ़ाइल के लिए अनुरोध कैप्चर कर सकते हैं या किसी को भी मुझे समझा सकता है क्या वास्तव में होता है जब मैं पर प्ले बटन क्लिक किसी अन्य विधि के लिए एक सुझाव है करता है वीडियो तत्व?

+0

क्या आप वीडियो टैग के लिए उपयोग किए गए कोड को पोस्ट कर सकते हैं। मैंने हाल ही में उस के साथ निपटाया है और 'चाहिएऑवर्राइड यूआरएल लोडिंग (वेब ​​व्यू व्यू, स्ट्रिंग यूआरएल)' मेरे लिए काम किया है (हालांकि जिंजरब्रेड में)। –

उत्तर

3

मैंने जावास्क्रिप्ट दृष्टिकोण का उपयोग कर समस्या हल की। जब HTML पृष्ठ लोड होता है, तो वीडियो मेटाडेटा लोड होने पर loadedmetadata ईवेंट निकाल दिया जाता है। उस पल से आप वीडियो तत्व के currentSrc विशेषता से चयनित वीडियो स्रोत प्राप्त कर सकते हैं और इसे JavascriptInterface के माध्यम से Android मूल कोड पर पास कर सकते हैं।

नीचे HTML5 वीडियो तत्व का कोड है। "एंड्रॉइड" वह नाम है जिसके द्वारा JavascriptInterface जावास्क्रिप्ट में पहुंचा जा सकता है।

<video poster="image/poster.jpg" height="240" width="360" onloadedmetadata="Android.interceptPlay(this.currentSrc);"> 
    <source src="video/BigBuck.m4v"> 
    <source src="video/BigBuck.webm" type="video/webm"> 
    <source src="video/BigBuck.theora.ogv" type="video/ogg"> 
    HTML5 video not supported. 
</video> 

JavascriptInterface

private class JavaScriptInterface { 
    Context mContext; 

    /* Instantiate the interface and set the context */ 
    JavaScriptInterface(Context c) { 
     mContext = c; 
    } 

    public void interceptPlay(String source) { 
     // do something 
    } 
} 

और अंत का कोड गतिविधि निर्माण समय में WebView को JavascriptInterface जोड़ने

mWebView.addJavascriptInterface(new JavaScriptInterface(this), "Android"); 

यह महत्वपूर्ण है loadedmetadata घटना को पकड़ने के लिए onloadedmetadata विशेषता जोड़कर एचटीएमएल 5 वीडियो तत्व के लिए और पृष्ठ लोड पर एक ईवेंट श्रोता कोके माध्यम से पंजीकृत करके नहीं 10 क्योंकि फास्ट नेटवर्क पर loadedmetadata ईवेंट श्रोता पंजीकृत होने से पहले निकाल दिया जा सकता है (http://dev.opera.com/articles/view/consistent-event-firing-with-html5-video देखें)

+0

आपके समाधान के लिए धन्यवाद, एरिका; यह वैसे ही दिखता है जो मुझे चाहिए। – FractalBob

+0

मैंने बहुत जल्द बात की। मुझे प्ले बटन को पहली बार दबाए जाने की आवश्यकता है (मैं एक बार वीडियो डाउनलोड कर रहा हूं)। क्या आप ऐसा करने का एक आसान तरीका देखते हैं? – FractalBob

+0

क्या आपको कभी इसके लिए "* असली *" समाधान मिला? मुझे वास्तव में यूआरएल को अवरुद्ध करने की आवश्यकता है क्योंकि मेरे मामले में घटना कभी ट्रिगर नहीं की जाएगी। –

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