当我更改时间位置时,Facebook 视频会冻结

当我更改时间位置时,Facebook 视频会冻结

我在 Facebook 的视频上遇到了一个奇怪的问题。我可以完美地开始播放视频,但如果我从 0.10 跳到 0.30,视频就会卡住:它不会继续播放。我在 YouTube 等其他视频平台上没有遇到过这个问题,我的

我已经在 Google 上搜索过该问题,但只找到了一些相关的问题。我尝试了以下方法:

  • 尝试了其他浏览器,但都存在此问题。(Chrome、Edge、Firefox。)
  • 禁用浏览器的所有插件
  • 禁用浏览器的硬件加速
  • 重新安装浏览器
  • 重新安装操作系统(Windows 10 Pro,64 位):全新安装,无升级

正如你所看到的,我对此非常恼火,甚至格式化了我的整个设置甚至没有奏效。因为它是跨浏览器的,我想知道这是 Windows 问题、Windows 更新问题还是 Facebook 问题。我还没有找到任何有完全相同问题的人,所以我很困惑。有什么帮助吗?

更新:截至今天(2017 年 6 月 25 日),这个问题对我来说已经消失了。

答案1

经过几个小时的调试,我找到了罪魁祸首。看来这确实是 Facebook 的部分推出/AB 测试。

更准确地说,这是一面名为禁用重复播放请求视频播放器实验它会加载到您个人资料的页面源代码中。设置为该选项后,true您需要在更改时间之前暂停视频,否则视频会冻结/挂起。

至于解决方案,没有简单的解决方案。它似乎用在闭包中,所以没有简单的方法来改变它。至少从我看到/测试的情况来看。

我能绕过它的唯一方法是更换https://www.facebook.com/rsrc.php/v3iTQQ4/yd/l/fb_LT/JTeC8QI2Wlf.js稍后编辑:脚本名称/位置经常更改,我添加了一个教程来帮助您找到正确的脚本)来自 Facebook 的脚本并借助绕过文件检查的扩展程序加载定制版本的脚本:if (c('VideoPlayerExperiments').disableDuplicatePlayingRequest && this.isState('playing')) return;

如果有人对该扩展感兴趣,它被称为资源覆盖,但使用起来并不是那么简单。你需要一个服务器来托管修改后的 js 文件和一些 Header 规则来绕过 CORS 和 CSP。

附言我创建了一个社区问题在这里以便从 Facebook 获得一些答案。任何人都可以通过投票(或在移动设备上点赞)来提供帮助。

PS2:好的,要真正解决这个问题,您需要使用 Chrome 并按照以下步骤操作:

  1. 进入 FB 并登录。搜索所有 js 源以查找该标志禁用重复播放请求。如果你不知道怎么做,你可以使用本教程

  2. 找到包含该文件的文件后,使用{}按钮(Pretty Print),然后将文件中的全部内容复制到文本编辑器。转到包含类似内容的行if (c('VideoPlayerExperiments').disableDuplicatePlayingRequest && this.isState('playing')) return;,然后删除或注释它。现在您需要保存此文件并将其上传到服务器。我无法共享我的文件,因为 FB 可能会认为这违反了条款,所以您必须自己执行此操作。记住该文件的公共访问 URL。

  3. 安装资源覆盖来自 Chrome 商店的扩展程序

  4. 打开扩展程序的选项。在 Tab URL 中输入*facebook.com*

  5. 添加更改标头规则。在For:输入中https://www.facebook.com*输入。现在进入Edit headers。我们将只使用响应标头,因此请确保只使用第二部分。为Content-Security-Policy和添加2个设置标头规则X-Content-Security-Policy。现在我们需要将您的服务器添加到 FB 使用的现有策略中。为此,请返回 facebook 页面并进入开发控制台 > 网络选项卡。选择其中一个 .js 文件请求。在响应标头中,您将看到content-security-policy。将之后的整个内容复制:到文本编辑器中。它应该以开头default-src...。现在找到blob:;script-src并在其后添加您用于托管 js 文件的域。例如xyz.com*.xyz.com(如果您使用子域)。确保在其前后留出空格,以免影响现有的策略字符串。现在使用这一新行并将其放入扩展的设置标头字段中的 2 个值字段中。它们都应该相同。现在我们需要另一个设置标头规则,Access-Control-Allow-Origin其值为*。单击关闭返回主菜单。

  6. 再添加一条更改标头规则。这次我们将使用它来确保您的域也具有正确的标头。在字段中For:输入您修改后的文件在网络上可访问的确切链接。最好是 https。使用 http 或本地文件可能会导致问题。现在进入规则的更改标头部分。我们也将在这里使用响应部分。在预设中,确保选择该Allow outside content选项以使其自动为您添加 2 条规则。在这 2 条规则之后,我们需要一条设置为 的标头规则,Access-Control-Allow-Origin其值为https://www.facebook.com。不要单击关闭并返回主菜单。

  7. 最后一步是用您修改过的文件替换 FB js 文件。为此,请添加 URL -> URL 规则。添加From:步骤 (1) 中的文件。另外需要注意的是,此链接会定期更改,因为 Facebook 倾向于每 1-3 天更新一次。当您注意到视频再次开始冻结时,您也需要更改它。您可以按照步骤 (1) 获取它的新链接。现在,To:您需要在字段中输入修改后文件的链接。最后一件事是检查所有这 3 条规则是否都设置为ON。就是这样,视频应该可以像以前一样再次播放。

