首页 >后端开发 >Golang >为什么我的 GoLang 网络服务器无法在 Chrome 中播放 MP4 视频?

为什么我的 GoLang 网络服务器无法在 Chrome 中播放 MP4 视频?

Susan Sarandon
Susan Sarandon原创
2024-11-02 11:27:02414浏览

Why can't my GoLang webserver play MP4 videos in Chrome?

使用 GoLang HTTP Web 服务器提供视频 (MP4)

问题

使用 GoLang 开发的 Web 服务器显示静态内容(HTML、JavaScript、CSS、和图像)成功。然而,当尝试显示 MP4 视频时,浏览器无法加载它。

诊断

问题源于视频文件的大小。 Chrome 会缓冲内容,但仅针对大型视频进行部分缓冲。当视频超过一定阈值时,Chrome 期望服务器支持部分内容服务(范围请求)。

在提供的代码中,自定义文件服务实现不处理范围请求,导致 Chrome 拒绝播放视频。

解决方案

要解决此问题,请使用 http.ServeFile() 来提供视频文件。 http.ServeFile() 自动处理 Range 请求并设置适当的响应标头,包括 Content-Type 和 Accept-Ranges: Chrome 播放视频所需的字节标头。

使用 http.ServeFile()

修改提供的代码如下:

<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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn