首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >nginx无法加载静态.mp4。

nginx无法加载静态.mp4。
EN

Stack Overflow用户
提问于 2021-01-14 20:30:49
回答 1查看 307关注 0票数 1

安装程序

  • 我的目标是一种极简的配置,主要建立在默认值之上。
  • 目标是提供10-15,1到3秒钟长,大部分是2-3兆的视频。
  • 我有一只树莓,上面有一张正式的nginx码头图片

我的假设

  • nginx是一个非常强大的工具,它提供了各种各样的优化功能,但是如果我只想提供像上面这样的视频,它就可以做到“开箱即用”。

The Issue

  • 这些视频根本不播放
  • 当我直接访问视频时,我会遇到两种场景:
    • ( a) HTTP 200,然后是一个或多个HTTP206Partials,视频不播放

代码语言:javascript
复制
- b) HTTP 200 followed by Cancelled request, and the video obviously does not play here either 

  • 已经测试了多个视频(默认的移动输出、VLC转换、HandBreak web优化)

nginx (由官方图像提供的默认图)

代码语言:javascript
复制
html {
  sendfile on;
  tcp_nopush on;
  tcp_nodelay on;
  keepalive_timeout 65;
  types_hash_max_size 2048;
  include /etc/nginx/mime.types;
  default_type application/octet-stream;
  gzip on;

  #SSL Settings
  #Logging Settings
}

在mime.types中,我确实有视频/MP4。

静态服务文件

视频位于一个文件夹中,该文件夹被挂载为/usr/share/x

代码语言:javascript
复制
server {
  ...

  location / {
    # Default nginx files
  }

  location ~ \.mp4$ {
    # When I try to use this block, all video request end up being 404s
  }

  location /x/ {
    root /usr/share/;
  }
} 

考虑到这是一个微型应用程序,显然还有其他文件正在处理,而且它们工作得很好。没有问题的位置和路由,只有视频。

初始请求

代码语言:javascript
复制
GET #### HTTP/1.1
Host: ####
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
sec-ch-ua: ####
sec-ch-ua-mobile: ?0
DNT: 1
Upgrade-Insecure-Requests: 1
User-Agent: ####
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Sec-Fetch-Site: none
Sec-Fetch-Mode: navigate
Sec-Fetch-User: ?1
Sec-Fetch-Dest: document
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9,hu;q=0.8,sk;q=0.7
sec-gpc: 1

初始响应

代码语言:javascript
复制
HTTP/1.1 200 OK
Server: nginx/1.14.2
Date: Thu, 14 Jan 2021 19:50:01 GMT
Content-Type: video/mp4
Content-Length: 1620690
Last-Modified: Thu, 14 Jan 2021 19:05:25 GMT
Connection: keep-alive
ETag: "600095f5-18bad2"
Accept-Ranges: bytes
Content-Security-Policy: upgrade-insecure-requests

第二次请求(导致HTTP206)

代码语言:javascript
复制
GET #### HTTP/1.1
Host: ####
Connection: keep-alive
sec-ch-ua: ####
DNT: 1
Accept-Encoding: identity;q=1, *;q=0
sec-ch-ua-mobile: ?0
User-Agent: ####
Accept: */*
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: no-cors
Sec-Fetch-Dest: video
Referer: ####
Accept-Language: en-US,en;q=0.9,hu;q=0.8,sk;q=0.7
sec-gpc: 1
Range: bytes=0-

(有时被取消)部分内容

代码语言:javascript
复制
HTTP/1.1 206 Partial Content
Server: nginx/1.14.2
Date: Thu, 14 Jan 2021 20:03:20 GMT
Content-Type: video/mp4
Last-Modified: Thu, 14 Jan 2021 19:05:25 GMT
Connection: keep-alive
ETag: "600095f5-18bad2"
Content-Range: bytes 0-1620689/1620690
Content-Length: 1620690
Content-Security-Policy: upgrade-insecure-requests

最后的想法和问题

我是一个高级前端开发人员。远没有先进的后端或DevOps知识,但我认为我做得很好,为自己。然而,在过去的2-3天里,我花了更多的时间尝试提供我的覆盆子的小视频。没有成功。

  1. 这真的是nginx配置问题吗?
  2. 如果是的话,我遗漏了什么?我该怎么做呢?
  3. 如果这不是nginx,还能是什么?

更新(1):cURL

我选择测试的文件是1620720字节。我试着在cURL上看我是否能得到同样的工作视频。

curl https://domain.tld/x/nope.mp4 --output ~/retrieved.mp4

这个新视频是1620690字节。比原来的(gzip?)少30?而且它似乎被腐蚀了。我不能在我的机器上播放视频。

在Firefox中查看视频时,他们似乎做对了:

EN

回答 1

Stack Overflow用户

发布于 2021-01-15 13:00:51

所以。显然,当您跳过某些配置步骤时,一种更像黑客马拉松的方法并不是真正有益的。当您想要快速而肮脏地做事情时,由于时间是最重要的,您仍然应该将.mp4s设置为git中的二进制文件。(更好地使用LFS)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65726457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档