来自 facebook.com 和其他网站的视频嵌入失败

我的一位成员发布了 这个 Facebook 链接 standalone,但 Discourse 尝试解析它时失败了。

让我把同一个链接单独放在一行试试:

如果您在上面没看到,显示的内容如下:

这个问题也出现在一些成人网站上,有成员尝试分享链接;我快速测试了一下,粘贴了来自不同地方的多个视频 URL,其中几个主要成人网站也无法正常工作。

这似乎是一个相对严重的 bug,因为它影响了 Facebook 内容的嵌入。我的(技术不太精通的)成员喜欢分享 Facebook 上的链接,部分原因是因为 Facebook 非常普及和通用。:frowning: 此外,如果有人将那个 URL 发布到消息中,它会被解析成无法工作的形式,而原始 URL 也会消失。因此,即使您想访问该 URL 也做不到……它完全不可用了。

那么……是否有可能告诉 Discourse 不要尝试自动嵌入这些域名的视频?我在寻找类似“将包含这些词的 URL 列入黑名单以禁止嵌入媒体”的设置,这样我就可以添加这些域名。(或者,也许可以建立一个白名单,只允许 YouTube 和 Vimeo 等已批准的 URL,以预防未来与新网站相关的问题。)

如果没有这样的设置,我能否在论坛上快速采取一些措施来解决这个问题?

Firefox(桌面版)

在我的桌面电脑上,Mac 系统使用 Firefox 75……我遇到了灰色的失败提示框。

Safari(桌面端)

在 Safari 上,视频的第一帧会显示,但点击“播放”按钮后,没有任何反应。

Chrome(桌面端)

在 Mac 桌面端使用 Chrome v81……情况相同……你能看到视频,但它从未播放。

iPhone - Safari iOS

与 Chrome 或 Safari(桌面版)相同……视频已显示但无法播放。

Discourse 官方 不支持 Facebook 视频的 onebox 功能。

您可以参考以下内容:

2 个赞

我们能否替换 onebox 的输出,使其不会生成损坏的播放器?我想我们应该让它恢复到之前的工作方式 之前

3 个赞

是的,我认为这非常关键。如果 Discourse 不支持 Facebook 视频,对我来说问题不大。但当成员粘贴链接(这种情况并不罕见)却导致错误消息,并且原始链接消失时,这就成了大问题。 我的论坛中现在就有好几条这样的消息。我们管理员正在看到这些问题时手动修复它们,但显然这并不是一个理想的解决方案。

我认为这是一个严重的漏洞,主要是因为 Facebook(以及我测试过的其他视频网站)非常流行。

我很乐意找到快速修复方案……如果我能提供帮助,请告诉我?

4 个赞

这里最快的解决方法是将 www.facebook.com 添加到设置项:onebox domains blacklist(Onebox 域名黑名单)。这样,Onebox 就不会尝试嵌入 Facebook 的视频了。

3 个赞

这里的变化是 Facebook 更新了 OpenGraph 元数据,添加了受限过多的视频链接:

<meta property="og:video:secure_url" content="https://video.fjai1-2.fna.fbcdn.net/v/t42.9040-2/10000000_626864624535070_4779621138076532736_n.mp4?_nc_cat=107&amp;_nc_sid=985c63&amp;efg=eyJybHIiOjM1MiwicmxhIjoxMzI5LCJ2ZW5jb2RlX3RhZyI6InN2ZV9zZCJ9&amp;_nc_oc=AQkUihmrvyg1wU9qH_NjqkLUzl0XSYJGE6JREtPH7jxKc1aXEIuGLSbauCEPM-hI-DCuJRacr1hCB6HHZre1lxto&amp;rl=352&amp;vabr=196&amp;_nc_ht=video.fjai1-2.fna&amp;oh=3fd1d5e14f27d55bc0d2a91d4714148b&amp;oe=5EA6E533" />

上述视频链接显示错误:Bad URL timestamp:man_facepalming:

即使是 og:image 标签中的链接也显示相同的错误。

除了视频标题外,我们没有任何信息可以显示在 Facebook 的 onebox 中。我认为我们应该将 onebox 硬编码为屏蔽 Facebook 视频链接。

6 个赞

太好了,谢谢……这完美解决了问题。

