使用 GoLang 开发的 Web 服务器显示静态内容(HTML、JavaScript、CSS、和图像)成功。然而,当尝试显示 MP4 视频时,浏览器无法加载它。
问题源于视频文件的大小。 Chrome 会缓冲内容,但仅针对大型视频进行部分缓冲。当视频超过一定阈值时,Chrome 期望服务器支持部分内容服务(范围请求)。
在提供的代码中,自定义文件服务实现不处理范围请求,导致 Chrome 拒绝播放视频。
要解决此问题,请使用 http.ServeFile() 来提供视频文件。 http.ServeFile() 自动处理 Range 请求并设置适当的响应标头,包括 Content-Type 和 Accept-Ranges: Chrome 播放视频所需的字节标头。
修改提供的代码如下:
<code class="go">func (vh *viewHandler) ServeHTTP(w http.ResponseWriter, r *http.Request) { path := r.URL.Path[1:] log.Println(path) if contentType == "video/mp4" { http.ServeFile(w, r, path) } else { data, err := ioutil.ReadFile(string(path)) if err == nil { w.Header().Add("Content-Type", contentType) w.Write(data) } else { log.Println("ERROR!") w.WriteHeader(404) w.Write([]byte("404 - " + http.StatusText(404))) } } }</code>
此实现将正确提供 MP4 视频,确保它们可以在 Chrome 中播放。
以上是为什么我的 GoLang 网络服务器无法在 Chrome 中播放 MP4 视频?的详细内容。更多信息请关注PHP中文网其他相关文章!