2016-03-02 11 views
7

मुझे क्रोम का उपयोग कर वीडियो में ढूंढने में समस्याएं आ रही हैं।क्रोम के साथ HTML5 वीडियो में खोज

किसी कारण से, कोई फर्क नहीं पड़ता कि मुझे क्या करना, video.seekable.end(0) हमेशा 0.

जब मैं video.currentTime = 5 फोन है console.log(video.currentTime) के बाद, मैं यह हमेशा 0 है, जो वीडियो पुनर्स्थापित करने के लिए लगता है देखते हैं।

मैंने एमपी 4 और वीपी 9-आधारित वेबएम प्रारूप दोनों की कोशिश की है, लेकिन दोनों ने एक ही परिणाम दिए हैं।

और अधिक परेशान करने वाला यह है कि फ़ायरफ़ॉक्स पूरी तरह से सब कुछ चलाता है। क्या क्रोम के बारे में कुछ खास है जिसके बारे में मुझे पता होना चाहिए?

यहाँ मेरी कोड (जो केवल फ़ायरफ़ॉक्स में काम करता है) है:

 <div class="myvideo"> 
     <video width="500" height="300" id="video1" preload="auto"> 
      <source src="data/video1.webm" type="video/webm"/> 
      Your browser does not support videos. 
     </video> 
     </div> 

और यहाँ जावास्क्रिप्ट है:

var videoDiv = $(".myvideo").children().get(0) 
videoDiv.load(); 
    videoDiv.addEventListener("loadeddata", function(){ 
    console.log("loaded"); 
    console.log(videoDiv.seekable.end(0)); //Why is this always 0 in Chrome, but not Firefox? 
    videoDiv.currentTime = 5; 
    console.log(videoDiv.currentTime); //Why is this also always 0 in Chrome, but not Firefox? 
    }); 

ध्यान दें कि बस बुला videoDiv.play() वास्तव में सही ढंग दोनों ब्राउज़र में वीडियो खेलने है।

इसके अलावा, मूवी फ़ाइल पूरी तरह से लोड होने के बाद, videoDiv.buffered.end(0) दोनों ब्राउज़रों में सही मान भी देता है।

उत्तर

12

यह मुझे कुछ समय लिया यह पता लगाने की ...

समस्या निकला सर्वर साइड किया जाना है। मैं अपनी सभी वीडियो-फाइलों की सेवा के लिए जेटी के एक संस्करण का उपयोग कर रहा था। जेटी की सरल विन्यास byte serving का समर्थन नहीं करती थी।

फ़ायरफ़ॉक्स और क्रोम के बीच का अंतर यह है कि फ़ायरफ़ॉक्स पूरी वीडियो फ़ाइल डाउनलोड करेगा ताकि आप इसे देख सकें, भले ही सर्वर http code 206 (partial content) का समर्थन न करे। दूसरी ओर क्रोम पूरी फ़ाइल को डाउनलोड करने से इंकार कर देता है (जब तक कि यह वास्तव में छोटा नहीं है, लगभग 2-3 एमबी की तरह)।

तो HTML5 वीडियो के currentTime पैरामीटर प्राप्त करने के लिए क्रोम में काम करने के लिए, आप एक सर्वर http कोड 206

का समर्थन करता है कि किसी को भी लिए और ने इस समस्या हो रही जरूरत है, तो आप दोगुना कर्ल के साथ अपने सर्वर config जाँच कर सकते हैं:

curl -H Range:bytes=16- -I http://localhost:8080/GOPR0001.mp4 

यह कोड 206 लौटना चाहिए। यदि यह कोड 200 लौटाता है, तो क्रोम वीडियो की तलाश नहीं कर पाएगा, लेकिन ब्राउज़र में वर्कअराउंड के कारण फ़ायरफ़ॉक्स होगा।

और एक अंतिम टिप: आप उपयोग कर सकते हैं NPM http सर्वर आंशिक सामग्री का समर्थन करता है कि एक स्थानीय फ़ोल्डर के लिए एक सरल http सर्वर पाने के लिए:

npm install http-server -g 

और इसे चलाने के लिए एक स्थानीय फ़ोल्डर सेवा करने के लिए:

http-server -p 8000 
+0

मुझे एक ही समस्या है, लेकिन केवल मैक पर। क्रोम तलाशने से इनकार करता है, लेकिन फ़ायरफ़ॉक्स काम करता है। मैं अपनी मशीन पर एक http 206 संगत सर्वर चला रहा हूं और मैं नेटवर्क लॉग में 206 अनुरोध देख सकता हूं। शायद मुझे इसके लिए SO पर एक नया प्रश्न पूछना चाहिए। –