顺便提一下,这个问题不仅出现在 Facebook 上;曾有成员尝试发布 xvideos.com 视频页面的链接,也失败了。(不适宜内容警告!那是一个非常典型的成人网站!)我用其他几个网站测试了一下,发现情况相同。

1 个赞

对于 Facebook,我们能否使用 twitter:player 属性并将其用于 iframe?它似乎是一个永不过期的 URL:

Screenshot 2020-04-27 at 12.26.42

(Facebook 提供损坏的 Open Graph 数据,却能正常提供 Twitter 数据,这真是极具讽刺意味:joy:)

或者,也可以采用与 Instagram 相同的逻辑:显示一张带有 :play_or_pause_button: 按钮的大型缩略图,该按钮可点击链接。

4 个赞

我试过,但 twitter:imagetwitter:player 标签的链接失效了。它们在你那边能正常工作吗?

1 个赞

@pnoeric示例视频 中,我看到:

<meta name="twitter:player" content="https://www.facebook.com/plugins/video.php?height=222&width=400&href=https://www.facebook.com/dccarmen/videos/10222567743521148/">

似乎能正常工作

但如果您发现某些链接无法正常工作,那么我们最好避免使用这种方式。

1 个赞

对于同一个链接,我看到的是:

https://www.facebook.com/plugins/video.php?height=222&amp;width=400&amp;href=https://www.facebook.com/dccarmen/videos/10222567743521148/

请注意 &amp; 导致了 URL 断裂……将其改为 & 即可解决问题。所以,我们可以绕过这个问题。

twitter:image 链接仍然失效(例如:示例)。

因此,我们有两个选择:

  1. 使用 twitter:player 链接嵌入 Facebook 视频
  2. 在 Onebox 中将 Facebook 视频列入黑名单,并以普通链接形式显示

@codinghorror,你更倾向于哪一个?

3 个赞

我们可以试试,但能确定这些链接不会过期吗?

我认为链接不会过期,因为该 URL 本质上是指向一个 Facebook 插件,它会根据我们传递给 href 参数的视频链接嵌入相应的视频。

https://www.facebook.com/plugins/video.php?height=222&width=400&href=https://www.facebook.com/dccarmen/videos/10222567743521148/

因此,我们可以使用 iframe 来嵌入 Facebook 视频。

1 个赞

不,该修复仅针对 Facebook。

请注意,嵌入视频失败通常表明问题出在您尝试嵌入的网站上。就 Facebook 而言,是因为其限制过严,仅允许在特定时间内播放视频。

我们通常只为非常流行的网站(例如:Instagram)绕过此类错误,以便更广泛的社区受益。如果网站不够流行,而您又需要在自己的网站上嵌入其内容,则建议创建自定义插件,为该网站添加自定义的 Onebox 引擎。

2 个赞

好的。

嗯,有没有办法对白名单中的域名进行设置,让 onebox 尝试嵌入这些域名?如果没有,那么我们似乎面临以下情况:

  1. 我运营一个社区论坛,成员喜欢链接到包含视频的网站。(这些可能是任何网站,当然……我们目前并不清楚具体是哪些。)

  2. 如果某个网站的代码存在错误导致嵌入无法正常工作,Discourse 会破坏嵌入效果(看起来很糟糕),更糟糕的是,它会移除原始链接,导致其他人无法看到发帖人原本想分享的内容。

难道步骤 2 不应该改为“如果某个网站的代码存在错误导致嵌入无法正常工作,Discourse 停止尝试嵌入,而是直接让链接正常显示?”

我无法通过黑名单来解决这个问题,因为我不知道哪些域名受到了影响,而且任何网站未来都可能出现类似问题。就像我们之前在这里看到的 Facebook 的情况一样。

当然可以修复——只需将您发现问题的域名加入黑名单即可。这并非不可能。

2 个赞

好的,没问题。我不是很清楚这个问题的严重程度;如果受此影响的域名不多,手动处理确实是个很好的解决方案。

我仍然认为 Discourse 应该以更优雅的方式处理格式错误的第三方数据,而不是“生成巨大的错误信息并删除 OP 帖子中最重要的内容”——我想你大概也这么认为。:slight_smile: 不过目前来说,列入黑名单是一个可以接受的变通方案。谢谢。

2 个赞