用 go gin 提供视频

我正在编写一个 api 服务器,用于通过 go-gin 框架上传和提供视频和图像。我已将我的视频上传到另一个主机,并且它有效


router := gin.Default()


    //config := cors.DefaultConfig()

    //config.AllowAllOrigins = true


    routerConfig := cors.Config{

        AllowAllOrigins:  true,

        AllowMethods:     []string{"GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"},

        AllowHeaders:     []string{"X-Requested-With", "Authorization", "Origin", "Content-Length", "Content-Type"},

        AllowCredentials: false,

        MaxAge:           12 * time.Hour,

    }


    router.Use(cors.New(routerConfig))


    router.StaticFS("/public", http.Dir("static"))


    err := router.Run(":5000")

    if err != nil {

        panic(err)

    }

当我尝试http://localhost:5000/public/{image_url}.png通过铬访问时。它加载到浏览器。但是当我http://localhost:5000/public/{video_url}.mp4通过 chromium 访问时,它无法从浏览器加载任何内容(它无法接收)


有人可以为我解释我做错了什么吗?


哔哔one
浏览 218回答 1
1回答

手掌心

您的问题有两种可能的解释。这不是问题,因为您的浏览器没有运行视频的任何功能。(这是更可能的解释)您没有为流式视频设置正确的标头,因此浏览器无法识别或不知道如何处理该 URL。例如我从这个视频中得到,当你检查响应头时,它应该显示content-length: 1570024 content-range: bytes 0-1570023/1570024 content-type: video/mp4我的建议是使用支持服务范围请求的http.ServeFile 。请参阅相关问题,GoLang http webserver 提供视频 (mp4)和How to serve http partial content with Go?.更新检查Gin StaticFS Godoc后,我认为它不支持 Range 标头。测试后所以我尝试了你的代码,但我错了,Gin StaticFS 可以提供像 video 这样的内容范围。这是我的屏幕截图,已经使用 Chromium 对其进行了测试,并且效果很好:我的结论是:您的操作系统不支持您的 Chromium 或编解码器或视频编解码器存在问题(我不知道您的操作系统是什么),请检查此MP4 未在 Chrome 版本 27.0 上播放:由于 Chrome 删除了对 h264 的支持,在某些机器上,用它编码的 mp4 视频要么不起作用(在 Firebug/Network 选项卡下查看时抛出 Parser 错误 - 与此处提交的问题一致),要么使浏览器崩溃,具体取决于编码设置它不一致 - 它完全取决于计算机上安装的编解码器 - 虽然我的机器上没有遇到这个问题,但我们确实在发生问题的办公室里有一个(因此我们使用这个进行测试)它可能与 Quicktime / divX 设置有关(有问题的机器的 Quicktime 版本比我的本机版本旧 - 我们不想丢失我们的测试电脑,所以我们没有更新它)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go