+0

क्या आप कह रहे हैं कि क्रोम में काम करने की सुविधा के लिए हमें केवल 206 के रूप में वापसी कोड भेजने की आवश्यकता है? – vbNewbie

+0

नहीं, मैं कह रहा हूं कि 206 यह जांचने का एक तरीका है कि आंशिक सामग्री को सर्वर से पुनर्प्राप्त किया जा सकता है। यदि आप अपना स्वयं का सर्वर लिख रहे हैं, तो आपको प्रोटोकॉल के साथ अनुपालन करना होगा। क्रोम इस जानकारी का उपयोग स्ट्रीमिंग से पहले पूरे वीडियो को डाउनलोड करने के लिए नहीं करता है। यह कुशल है। – Tovi7

0

आपके पास वीडियो टैग के लिए 3 संभावनाएं हैं: एमपी 4, ओजीजी, वेबएम।

सभी प्रारूप सभी ब्राउज़रों में काम नहीं करते हैं।

यहां, मैं सोच रहा हूं कि वेबएम फ़ायरफ़ॉक्स में काम करता है लेकिन क्रोम नहीं, इसलिए आपको MP4 फ़ाइल का संदर्भ देने वाले दूसरे स्रोत टैग सहित एमपी 4 और वेबएम फ़ाइलों के लिए दोनों वैकल्पिक प्रारूपों की आपूर्ति करनी चाहिए।

उदा। src = "data/video1.mp4" type = "video/mp4"

प्रासंगिक संस्करण स्वचालित रूप से ब्राउज़र द्वारा चुना जाएगा।

+0

जैसा कि सवाल में बताया गया है, मैंने वास्तव में क्रोम में एमपी 4 का उपयोग करने की कोशिश की, और इससे कोई फर्क नहीं पड़ता। साथ ही, यह मुझे आश्चर्यचकित करेगा कि वेबम क्रोम में काम नहीं करेगा, क्योंकि Google पूरे प्रारूप के पीछे मुख्य चालन बल है। – Tovi7

+0

क्षमा करें - आप दोनों गिनती पर सही हैं - मुझे पहले प्रश्न पढ़ना चाहिए - और हाँ, क्रोम निश्चित रूप से वेबएम से निपटना चाहिए। ऐसा लगता है जैसे इयान डेवेलिन का सही जवाब है। एक त्वरित तरफ, मुझे MP4 फ़ाइलों के साथ समस्याएं आई हैं जो H264 प्रारूप में नहीं हैं ... –

0

मुझे एक ही समस्या थी। मैं एक वीडियो पर एक अंतिम घटना के लिए सुन रहा था और वीडियो के बीच में वर्तमान समय को लगातार लूप करने के लिए सेटिंग कर रहा था। यह सफारी या क्रोम में काम नहीं कर रहा था।

मुझे लगता है कि सफारी/क्रोम में एक बग हो सकती है जहां प्लेहेड स्थिति गुण तब तक उपलब्ध नहीं हैं जब तक कि मीडिया वर्तमान में नहीं चल रहा हो।

मेरा कामकाज वीडियो अंत से पहले और वास्तव में इसे समाप्त करने की अनुमति देने से पहले मेरे लूप को शुरू करना था।

पहले प्लेबैक शुरू करके अपना परीक्षण करने का प्रयास करें और फिर यह देखने के लिए अपनी नीलामी चलाएं कि यह सफारी क्रोम में काम करता है या नहीं।

+0

यह एक अच्छा सुझाव है, लेकिन दुर्भाग्य से यह मेरी विशेष समस्या के लिए मदद नहीं करता है। हालांकि धन्यवाद! – Tovi7

1

यदि आप loadeddata के बजाय canplaythrough की प्रतीक्षा करते हैं, तो यह काम करता है।

this codepen example देखें।

+0

मैंने कोशिश की, और मुझे संपत्ति के बारे में भी पता नहीं था। महान सुझाव, लेकिन दुर्भाग्य से यह मेरे मामले को ठीक नहीं किया। मैंने हालांकि समस्या को ठीक करने का प्रबंधन किया था, लेकिन यह एक सर्वर साइड समस्या साबित हुआ ... मैंने आपके जवाब को ऊपर उठाया क्योंकि मैंने कुछ नया सीखा :-) – Tovi7

+0

क्या आपने पहले से ही अपनी जेटी कॉन्फ़िगरेशन सेट की है क्योंकि आपके सुझाव का उपयोग किया गया था मेरे लिए काम नहीं – vbNewbie

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