PS3:您可以找到在此处保存扩展规则。您需要将xyz.co和替换https://xyz.co/modified.js为您自己的名称。它们各出现 2 次。之后,确保包含 的文件链接disableDuplicatePlayingRequest正确。

答案2

我遇到了和你一样的问题,但对我来说,即使是 YouTube 视频也会中途停止播放。
为了解决这个问题,我首先安装了虚拟盒然后是 Ubuntu 16.04。安装并设置后,我运行tcpdump(在 YouTube 上观看视频时)并在WireShark检查
数据包后,我发现我的网卡处于中途丢弃数据包由于某种奇怪的原因,即使 NIC 驱动程序是最新的。
但为了试用,我重新安装了驱动程序并再次设置了网络接口。
我想它以某种方式起作用了,因为从那以后我再也没有遇到过这个问题。
可能想试试!

答案3

我认为您在进一步隔离此问题时没有考虑足够多的问题。我过去也见过类似的事情。还有其他一些需要注意的事情:

  • 上游的代理服务器可能导致了这种情况。如今,缓存的数量比您预期的要多得多。我知道很多小公司使用 memcache、nginx 和 squid 之类的东西;其他公司使用更昂贵且集成的代理/WAN 加速解决方案,如 BlueCoat 和 Riverbed;大型 IT 公司使用基于 WAN 的缓存解决方案,如 Akamai。这实际上只是冰山一角……如果配置和运行良好,它们完全透明,可以大大提高网络性能。但是,当它们工作得不太好时,您最终会看到非常奇怪的东西,很难诊断,例如这种情况。确定它是否归结于代理服务器的唯一方法是尝试更改您的代理服务器、重新配置它或尝试根本不使用代理服务器。如果这是在您的本地网络中,这很容易修复。如果它在您的网络之外,那就是一个完全不同的问题。我曾经与一些公司合作,我们在国际网络上推广大规模轨道,但我们仍然很难获得帮助来诊断,更不用说克服这样的问题了
  • 这也可能是某个地方的网络配置或性能问题。我经常不时切换网络,这意味着我可以第一时间了解你遇到的问题。在某些网络上,视频甚至无法缓冲,而其他网络上则不允许我单独移动时间标记,等等...我能解决这个问题的唯一方法是事先下载视频,然后通过 VLC 播放(有很多工具,例如浏览器扩展和命令行实用程序,例如 youtube-dl)。这引出了我的下一个观点。理想情况下,一个组织应该有多个备份连接或备用 ISP(具有单独的主干网),以防你必须处理这样的问题,但如果你只是想测试,我想你可以简单地使用 3G/4G 连接进行测试,看看它在两个连接上的行为是否一致(或者尝试将系统带回家检查问题是否仍然存在)。我也想弄清楚这是否与 Facebook 本身有关。例如,它是否仅限于较大的视频、较小的视频、较低质量的视频、较高质量的视频、可能存储在特定数据中心的视频等... 要诊断此问题,请运行数据包跟踪器,然后在 IP 地址上运行跟踪路由以找出路径。使用 whois 信息获取有关地理区域的信息,并将其缩小到特定的数据中心。如果这太难,请下载视频以获取主机的 URL,然后对其运行 whois 以缩小地理位置和数据中心的范围。查看它是否与网络相关的另一种方法是尝试通过 VPN,例如 Tor 网络(尝试 Tor 浏览器包)

https://www.torproject.org/download/download-easy.html.en

  • 需要注意的一件事是,如果你曾经需要诊断这样的问题,通过正常的支持热线联系 Facebook 等公司的某个人可能会很困难。如果你认识某个人,这个人又认识某个人,等等,那就容易多了……这样你就可以绕过一线支持人员,他们有时可能是承包商,他们所知道的并不比他们被告知的多,而且实际上做不了那么多,因为那不是他们的工作
  • 这可能部分归因于缓存,但实际上我认为这与问题的整个性能方面有关
  • 我也见过在处理低于标准的硬件时出现此类问题。例如,我知道使用基于 Atom 的上网本来访问 LinkedIn 几乎是不可能的,因为它严重依赖于在客户端执行的 JavaScript 代码。视频网站也存在同样的性能问题(无法缓冲或移动时间标记)。不过,Core I3 以上处理器的任何产品都不会出现此问题……话虽如此,我看到你使用的是 Windows 10,这意味着你的 IT 预算不太可能受到过度限制
  • 因为很明显这可能归结于原始性能,所以我不会排除与软件驱动程序、操作系统、编解码器和软件配置有关的问题。我会尝试尽可能接近地运行它(软件和硬件方面),我见过你尝试过,但我也会看看是否有其他更好的优化或更新的驱动程序,提升操作系统性能的方法等等……我还会尝试摆弄硬件,并尝试从网络的其他地方拆下零件,看看这是否会改变情况
  • 如果涉及到公开和私人资料,我认为你可能有点太早排除了。我猜加载私人页面和公开页面的代码是不同的(出于个性化的原因)。这可能会导致性能略有差异。查看代码和网站。注意它有多少依赖于 JavaScript。可能有点类似于我的 LinkedIn 问题。我猜这是包括上述几点在内的多种问题的组合(如果你想进一步调试,请打开浏览器开发人员调试工具(Opera 中的 Dragonfly 就是一个很好的例子)。它将为你提供所有元素的加载时间以及相对大小以及实际加载的代码)

相关内容