bilibili-helper / bilibili-helper-o

哔哩哔哩 (bilibili.com) 辅助工具,可以替换播放器、推送通知并进行一些快捷操作
https://bilibili-helper.github.io
Mozilla Public License 2.0
3.83k stars 455 forks source link

在使用html播放器时,跳跃播放时常会卡 #67

Closed swj1442291549 closed 8 years ago

swj1442291549 commented 9 years ago

在使用html播放器时,跳跃播放时常会卡住

tkizm1 commented 8 years ago

html5 同样播放卡

fqj1994 commented 8 years ago

其实是这个issue:https://code.google.com/p/chromium/issues/detail?id=532569 因为security原因从Chrome 45开始禁止了html5视频多次请求时被redirect到不同的服务器。 跳跃的时候新的请求可能会被CDN重定向到不同的节点。

要fix的话,估计得ajax请求一下同时用插件劫住网络看下第一次redirect到哪里,然后

如果你能忍受安全风险(不知道风险是啥,因为对应的security issue还没公开)和超长编译chrome的时间,可以自己修改chrome并编译。media/blink/buffered_data_source.ccbool BufferedDataSource::CheckPartialResponseURL 函数改成 return true;

zacyu commented 8 years ago

@fqj1994 https://github.com/zacyu/bilibili-helper/blob/master/background.js#L156-L176 我之前已经解决这个问题了, 所以以为目前导致播放卡住的应该只是网络链路原因.

fqj1994 commented 8 years ago

抱歉没看你的commit log。不过还没 release 吧?因为刚才我自己的chrome nightly build又(真的是)因为这个原因卡住了。

zacyu commented 8 years ago

@fqj1994 是的, 我今天会 release v0.7.5 包括这个修改. 顺便 XMLHttpRequest 是不能截住 redirect 的, 原因是根据 W3C 的标准, 这个过程时不能被拦截的, 即使通过扩展.

fqj1994 commented 8 years ago

所以你发了个HEAD请求去看redirect到哪里了。

话说 @zacyu 是自己调出来 read error 是跟 redirect 有关还是去 crbug.com 找 issue 了?

by the way(和这个插件无关),最新的canary build,可以在视频的服务端设置Access-Control-Allow-Origin的header,并在video tag上加crossorigin这个attribute。然而插件并不能改Access-Control-Allow-Origin。。这个是个给CDN维护者的解决办法。

fqj1994 commented 8 years ago

不过看reporter的发issue时间很可能指的就是这个问题毕竟大家用的都是release的版本。

zacyu commented 8 years ago

@fqj1994 当时是突然发现乐视源的 HTML5 就都不能播放了, 于是到处去翻, 总之在 crbug 那边最后找到的. 不过扩展是是可以改 Access-Control-Allow-Origin 的吧? 还是最新的 canary build 禁止了?

fqj1994 commented 8 years ago

同乐视+1。。。不过我直接去file了一个bug。然后看着流量调了一下觉得和redirect有关然后他们confirm了确实是故意disable掉的。

插件不能改Access-Control-Allow-Origin,但可以改其他的header,很早以前就是了,除非启动chrome的时候带着--disable-web-security这种危险的flag。

fqj1994 commented 8 years ago

http://crbug.com/530928 当初file的bug。然后被另外我刚才前面写的那个issue替代掉了 (逃。。

zacyu commented 8 years ago

@fqj1994 关于 Access-Control-Allow-Origin 这边有一个实例 https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi?hl=en 以及十分感谢你这边提供的相关情报.

fqj1994 commented 8 years ago

然而那个实例右边description的描述里面要求你启动chrome的时候带上那些选项。

zacyu commented 8 years ago

@fqj1994 我对描述中 Hint

Hint Same behavior you can get just using chrome flags [http://www.chromium.org/developers/how-tos/run-chromium-with-flags]

chrome --disable-web-security

or

--allow-file-access-from-files --allow-file-access --allow-cross-origin-auth-prompt

的理解是, 使用这个扩展你可以的到和使用 flag 同样的效果.

fqj1994 commented 8 years ago

好吧。我看错了。我的锅。 不过现在插件取到重定向之后地址的做法会不会遇到CDN地址expire的问题? 不过加header和attribute的玩法现在chrome的插件能match到特定标签产生的流量吗?

fqj1994 commented 8 years ago

以及这个issue应该可以close掉了今天release之后?

zacyu commented 8 years ago

是的, 目前确实会遇到这个问题. 但是考虑到一般视频的实际播放长度影响并不会很大. 加 header 和 attribute 的方法其实我目前也同时采用了, 根据 hostname 判断.

fqj1994 commented 8 years ago

很抱歉,没能找到你加header的方案的commit。

zacyu commented 8 years ago

@fqj1994 https://github.com/zacyu/bilibili-helper/blob/master/background.js#L502-L519

fqj1994 commented 8 years ago

好吧。。我看见这个commit msg就直接跳过了。。bilimac是啥?

zacyu commented 8 years ago

@fqj1994 http://bilimac.eqoe.cn/ 抱歉 commit-msg 中没有特别注明, header 这个和 bilimac 是两个修改, 但是因为是之前在本地改完后没及时 push 上去, 所以在一个 commit 里.

fqj1994 commented 8 years ago

又一个弹幕转ass的播放器。。然而我这里mpv总是没法用range-request来seek这种网络的视频。直接console打一个说视频没法seek。。。

zacyu commented 8 years ago

Resolved in v0.7.5 release.