【问题标题】:serve video with go gin用 go gin 提供视频
【发布时间】:2020-11-23 01:33:05
【问题描述】:

我正在编写一个 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 时。它加载到浏览器。但是当我通过 chromium 访问http://localhost:5000/public/{video_url}.mp4 时,它无法从浏览器加载任何内容(无法接收)

谁能帮我解释一下我做错了什么?

更新:

也许我错过了这个内容:

这是我调用 GET 请求时的 2 个 http 包

【问题讨论】:

    标签: go go-gin


    【解决方案1】:

    您的问题有两种可能的解释。

    1. 这不是问题,因为您的浏览器没有任何运行视频的功能。
    2. (这是更可能的解释)您没有为流式视频设置正确的标头,因此浏览器无法识别或不知道如何处理该 URL。

    例如我从这个video 得到,当你检查响应头时,它应该显示

    content-length: 1570024
    content-range: bytes 0-1570023/1570024
    content-type: video/mp4
    

    我的建议是使用支持服务范围请求的http.ServeFile。查看相关问题,GoLang http webserver provide video (mp4)How to serve http partial content with Go?

    更新

    检查Gin StaticFS Godoc后,我认为它不支持Range header。

    测试后

    所以我尝试了您的代码,但我错了,Gin StaticFS 可以提供视频等内容范围

    这是我的截图,已经使用 Chromium 进行了测试,效果很好:

    我的结论是:您的 Chromium 或您的编解码器或您的操作系统不支持您的视频编解码器存在问题(我不知道您的操作系统是什么),请查看MP4 not playing on Chrome version 27.0

    由于 Chrome 删除了对 h264 的支持,在某些机器上,使用它编码的 mp4 视频要么无法正常工作(在 Firebug/Network 选项卡下查看时引发解析器错误 - 与此处提交的问题一致),要么导致浏览器崩溃,具体取决于根据编码设置

    它不一致 - 它完全取决于计算机上安装的编解码器 - 虽然我的机器上没有遇到这个问题,但我们确实在发生问题的办公室里有一个(因此我们使用了这个用于测试)

    这可能与 Quicktime / divX 设置有关(该机器的 Quicktime 版本比我的本机版本旧 - 不过我们不想丢失我们的测试电脑,所以我们没有更新它)。

    【讨论】:

    • 感谢您回答我的问题。你能再检查一下我的问题吗?
    • 嗨,我会尝试模拟这个并更新我的答案 a.s.a.p.
    • 检查我编辑的答案,检查你的操作系统上支持的编解码器,用互联网上的其他静态视频链接测试铬,并尝试更换你的浏览器
    • 感谢您的支持。但我的问题实际上可能来自我上传的视频。我不知道为什么,但是当我更新其他文件时,它就可以工作了。
    • 因为在此之前我已经使用 opencv 对视频进行编码
    猜你喜欢
    • 2021-03-15
    • 2017-10-16
    • 2015-06-07
    • 2011-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    相关资源
    最近更新 更多