GoLang का उपयोग करके एक वेबसर्वर बनाया गया था जो HTML/JS/CSS और छवियों को परोसता है। जब सर्वर ने MP4 वीडियो फ़ाइल प्रदान करने का प्रयास किया, तो वीडियो लोड होने में विफल रहा, केवल वीडियो नियंत्रण दिखा रहा था।
वीडियो फ़ाइलों की जांच करने पर, यह पता चला कि छोटा वीडियो काम करता था जबकि बड़ा वीडियो नहीं था. समस्या वीडियो के आकार और ब्राउज़र के डिफ़ॉल्ट बफ़रिंग व्यवहार से संबंधित थी।
रेंज अनुरोध समर्थन:
एक निश्चित आकार से बड़े वीडियो के लिए, ब्राउज़र को सर्वर की आवश्यकता होती है रेंज अनुरोधों (आंशिक सामग्री सेवा) का समर्थन करने के लिए। यह ब्राउज़र को प्लेबैक के लिए आवश्यक वीडियो के केवल हिस्से को लाने की अनुमति देता है, जिससे पूरी फ़ाइल को मेमोरी में लोड होने से रोका जा सकता है।
इस मामले में, GoLang कोड को रेंज अनुरोधों को संभालने के लिए कॉन्फ़िगर नहीं किया गया था। प्रदान किया गया कार्यान्वयन पूरी फ़ाइल को एक ही प्रतिक्रिया के रूप में प्रस्तुत करता है। परिणामस्वरूप, ब्राउज़र बड़ा वीडियो चलाने में सक्षम नहीं था।
समस्या को हल करने के लिए, निम्नलिखित कदम उठाए गए:
वैकल्पिक रूप से , यदि http.FileServe() को प्राथमिकता नहीं दी जाती है, तो कस्टम रेंज अनुरोध हैंडलिंग लागू की जा सकती है। इसमें प्रतिक्रिया में निम्नलिखित हेडर सेट करना शामिल है:
रेंज अनुरोधों के लिए, सर्वर को 200 ओके के बजाय 206 आंशिक सामग्री का HTTP स्टेटस कोड लौटाना चाहिए।
कस्टम रेंज अनुरोध प्रबंधन निम्नलिखित तरीके से कार्यान्वित किया गया था:
func (vh *viewHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) {
path := r.URL.Path[1:]
data, err := ioutil.ReadFile(string(path))
if err == nil {
var contentType string
if strings.HasSuffix(path, ".mp4") {
contentType = "video/mp4"
size := binary.Size(data)
if size > 0 {
requestedBytes := r.Header.Get("Range")
w.Header().Add("Accept-Ranges", "bytes")
w.Header().Add("Content-Length", strconv.Itoa(size))
w.Header().Add("Content-Range", "bytes " requestedBytes[6:len(requestedBytes)] strconv.Itoa(size-1) "/" strconv.Itoa(size))
w.WriteHeader(206)
}
} else {
w.Header().Add("Content-Type", contentType)
w.Write(data)
}
} else {
log.Println("ERROR!")
w.WriteHeader(404)
w.Write([]byte("404 - " http.StatusText(404)))
}
}
लूपिंग वीडियो:
यह सुनिश्चित करने के लिए कि वीडियो लूप हो, निम्नलिखित तर्क जोड़ा गया था:
if contentType == "video/mp4" {
http.ServeFile(w, r, path)
} else {
w.Header().Add("Content-Type", contentType)
w.Write(data)
}
यह MP4 वीडियो के लिए http.ServeFile() का उपयोग करता है, जो लूपिंग को सही ढंग से संभालता है।
अस्वीकरण: उपलब्ध कराए गए सभी संसाधन आंशिक रूप से इंटरनेट से हैं। यदि आपके कॉपीराइट या अन्य अधिकारों और हितों का कोई उल्लंघन होता है, तो कृपया विस्तृत कारण बताएं और कॉपीराइट या अधिकारों और हितों का प्रमाण प्रदान करें और फिर इसे ईमेल पर भेजें: [email protected] हम इसे आपके लिए यथाशीघ्र संभालेंगे।
Copyright© 2022 湘ICP备2022001581号-3