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

时间:2017-12-09 00:31:27

标签: http go video-streaming

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

我尝试使用以下代码播放着名的Big Buck Bunny文件:

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 Partial内容的响应被发送到该页面。 Response

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

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

谢谢!

2 个答案:

答案 0 :(得分:2)

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

我会尝试使用已知的工作视频。例如:https://www.quirksmode.org/html5/videos/big_buck_bunny.mp4

甚至可以简化您的代码并使用http.ServeFile,但视频服务(范围请求)的重要部分仍然在ServeContent

答案 1 :(得分:0)

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

您应该将视频转换为支持的浏览器格式。请参阅this MDN文档以查看支持的格式并注意&#34;浏览器兼容性&#34;部分内容。

相关问题