ac黑话:6分钟诅咒

6分钟诅咒

6分钟诅咒有两个含义。一个含义是2009年新浪将视频切割点由21分钟调整到6分钟,从而导致AcFun超过6分钟的新投稿全部不能完整播放。另一个含义是新浪外链的视频所经常出现的逢6的整数倍分钟,就会出现的加载速度慢乃至加载时间无限长的现象。

2009年5月1日,新浪将视频切割点由21分钟调整到6分钟,从而导致AcFun超过6分钟的新投稿全部不能完整播放,这就是所谓的“6分钟诅咒”。

造成“6分钟诅咒”的原因有两个:

  1. AcFun当时的播放器不支持完整播放切割的视频;
  2. 新浪无法完美切割H.264编码的视频,切割后6分钟以后部分将损坏。

2009年5月底,AcFun的播放器升级,解决了第一个问题(限player和player1)。2010年2月(可能是),新浪方面技术升级,解决了第二个问题。2010年5月,AC播放器取消playera和playerf,“6分钟诅咒”问题得到基本解决。

“6分钟诅咒”又指AcFun当年使用外链投稿机制时,新浪外链的视频所经常出现的逢6的整数倍分钟,就会出现的加载速度慢乃至加载时间无限长的现象。这种“6分钟诅咒”现象在当时一直存在,甚至变得更加恶化。这种现象之所以存在,是由于当时新浪在处理比较长的视频时,通常会将其切割成6分钟左右的片段,并存放在不同的服务器中。这样视频就被截成了好几段。虽然一个服务器会存储整个视频,但是对于一个特定的IP,新浪会用一个确定的顺序让确定的多个服务器为IP提供视频。这样如果该IP访问其中一个服务器很慢,或者无法连接,那么就会出现载入速度慢的现象。

当时为了应对这种问题,解决方法是通过修改host文件,使原本指向的无法访问的服务器的地址强制地指向能正常访问的地址。具体方法如下[1]

  1. 获取渣浪播放文件表。通过查看AcFun或者Bilibili视频页面的源代码判断视频是否是新浪外链。如果是,找到视频对应的新浪视频号。如果找到的视频号为AAAAAAAA,那么打开v.iask.com/v_play.php?vid=AAAAAAAA来查看视频的播放文件表,也就是视频被分割成的文件段。通常情况下,这些视频段所在的域名具有这样的格式:xx.dhot.v.iask.com,其中xx一般所在省份的缩写。
  2. 测试各服务器的连接速度,找出问题服务器。试着下载一下文件表中的各视频段。能下载说明连接无问题;不能下载就说明这个服务器很可能不能连接。假设有一域名是BB.dhot.v.iask.com的服务器不能连接,那么进行下一步。
  3. 将问题服务器的域名接在一个正常服务器的IP地址上(“移花接木”)。随意找出一个连接正常的服务器的域名,用ping或者nslookup等工具找出这个正常域名的IP。假设该IP是CCC.CCC.CCC.CCC,则在host文件的末尾加上一行:CCC.CCC.CCC.CCC BB.dhot.v.iask.com。Windows系统下host文件的地址是%WinDir%\system32\drivers\etc\hosts,Linux系统下是/etc/hosts
  4. 清理缓存,重启浏览器。

摘自《对于6分钟诅咒的研究》[2]

以前一直以为6分钟诅咒是因为单纯的用户带宽不稳定造成的。昨天仔细看了ACPlayer的源代码,发现这其实是从娘胎里面带出来的老毛病。

在VideoHandler类中,以前的开发人员(已经不可考了)错误的拼写了一个单词,导致一个判断永远不会发生,这导致了用户在网络情况不佳的情况下,出现所谓的整段漂移即“6分钟诅咒”。这个问题可以追溯到2010年版本的播放器,而且在新版播放器中,使用了FLEX SDK,Adobe改动了相关代码,使得这一问题更加放大。

有意思的是,当年川姬的PAD也出现了这一个手误,甚至出错前后代码注释完全一样,以及后来的MukioPlayer也存在同样的问题。原因应该是PAD使用了老版本播放器的部分代码。

以上内容参考自原AcFun Wiki条目:6分钟诅咒

[1] a 我是写脚本的. 新浪6分钟诅咒破解方法. bilibili吧, 2010-11-28.
[2] a lurnar1992. https://tieba.baidu.com/p/1556992551(已失效). 百度贴吧.
  • ac黑话/6分钟诅咒.txt
  • 最后更改: 2023/01/13 10:41
  • A135(2)