Http 如何为html5视频标签流式传输视频文件

Http 如何为html5视频标签流式传输视频文件,http,go,video-streaming,Http,Go,Video Streaming,我想知道在Go中传输视频文件(mpg4/avi-或任何其他格式)的最佳方式是什么。可能,我希望能够使用一个简单的标记来播放它 我尝试过使用以下代码播放著名的大巴克兔文件: package main import ( "fmt" "log" "net/http" "os" "time" ) func serveHTTP(w http.ResponseWriter, r *http.Request) { video, err := os.Open(

我想知道在Go中传输视频文件(mpg4/avi-或任何其他格式)的最佳方式是什么。可能,我希望能够使用一个简单的标记来播放它

我尝试过使用以下代码播放著名的大巴克兔文件:

package main

import (
    "fmt"
    "log"
    "net/http"
    "os"
    "time"
)

func serveHTTP(w http.ResponseWriter, r *http.Request) {
    video, err := os.Open("./bunny.avi")
    if err != nil {
        log.Fatal(err)
    }
    http.ServeContent(w, r, "bunny.avi", time.Now(), video)
    defer video.Close()
}

func main() {
    http.HandleFunc("/", serveHTTP)
    err := http.ListenAndServe(":8080", nil)
    if err != nil {
        fmt.Println(err.Error())
    }
}
但是当在我的浏览器中加载html页面时,不会播放任何内容,实际上只会触发一个http请求,并且只向页面发送一个包含206个部分内容的响应。

html页面正文中包含以下代码:

<video width="320" height="240" controls autoplay>
    <source src="http://localhost:8080">
    Your browser does not support the video tag.
</video>

您的浏览器不支持视频标记。

谢谢大家!

你的go代码看起来不错,这让我觉得这可能是你的视频有问题。 html5通常不支持avi,有关html5容器/编解码器的更多详细信息,请参阅

我会尝试使用已知的工作视频。例如:


甚至可以简化您的代码,只使用
http.ServeFile
,尽管视频服务(范围请求)的重要部分在
ServeContent
中。

我刚刚运行了您的代码并使用了最新版本的Chrome。我的视频是一个MP4文件,包含H264视频和AAC音频(这两种编解码器都非常常见,并且得到广泛支持)


您应该将视频转换为浏览器支持的格式。请参阅MDN文档以查看支持的格式,并注意其中的“浏览器兼容性”部分。

可能重复感谢Marc您说得对视频有问题!使用ServeContent非常简单,但我想知道是否有什么东西可以让我了解当前正在读取文件的哪个部分,这样我就可以从服务器端提取一些有关播放的统计信息。