mandyk
(AmandaK)
1
大家好,
我们注意到在 3.6.0.beta3-latest 版本上,iPhone 和 macOS 上的 Safari 用户在尝试播放上传的 .mp4 (H.264) 视频时会出现无限旋转的加载图标。这些视频在最近之前都可以正常播放(我不确定 Discourse 的哪个版本是它们还能正常工作的最后一个版本)。
看起来 Safari 会发出一个 GET 请求来获取视频的起始字节(Range: bytes=0-1)(例如 /uploads/default/original/1X/44395933ccadf546b1b1ce65b742e24f900b33fa.mp4),该请求返回 200,但由于某些原因失败了,这些原因并未在 JS 控制台或网络检查器中显示(仅以红色高亮显示,没有错误消息)。如果直接将相同的 URL 粘贴到浏览器中,用户可以成功下载完整视频并播放。
macOS 上的 Firefox 和 Chrome 播放视频没有问题。Android 上的浏览器似乎也没有遇到问题。
视频文件很小(在 10MB 左右)。我们没有使用 S3 进行上传。
其他人能否证实或确认他们在使用 iPhone/Safari 播放视频时没有遇到问题?我还能进行哪些其他诊断来查明问题所在?
1 个赞
Adubs
(Adubs)
3
我在论坛上也遇到了类似的问题,但在这里测试相同的文件似乎可以正常工作。只有 iOS/Safari 用户受到影响。WEBM 容器中的一些视频可以正常播放,但大多数 mp4、mov 等格式的视频则不行。
2 个赞
Les79
4
您好,我最近也遇到了一些问题,并在 @tsk 发起的帖子中发表了评论,但该帖子已被删除。我原以为问题出在 mp4/av1 编码的视频上,因为我们的论坛上 webm/vp9 视频可以播放,但现在看来,对于 Safari 用户来说,问题似乎不止于此。
Adubs
(Adubs)
5
为了好玩,我已确认我使用的是最新版本,尽管我在提交记录中没有看到任何迹象表明它会影响 Apple 用户。

我的配置正在使用本地存储进行上传。大多数主题都受信任级别限制,但我们在这里的公共类别中进行测试:
Adubs
(Adubs)
7
@Les79 我已将此视频上传到两个论坛作为测试。
您能否确认 pixelspace safari 播放线程视频对您不起作用,但这里的视频可以?
1 个赞
Les79
8
是的,此处发布的视频在我的 iPhone 13 和 MacBook Pro M3 的 Safari 浏览器上均可正常播放。它在 PixelSpace 论坛上无法正常播放。
2 个赞
Falco
(Falco)
9
此视频是 H.264 格式的 MP4 文件,应该可以在所有运行 Discourse 的浏览器上播放。鉴于它在这里可以运行,但在您的实例上不行,我怀疑是您的实例配置有误。
您是否在 Discourse 之上运行了额外的反向代理?我注意到此实例上的一些标头在标准安装中不存在,因此我想了解您做了哪些配置。
1 个赞
Adubs
(Adubs)
11
我确实将此容器用作反向代理
我曾考虑这可能是部分原因,但配置并未更改,据我所知,这是 3.6.0-beta2 的一个新问题。在重建后,我开始收到苹果用户的投诉。与 @mandyk 类似,我不记得我们之前使用的是什么版本。

Discourse 中是否有我应该评估的特定设置?
1 个赞
Falco
(Falco)
12
不是 Discourse 的问题,而是代理服务器的问题。
不幸的是,当人们在 Discourse 之上添加其他东西时,我们无法实际覆盖所有无限的可能性配置,这就是为什么我们提供带有反向代理配置的 Discourse 标准安装包。
可能缺少一个 Nginx 配置段,但您需要对此进行研究。
1 个赞
mandyk
(AmandaK)
13
另外,我确认此线程中发布的视频在 Safari 中播放正常。
不确定这是否相关,但我发现的一个区别是此线程中的视频是从 S3 提供的。当 Safari 发出第一个 range 请求时,S3 返回 HTTP 206,这似乎是正确的。Pixelspace 实例和我的实例都不使用 S3,而且看起来 Discourse 返回的是 HTTP 200(因为请求包含 Range: bytes=0-1 标头,这似乎不正确)。
Falco
(Falco)
14
mandyk
(AmandaK)
15
已确认 discourse-on-a-pi5.falco.dev 上的视频在我使用的 Safari 浏览器上无法正常工作。同样,我可以看到视频请求返回的是 200 而不是 206。
编辑:此外,似乎响应试图返回整个视频,即使指定了 Range: bytes=0-1。我怀疑范围请求被忽略了,而 Safari 对此很敏感。
进一步编辑:这可能意味着除了 Safari 之外,其他浏览器在处理大型视频时的高效跳转功能也已损坏,因为它们需要在下载完整个视频后才能跳转。
3 个赞
Falco
(Falco)
17
mandyk
(AmandaK)
18
是的,那个可以了!我在这里也看到了 HTTP 206。
1 个赞
Falco
(Falco)
19
看起来是我们的默认nginx配置出现了回归,感谢你的报告@mandyk
1 个赞
mandyk
(AmandaK)
20
感谢 @Adubs 发布了用于比较的反驳!也感谢 Discourse 团队提供了一个出色的工具。
5 个赞
Adubs
(Adubs)
22
所以,为了增加一点乐趣,我将我的 app.yml 复制到了 app2.yml,更改了 url 和几个目录,现在我们有了运行稳定分支的 testfor.pixelspace.xyz。
https://testfor.pixelspace.xyz/t/safari-playback-test/8
我的用户在此处通过同一个代理确认它有效。
编辑:我现在看到问题得到了确认。抱歉没有早点想到尝试这个。感谢您的见解 @mandyk
我一个人是无法自己解决这个问题的。
3 个赞