подавать видео с go джином - PullRequest
0 голосов
/ 03 августа 2020

Я пишу сервер api для загрузки и обслуживания видео и изображений с помощью go -gin framework. Я загрузил свое видео на другой хост, и оно сработало

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 с помощью хрома, он не может ничего загрузить из браузера (он не может получить)

Может кто-нибудь объяснить мне, что я делаю неправильно?

Обновление:

Возможно, я пропустил этот контент:

enter image description here

введите описание изображения здесь

Вот мои 2 пакета http, когда я вызываю GET запрос

1 Ответ

1 голос
/ 03 августа 2020

Есть 2 возможных объяснения вашей проблемы.

  1. Это не проблема, потому что в вашем браузере нет функции для запуска видео.
  2. (Это более возможное объяснение ) Вы не установили правильный заголовок для потокового видео, поэтому браузер не может распознать или не знает, что делать с этим URL.

Например, я получаю из этого видео , когда вы проверяете заголовок ответа, он должен отображать

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

Мое предложение - использовать http.ServeFile , который поддерживает запросы диапазона. См. Связанные вопросы: GoLang http веб-сервер предоставляет видео (mp4) и Как обслуживать частичное содержимое http с помощью Go? .

Обновлено

После проверки Gin StaticFS Godo c, я не думаю, что он поддерживает заголовок Range.

После теста

Итак, я попробовал ваш код и ошибся, Gin StaticFS может обслуживать диапазон контента, например видео .

Вот мой снимок экрана, протестировали его с помощью Chromium, и он работает хорошо:

load test.mp4

And my conclusions: There is a problem with your Chromium or your codecs or your video codecs not supported on your OS (I don't know what is your OS), check this MP4 не воспроизводится на Chrome версии 27.0 :

из-за Chrome удаление поддержки h264, на некоторых машинах видео mp4, закодированные с его помощью, либо не будут работать (выдает ошибку парсера при просмотре на вкладке Firebug / Network - в соответствии с проблемой, представленной здесь), либо Cra sh браузер, в зависимости от настройки кодирования

это не согласовано - это полностью зависит от кодеков, установленных на компьютере э-э - хотя я не сталкивался с этой проблемой на своей машине, у нас был один в офисе, где возникла проблема (и поэтому мы использовали его для тестирования)

он мог бы делать с настройками Quicktime / divX (рассматриваемая машина имела более старую версию Quicktime, чем моя родная - мы не хотели терять наше тестирование p c, поэтому мы не обновляли его).

...