V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
flyhaozi
V2EX  ›  分享创造

[用户脚本] 强制 Twitter 网页版播放最高画质视频

  •  
  •   flyhaozi ·
    yuhaofe · 2020-08-14 20:22:07 +08:00 · 6868 次点击
    这是一个创建于 1562 天前的主题,其中的信息可能已经有所发展或是发生改变。

    由于 Twitter 不支持手动调节视频画质,再加上谜一般的画质选择规则,至少我自己在使用 Twitter 时大部分情况下看到的视频都是渣画质。于是我就写了个很简单的脚本来让 Twitter 强制播放最高画质的视频。

    Greasyfork | Github

    使用

    1. 首先需要一个用户脚本管理器,比如Tampermonkey
    2. 使用上面的链接安装脚本
    3. 安装 Block Service Workers (Chrome) 或者 Service Worker Control (Firefox) 等扩展来取消 Twitter 的Service Worker并且阻止其再注册
    4. 重新打开 Twitter 网页,如果脚本加载成功,网页右下角会出现"HD"标志,控制台也会在视频加载时输出相关的信息

    限制

    只有 Twitter 的 Service Worker 没有注册的时候可以加载正常使用本脚本,取消 Service Worker 的注册以后 Twitter 页面的加载速度会变慢。Greasyfork 上其他针对 twitter.com 的脚本也都存在这个问题。

    原理

    Imgur

    Twitter 网页版是使用HLS来播放视频的。对一个视频的请求会返回一个 master playlist,其中包含多个不同画质 /编码的视频 index,网页根据网络、屏幕分辨率等条件来选择要播放的画质。

    脚本通过修改返回的 master playlist 、删除其中的低画质 index 来确保 Twitter 只能选择最高画质。

    改进

    我对 Service Worker 不太了解,不知道有没有办法可以在 Twitter 注册了 Service Worker 的情况下使用用户脚本,希望有大佬可以交流分享。

    另外取消 Service Worker 注册和脚本自身的功能应该可以合在一起做成一个扩展,也欢迎大家在此脚本基础上或者使用类似的思路开发更好用的工具。

    第 1 条附言  ·  2020-08-14 22:47:33 +08:00

    由于最开始只在Firefox上旧版本的Tampermonkey测试过,得出了用户脚本无法注册了Service Worker(SW)的Twitter上执行的错误结论,下面是我在Chrome和Firefox最新版上使用各个用户脚本管理器的测试结果:

    Chrome 84.0.4147.125

    • tampermonkey(4.10): 不需要禁用SW,脚本可以正常执行

    • violentmonkey(2.12.7): 不需要禁用SW,脚本可以正常执行

    Firefox 79.0

    • tampermonkey(4.11.6117): 不需要禁用SW,脚本可以正常执行

    如果出现CSP错误,可以尝试将高级设置里的 Modify existing content security policy (CSP) headers 选项改为 Remove entirely (possibly unsecure)

    • violentmonkey(2.12.7): 无论是否禁用SW都有CSP错误,脚本无法正常工作

    • greasemonkey(4.9): 无论是否禁用SW都有CSP错误,Twitter页面加载不出

    codehz
        1
    codehz  
       2020-08-14 20:29:36 +08:00
    不只是加载变慢吧。。还会导致没有推送了
    learningman
        2
    learningman  
       2020-08-14 20:36:31 +08:00
    pwa 被取消了影响还是挺大的吧
    flyhaozi
        3
    flyhaozi  
    OP
       2020-08-14 20:51:37 +08:00
    @codehz
    @learningman

    我刚刚在注册了 service worker 的情况下用 violentmonkey 加载成功脚本了😂
    看起来可能是用户脚本管理器的问题,之前应该多试几个的
    flyhaozi
        4
    flyhaozi  
    OP
       2020-08-14 21:10:55 +08:00
    @codehz
    @learningman

    我发现我脚本的问题还是很大,别把我上面说的所有东西当真😂
    让帖子先沉一沉,我再想想要怎么改
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1252 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 18:05 · PVG 02:05 · LAX 10:05 · JFK 13:05
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.