Emby 弹幕 js 插件 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
爱意满满的作品展示区。
RRyo
V2EX    分享创造

Emby 弹幕 js 插件

  •  
  •   RRyo
    RyoLee 2022-08-08 04:36:26 +08:00 4786 次点击
    这是一个创建于 1241 天前的主题,其中的信息可能已经有所发展或是发生改变。

    截图

    需要 Tampermonkey

    插件地址: https://cdn.jsdelivr.net/gh/RyoLee/emby-danmaku/ede.js

    项目地址: https://github.com/RyoLee/emby-danmaku

    主要参考这个项目

    和原版主要差异:

    1. 配置存储改为 localstorage
    2. 弹幕数据跨域问题通过 cloudflare 的 workers 处理绕过
    3. 通过播放对象的 item id 从 emby 的 api 获取数据,不再使用页面对象提取,更新导致出错概率大幅下降(顺便修好了播放下一集不能加载的问题)

    因为 1&2 踢掉了油猴的 GM 函数,所以理论上你也可以把这个 js(和依赖)加到服务器是 index.html 里而不使用油猴加载

    中间靠左插件会增加 3 个按钮,分别为:

    • 弹幕开关
    • 手动匹配弹幕
    • 当前弹幕信息

    弹幕来源为弹弹 play 已开启弹幕聚合(A/B/C 站等弹幕融合)

    目前弹幕简繁转换开关先硬编码在脚本最前面,后面会再加个按钮

    TODO:

    • 屏蔽规则导入
    • 简繁转换开关
    • 弹幕加载失败自动重试
    第 1 条附言    2022-08-08 13:08:31 +08:00

    增加一个点击触发油猴安装的link

    点我安装

    21 条回复    2022-08-17 23:47:07 +08:00
    maypu
        1
    maypu  
       2022-08-08 10:19:19 +08:00
    支持!已 Star !要是能做成插件在客户端也能显示弹幕就好了,这样在电视上也能看了
    penzi
        2
    penzi  
       2022-08-08 12:15:34 +08:00
    插件的文件名以 user.js 结尾的话,能够自动弹出 tampermonkey 的安装界面
    RRyo
        3
    RRyo  
    OP
       2022-08-08 13:09:38 +08:00
    @maggch97 已添加 action 发布到 github page 为 user.js 后缀
    shelken
        4
    shelken  
       2022-08-08 14:01:23 +08:00 via iPhone
    4.7.6 不行
    RRyo
        5
    RRyo  
    OP
       2022-08-08 17:33:31 +08:00
    @shelken 是指直接加 index.html 吗? 可能和 emby 自带的 js 有冲突,后面会改成全部包入匿名函数内来限制作用域
    shelken
        6
    shelken  
       2022-08-08 19:44:47 +08:00 via iPhone
    @RRyo emby 版本 4.7.6 不行。我搜了下页面 html 。并没有这个“videoOsd-endsAtText”class 。
    RRyo
        7
    RRyo  
    OP
       2022-08-08 21:05:04 +08:00
    @shelken 修了,换成根据暂停±10s 的那一组 div 来识别了,本地试了下是 ok 的
    shelken
        8
    shelken  
       2022-08-08 21:43:42 +08:00
    @RRyo 正常显示了,不过切换到别的还是会报错。
    ![AB1gfmrNcaH3TqR]( https://s2.loli.net/2022/08/08/AB1gfmrNcaH3TqR.png)
    ![yhGLfVQB4c8v7lE]( https://s2.loli.net/2022/08/08/yhGLfVQB4c8v7lE.png)
    shelken
        9
    shelken  
       2022-08-08 21:47:23 +08:00
    <img src='https://s2.loli.net/2022/08/08/yhGLfVQB4c8v7lE.png' alt='yhGLfVQB4c8v7lE'/>
    RRyo
        10
    RRyo  
    OP
       2022-08-09 07:15:00 +08:00
    v1.2 更新
    简繁转换按钮(下一次加载弹幕生效)
    弹幕开关记忆
    弹幕信息改为 Notification 推送
    若干 BUG 修复
    修复了一个启动视频时会导致浏览器卡顿的性能问题
    隔离完成,应该可以直接把 js 加到 index.html 里了(待验证

    @shelken 试下 1.2?应该 ok 了
    RRyo
        11
    RRyo  
    OP
       2022-08-09 09:41:12 +08:00
    v1.3 已验证可以通过修改 index.html 在服务端启用

    路径 /system/dashboard-ui/index.html
    在</body>前添加如下标签即可

    <script src="https://cdn.jsdelivr.net/gh/RyoLee/emby-danmaku@gh-pages/ede.user.js" defer></script>

    (顺便看了下手机浏览器效果,挤成一团有点蛋疼,但是确实可以用...估计还得改客户端
    RRyo
        12
    RRyo  
    OP
       2022-08-09 10:50:56 +08:00 via iPhone
    @maypu 安卓的话可以拆包改一下 index.html 再打包 apk ,反正签名比较方便,1.3 版本已经可以脱离油猴直接加载
    shelken
        13
    shelken  
       2022-08-09 12:32:43 +08:00 via iPhone
    @RRyo 已经在 github 反馈问题
    maypu
        14
    maypu  
       2022-08-09 14:07:26 +08:00
    @RRyo 666 ,不错,我回头试试
    chapiom
        15
    chapiom  
       2022-08-09 17:44:35 +08:00
    匹配不到弹幕,版本 4.5.4
    RRyo
        16
    RRyo  
    OP
       2022-08-10 01:35:05 +08:00
    @chapiom 浏览器版本 插件版本 可以提供一下吗?

    麻烦在控制台执行一下这个,看下是不是拿 item 数据的地方有问题

    window.require(['pluginManager'], (pluginManager) => {
    pluginManager.pluginsList.forEach(plugin => {
    if (plugin.id == "htmlvideoplayer") {
    var item = plugin._currentPlayOptions.item
    console.log(JSON.stringify(item))
    }
    })
    })
    chapiom
        17
    chapiom  
       2022-08-11 16:35:57 +08:00
    大概是片源问题吧,极少数有了,是不是 abc 站有的片子才有弹幕
    RRyo
        18
    RRyo  
    OP
       2022-08-11 21:21:17 +08:00
    @chapiom 是需要弹弹 play 支持,理论上如果片源 ABC 站都没有,但是弹弹 play 上其他用户发了弹幕也是可以的,只不过弹幕量就很有限了

    因为 emby 里提取的片名和弹弹 play 很容易对不上,比如这季新番里有个『よふかしのうた』,我在各个群和 B 站见得比较多的名字是《彻夜之歌》,但是用这个译名去匹配弹弹 play 就搜不到,要用另一个译名《夜曲》才可以正确匹配,所以建议搜不到的时候试试看别的名字能不能正确匹配

    如果手动匹配到了的话,这个映射关系会保持在浏览器的本地存储里,下一次(下一集)就可以自动识别了(当然换了设备 /浏览器是要重新手动匹配的)
    Kyaru
        19
    Kyaru  
       2022-08-11 23:13:37 +08:00
    请问能否兼容一下 Jellyfin ?
    RRyo
        20
    RRyo  
    OP
       2022-08-12 00:50:24 +08:00
    @chust 需要修改一些东西,一个脚本兼容应该不行,建议自己确认 /改下下面 5 点

    1. 最上面的判断 application-name 要从 Emby 改成 Jellyfin 的
    2. uiQueryStr 是用来定位创建弹幕 UI 的 div 的位置的,如果不兼容建议选播放的 pause 的那个 div
    3. mediaContainerQueryStr 是弹幕的容器,大概是兼容的
    3. getEmbyItemInfo 函数 我不确定 Jellyfin 播放插件是不是叫 htmlvideoplayer,如果不是要改成对应的 id
    4. getEpisodeInfo 要确认一下 SeriesName/IndexNumber/ParentIndexNumber 这些 item 的属性有没有差异,没有的话不用改
    JoJoP
        21
    JoJoP  
       2022-08-17 23:47:07 +08:00
    @RRyo Jellyfin 没有 pluginManager
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1057 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 33ms UTC 23:22 PVG 07:22 LAX 15:22 JFK 18:22
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86