我想知道在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内容的响应被发送到该页面。
html页面在正文中包含以下代码:
<video width="320" height="240" controls autoplay>
<source src="http://localhost:8080">
Your browser does not support the video tag.
</video>
谢谢!
答案 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;部分内容。