Giter Site home page Giter Site logo

jellyfin-danmaku's Introduction

jellyfin-danmaku

Jellyfin弹幕插件

image

界面

请注意Readme上方截图可能与最新版存在差异,请以实际版本与说明为准

左下方新增如下按钮,若按钮透明度与"暂停"等其他原始按钮存在差异,说明插件正在进行加载

  • 弹幕开关: 切换弹幕显示/隐藏状态
  • 搜索弹幕: 手动输入信息匹配弹幕
  • 增加弹幕源: 手动添加自定义弹幕源(用于番剧刚发布,弹弹Play还未收录弹幕源地址时使用,如果已经登录,则会提交给弹弹Play)
  • 弹幕设置:
    • 设置弹幕透明度 [0, 1]
    • 设置弹幕速度 [100, 600]
    • 设置弹幕字体大小 [8, 32]
    • 设置弹幕区域占屏幕的高度比例 [0, 1]
    • 弹幕密度: 依据水平和垂直密度过滤, 弹幕0级无限制*
    • 设置弹幕用户名过滤,支持选项: 哔哩哔哩, 巴哈姆特, 弹弹Play, 其他
    • 简繁转换: 在原始弹幕/简体中文/繁体中文3种模式切换
  • 日志开关: 开启/关闭调试日志输出
  • 发送弹幕: 登录弹弹Play,并在播放界面发送弹幕

*除0级外均带有每3秒6条的垂直方向弹幕密度限制,高于该限制密度的顶部/底部弹幕将会被转为普通弹幕

支持的客户端

  • Jellyfin Web
  • Jellyfin Android (播放器类型仅限网页播放器)
  • Jellyfin iOS

弹幕

弹幕来源为 弹弹 play ,已开启弹幕聚合(Acfun/Bili/Tucao/Baha/5DM/iQIYI等不知名网站弹幕融合)

数据

匹配完成后对应关系会保存在浏览器(或客户端)本地存储中,后续播放(包括同季的其他集)会优先按照保存的匹配记录载入弹幕

安装

任选以下一种方式安装即可,方式1-3可以持久化。

注: 安装完首次使用时,确保只有当前一个客户端访问服务器,以方便根据当前用户id获取Session时能唯一定位到当前客户端设备id。(主要是由于非Jellyfin Web客户端没有默认在localstorage中存储DeviceID)

1. 浏览器插件(推荐)

  1. 安装Tampermonkey插件
  2. 添加脚本

2. 反向代理处理(推荐)

2.1 Nginx

使用Nginx反向代理Jellyfin并在location块中插入:

proxy_set_header Accept-Encoding "";
sub_filter '</body>' '<script src="https://jellyfin-danmaku.pages.dev/ede.user.js" defer></script></body>';
sub_filter_once on;

2.2 Caddy

下载Caddy二进制文件时,增加第三方模块sjtug/caddy2-filter,之后,在Caddyfile中按如下内容修改

# 全局设置
{
    order filter after encode
}

# 网站设置
example.com {
    filter {
        path .*/web/index.html.*
        search_pattern </body>
        replacement "<script src=\"https://jellyfin-danmaku.pages.dev/ede.user.js\" defer></script></body>"
        content_type text/html
    }
    reverse_proxy localhost:8096 {
        header_up Accept-Encoding identity
    }
}

3. 修改服务端启动命令

思路来源

3.1 Docker模式启动的服务端

官方镜像的Entrypoint是/jellyfin/jellyfinhotio/jellyfin镜像的Entrypoint是/init,可在docker-compose.yml的jellyfin部分增加一行如下代码,用带sed的Entrypoint替换默认的Entrypoint。

官方镜像:

entrypoint: sed -i 's#</div></body>#</div><script src="https://jellyfin-danmaku.pages.dev/ede.user.js" defer></script></body>#' /jellyfin/jellyfin-web/index.html && /jellyfin/jellyfin

hotio/jellyfin镜像:

entrypoint: sed -i 's#</div></body>#</div><script src="https://jellyfin-danmaku.pages.dev/ede.user.js" defer></script></body>#' /usr/share/jellyfin/web/index.html && /init

3.2 直接用包管理器安装,并使用systemd管理的服务端

部分用户使用deb包或者Arch Linux的aur包安装Jellyfin,可以修改systemd service文件来实现启动时追加js脚本。 运行systemctl edit jellyfin.service,进入编辑界面,然后输入如下内容:

deb包安装的版本:

[Service]
ExecStartPre=-/usr/bin/sed -i 's#</div></body>#</div><script src="https://jellyfin-danmaku.pages.dev/ede.user.js" defer></script></body>#' /usr/share/jellyfin/web/index.html

aur安装的版本:

[Service]
ExecStartPre=-/usr/bin/sed -i 's#</div></body>#</div><script src="https://jellyfin-danmaku.pages.dev/ede.user.js" defer></script></body>#' /usr/lib/jellyfin/jellyfin-web/index.html

保存后,运行systemctl daemon-reload生效,systemctl restart jellyfin重启当前服务。

4. 修改服务端

修改文件 /usr/share/jellyfin/web/index.html (Default)

/jellyfin/jellyfin-web/index.html (Official Docker)

</body>前添加如下标签

<script src="https://jellyfin-danmaku.pages.dev/ede.user.js" defer></script>

Shell中的操作命令为:

Official Docker:

sed -i 's#</body>#<script src="https://jellyfin-danmaku.pages.dev/ede.user.js" defer></script></body>#' /jellyfin/jellyfin-web/index.html

Default:

sed -i 's#</body>#<script src="https://jellyfin-danmaku.pages.dev/ede.user.js" defer></script></body>#' /usr/share/jellyfin/web/index.html

该方式安装与浏览器插件安装可同时使用不冲突

常见弹幕加载错误/失败原因

  1. 译名导致的异常: 如『よふかしのうた』 Emby 识别为《彻夜之歌》后因为弹弹 play 中为《夜曲》导致无法匹配
  2. 存在多季/剧场版/OVA 等导致的异常: 如『OVERLORD』第四季若使用S[N]格式归档(如OVERLORD/S4E1.mkv或OVERLORD/S4/E1.mkv),可能出现匹配失败/错误等现象
  3. 其他加载BUG: 鉴定为后端程序猿不会前端还要硬写JS,有BUG麻烦 开个issue THX

首次播放时请检查当前弹幕信息是否正确匹配,若匹配错误请尝试手动匹配

鸣谢

感谢JetBrains OpenSourceSupport所提供的支持

JetBrains Logo (Main) logo

Stargazers over time

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.