1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| http.HandleFunc("/api/video", func(w http.ResponseWriter, r *http.Request) { videoFile, err := os.Open("videos/video2.mp4") if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return } defer videoFile.Close()
fileInfo, err := videoFile.Stat() if err != nil { http.Error(w, err.Error(), http.StatusInternalServerError) return }
w.Header().Set("Content-Type", "video/mp4")
w.Header().Set("Content-Length", strconv.FormatInt(fileInfo.Size(), 10))
rangeHeader := r.Header.Get("Range") if rangeHeader != "" { start, _, err := parseRange(rangeHeader, fileInfo.Size()) if err != nil { http.Error(w, "Invalid range request", http.StatusRequestedRangeNotSatisfiable) return }
videoFile.Seek(start, 0)
http.ServeContent(w, r, "", fileInfo.ModTime(), videoFile) } else { http.ServeContent(w, r, "", fileInfo.ModTime(), videoFile) } }) http.ListenAndServe(":9999", nil)
|