GithubHelp home page GithubHelp logo

kjtsune / embytolocalplayer Goto Github PK

View Code? Open in Web Editor NEW
359.0 3.0 25.0 2.09 MB

Emby/Jellyfin 调用外部本地播放器,并回传播放记录。适配 Plex。

JavaScript 18.34% Python 80.44% Shell 0.37% Batchfile 0.85%
emby iina jellyfin mpc mpv potplayer vlc plex bangumi

embytolocalplayer's Introduction

embyToLocalPlayer-Python

Emby/Jellyfin 调用 PotPlayer mpv IINA MPC VLC 播放,并回传播放进度(可关)。适配 Plex。

特性

  • 在首页也可以播放。点击原来的播放按钮就可以。可配置版本优先级(若视频多版本)。
  • 播放列表(连续播放)支持,下一集保持相同版本。
  • trakt.tv bangumi.tv bgm.tv 单向标记已观看支持。
  • 本地挂载用户:可跳转到路径对应文件夹。(按钮在网页显示文件路径的上面)
  • 未适配的播放器一般也能用,只是不会回传进度。

以下播放器支持回传进度

  • 没特殊要求的话,mpv 系的播放器综合体验较好。
  • mpv(纯快捷键)Windows 。 macOS 解压后拖到应用程序即可 macOS
  • mpv.net(可鼠标)发布页。 其他 mpv 内核的播放器一般也可以。
  • PotPlayer 发布页 若使用 http 播放,可能提示地址关闭, 解决方法在 FAQ。
  • MPC-HC 发布页
  • MPC-BE 发布页
  • VLC 发布页
  • IINA(macOS)发布页 若使用 http 播放不支持外挂字幕文件(mpv 支持)

使用说明

基础配置

  1. 下载 embyToLocalPlayer-python-embed-win32.zip (便携版 | Windows only)
    或者 embyToLocalPlayer.zip (Windows / Linux / macOS)
    然后解压到任意文件夹。 发布页
  2. 进入文件夹,修改配置文件:embyToLocalPlayer_config.ini 中的播放器路径,以及播放器选择。
  3. 安装 Python (勾选 add to path) 官网 (若使用便携版,则无需安装。)
  4. 安装油猴脚本。 发布页

前置说明

  • 网页闪一下是自动关闭兼容流提示。
  • 播放器要退出触发回传进度。
  • 日志出现 serving at 127.0.0.1:58000 为服务启动成功。
  • 碰到问题先参考下方相关 FAQ,没按要求反馈会忽略

Windows

  1. 双击 embyToLocalPlayer_debug.bat (不要用管理员运行)
  2. 若无报错,按 1(不要关闭窗口),然后网页播放测试。(点击原来的播放按钮就可以)
  3. 按 2 则创建开机启动项并后台运行。
  • 问题排查:
    • 若双击 .bat 就提示找不到 Python,请使用便携版。
    • 若自启失败,检查启动项是否被禁用:任务管理器 > 启动。
      .bat 按 3 查看开机文件夹里面embyToLocalPlayer.vbs是否被杀毒软件删了。
      若被删,可以自己创建 vbs,然后双击测试是否正常后台运行。 .vbs 模板:
      CreateObject("Wscript.Shell").Run """<Python所在文件夹>\python.exe"" ""<脚本所在文件夹>\embyToLocalPlayer.py""" , 0, True
      

macOS

  1. 刚才保存的文件夹 > 右击 > 新建位于文件夹的终端窗口 chmod +x *.command 回车。
  2. 双击 emby_script_run.command, 若无报错,可播放测试。
  3. 开机自启(无窗口运行):
    1. 方案一:直接进入下一步,但估计只适用于 Monterey 12 及之前的老版本系统。
      方案二:在终端使用 Homebrew 安装 screen。
      brew install screen
      如果你没有安装 Homebrew,请先安装 Homebrew。
      /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
    2. 启动台 > 自动操作 > 文件 > 新建 > 应用程序 > 运行 Shell 脚本 >
      emby_script_run.command(方案一)| emby_script_run_via_screen.command(方案二) 文件拖入 > 点击运行后测试播放 > 文件 > 存储 > 取名并保存到应用程序。
    3. 启动台 > 刚才的应用 > 双击后台运行后再次播放测试。
    4. 系统偏好设置 > 用户与群组 > 登录项 > 添加刚才的应用。
    5. 如果 Monterey 12.6.6 状态栏有齿轮,把文件拖入的操作替换成写以下内容,注意更改cd目录为你保存的目录。
      cd ~/App/embyToLocalPlayer && nohup ./emby_script_run.command > run.log 2&>1 &

Linux

  1. apt install python3-tk(没报错不装也行)
  2. 添加 emby_script_run.command 执行权限,并用终端打开。
  3. 正常播放后,加入开机启动项(无窗口运行):
    Debian_Xfce:设置 > 会话和启动 > 应用程序自启动。
    注意:只能使用用图形界面的自启动功能。利用 systemd 自启弹不出播放器,应该是权限或者环境等问题。

FAQ

FAQ 建议到 GitHub 查看。
https://github.com/kjtsune/embyToLocalPlayer#faq

通用 FAQ

通用说明

  • Python 最低支持版本为 3.8。Windows 最低支持版本为 8.1。
  • 同服务器同时开启多个浏览器标签页,会造成回传进度失败假象。手动刷新一下页面,或者只开一个标签。
  • 部分域名及 Plex 域名有 dns 污染,若无法播放,修改系统 DNS 或使用代理。
  • 反馈群组在频道置顶,提问前先把 FAQ 看一遍,并按要求反馈。不含敏感数据不私聊。
    小更新会频道提醒,不过应该也没什么更新的了,反馈不需要关注频道。https://t.me/embyToLocalPlayer

如何切换模式

  • 点击浏览器油猴插件图标,会有菜单可供点击切换。
  • 脚本在当前服务器:启用(默认);禁用:当前域名不使用脚本。
  • 读取硬盘模式:关闭 > 调用本地播放器但使用服务器网络链接。(默认)
  • 读取硬盘模式:开启 > 调用本地播放器并转换服务器路径为本地文件地址。前提是本地有文件或挂载。
    .ini 里填好路径替换规则,服务端在本地则不用填。.bat 按 4 有辅助配置程序。
    出错可尝试设置:dev > path_check = yes 会检查文件是否存在。兼容性更高,日志更清楚。(但会慢一点)
  • 持久性缓存模式:只看配置文件,与油猴设置不冲突,不需要开启读取硬盘模式。

如何更新

  1. Windows: .bat 按 6
    Linux / macOS:在 .ini 所在的文件夹打开终端,运行 python3 utils/update.py
  2. 查看新旧配置的差异字段。embyToLocalPlayer_diff.ini
  • 油猴脚本有时也要更新。

如何反馈

  1. 运行 debug.bat 选1。( macOS 或 Linux 运行 .command)
    • 若启动不成功,命令行输入 python --version 检查 Python 是否安装成功及版本。(便携版用户可跳过)
    • Python 低于 3.8.10 的先升级试试看。(便携版用户可跳过)
    • 参考如何更新,更新到最新版后测试。(便携版用户不可跳过
  2. 换播放器及换视频文件测试是否复现。
  3. 截图或复制 .bat 窗口中的日志(选中后回车即复制)。
  4. 碰到什么问题及怎么复现。
  5. [可选] 关闭模糊日志。 ini > dev > mix_log = no

字幕相关

  • Emby 里字幕选择无效。
    外挂字幕选择有效,内置字幕会被忽略,由播放器选择。
    视频文件的内置字幕当作外挂字幕处理会导致播放器语言设置失效。(外挂字幕最优先)
    正常播放器都可以设置语言优先顺序。

剧集播放列表(连续播放|多集回传)相关

  • 默认已启用,可在配置文件里 [playlist] 中修改。

  • 播放列表添加完成前最好不退出(大部分没事)

  • 特别说明:若是 Emby 网页上的 全部播放/随机播放/播放列表 ,仅支持电影和音乐视频类型。

  • Windows:

    • mpv:
    • mpv.net:
    • vlc:
    • mpc: be: 播放列表条目超过10个可能会卡住,hc 没这问题。
    • pot: 若日志显示KeyError: 'stream.mkv',看下方 FAQ。
      pot: 下一集无法添加 http 外挂字幕时,会禁用播放列表。
      pot: 读盘模式可能和美化标题和混合S0的功能冲突,不过不影响使用。
  • macOS

    • mpv:
    • iina: 仅读盘模式支持并可回传
    • vlc: 下一集无法添加 http 外挂字幕时,会禁用播放列表。
  • Linux

    • mpv:
    • vlc: 下一集无法添加 http 外挂字幕时,会禁用播放列表。
观看记录存储服务相关

观看记录存储服务相关

通用 FAQ

  • Clash for Windows 用户:

    • 日志报错:SSLEOFError(8, 'EOF occurred in violation of protocol (_ssl.c:1129)'))
    • 解决方案:Clash > Settings > System Proxy > Specify Protocol > 启用。
  • 使用含 Python 的便携版用户无需安装依赖。其他用户需要安装:命令行终端运行,安装失败尝试在启用或禁用代理的环境来安装:
    python -m pip install requests
    或者:
    python -m pip install requests -i https://mirrors.aliyun.com/pypi/simple/ --trusted-host=mirrors.aliyun.com

bangumi.tv(bgm.tv) 单向同步(点格子)

  • 缺点:
    1. 只能往 Bangumi 单向同步。
    2. 只在播放器正常关闭后,同步播放器已播放的(网页点击已播放不触发)。
    3. 只支持常规剧集,不支持剧场版等。
    4. 不支持 Plex。
  • 使用说明:
    1. 访问并创建令牌 https://next.bgm.tv/demo/access-token
      复制令牌到 ini 配置文件 [bangumi] 部分,access_token =
    2. ini 配置文件 [bangumi] 填写 enable_host user_name 这两项。
    3. 启动脚本,播放一集动漫,拖到最后,关闭播放器。看日志是否同步成功。
  • 常见问题:
    1. 5季或者90集以上的条目暂不支持。
    2. 日志提示 Unauthorized 一般是令牌过期或者没填对,Windows 会自动弹出令牌生成页面。
    3. 由于 bgm.tv续集 不一定是下一季,导致第几季可能关联错误(经下面处理后概率低)。
      目前把 续集 里:集数大于3,同时第一集的序号小于2的 续集 当作下一季的开始。
      且只保留类型为 TV 的续集(类型在标题右侧灰字),跳过类型为 OVA 剧场版 WEB 等的。 如果同步的集序号小于12(不会是分批次放送),还会核查 Emby 里的季上映时间(一般是 TMDb 的时间)与 bgm.tv 的上映时间相差是否超过15天,来保证准确性。
      如果还有其他特殊情况,可以反馈。

trakt.tv 单向同步

  • 缺点:
    1. 媒体服务器一般本身就有 Trakt 插件。
    2. 只能往 Trakt 单向同步。
    3. 只在播放器正常关闭后,同步播放器已播放的(网页点击已播放不触发)。
    4. 配置和使用都麻烦。
  • 使用说明:
    1. 点击访问:Trakt app 管理页面
      创建 app,名字任意,Redirect uri 填写: http://localhost/trakt ,然后保存。
    2. ini 配置文件[trakt] 填写 enable_host user_name client_id client_secret 这四项。
    3. 点击 app 详情页面的 Authorize 按钮,二次同意后,复制网址并填到配置文件 oauth_code 里。
    4. 启动脚本,播放一个视频,拖到最后,关闭播放器。看日志是否同步成功。
  • 常见问题:
    1. 若同步失败。电影看是否缺失IMDb,剧集看单集下方是否有 IMDb 或 TheTVDB。
    2. 目录下trakt_token.json可以复制给新电脑用。然后删除原来的,并填写新的 oauth_code 来重新生成。
      如果只是复制到新电脑,重复使用 token 的话,有效期只有三个月。
播放器相关

播放器相关:

mpv

  • 若碰到问题,换官方最新原版及使用默认配置测试。
    可以换视频或者软解看看,并检查 mpv 日志。
    mpv.conf > log-file = <save path>

mpv.net

  • 设置播放完自动关闭。不加载下个文件。(方便触发回传进度,.ini配置有播放列表选项)
    右击 > Settings > Playback > idle:no, auto-load-folder:no (大概是这样

PotPlayer

  • 若碰到问题,本地用户可考虑:MPC-HC 自带 LAV,同样支持 madVR MPCVR BFRC 等。
    网络用户或没有特殊需求的话,mpv 系的播放器综合体验较好。
  • 选项 > 播放 > 播放窗口尺寸:全屏
  • 配置/语言/其他 > 收尾处理 > 播放完当前后退出(触发回传进度)
  • 读盘模式可能和美化标题和混合S0的功能冲突,不过不影响使用。(FAQ > 隐藏功能 有解决方案)
  • .bat 日志提示KeyError: ''
    初始化 pot 和 .ini 删除播放列表部分试试看。
  • Pot 自身问题:.bat 日志可能提示KeyError: 'stream.mkv'
    解决方案:三选一(若前两个方法失败换版本估计也不行)。1. 本地用户使用读盘模式;2. 把 .ini 文件里多集回传 部分删除。3. 换 pot版本;
    PotPlayerSetup64-230208.exe 可以换这个版本,文件与官网一致。
    sha1sum fcd6404e32e6d28769365d9493627f15a0a302d5
  • Pot 自身问题:若使用 http 播放,可能提示地址关闭。Win8 32bit 碰到。
    解决方案:本地用户使用读盘模式,或者换 pot 便携版。
    安全性未知:PotPlayerPortable-220914.zip
    先打开 PotPlayerPortable.exe 一次,但播放用 C:\<path_to>\PotPlayerPortable\App\PotPlayer\PotPlayer.exe
    不然会要求管理员权限运行。
  • Pot 自身问题:.bat 日志可能提示请求的操作需要提升
    解决方案:升降级 pot 或者用 32bit 版本。

MPC:

  • 会自动开启 WebUI,系统防火墙提示的时候可以拒绝(不影响使用)。
  • 会自动开启 WebUI,建议仅允许从 localhost 访问: 查看 > 选项 > Web 界面:
    打勾 仅允许从 localhost 访问
  • MPC 播放 http 具有加载和拖动慢,视频总时长可能有误的缺点。
    以及点击关闭播放器后,进程可能残留在后台。

IINA

  • 完全退出播放器才会回传进度。
  • 非读盘模式不支持外挂字幕文件(mpv 支持)
其他

其他:

Jellyfin 相关

  • 首页播放结束后,10秒内重复播放同文件,本地播放器收到的播放时间会有误。
    解决方法:
    1. 进详情后再播放没这问题;说明不是我的锅
    2. 等待10秒后再继续播放;
    3. 手动刷新页面后播放;
    4. 告诉我要发送什么请求可以解决这个问题

Plex 相关

  • 可能 dns 污染,若无法播放。修改系统 DNS 或使用代理。
  • PotPlayer
    播放 http 时无法读取外挂字幕,读取硬盘模式却可以。(字幕手动上传的,本地硬盘没有,比较玄学)
  • 会提示回放错误,随便点一下就会消失。

感谢

隐藏功能(一般用不到 / 配置麻烦 / 无支持)

隐藏功能(无支持):

播放列表预读取下一集

播放列表预读取下一集

  • 需要配合 nginx 反代管理缓存,比较麻烦。(在本机或者 nas 运行一个 nginx,缓存并切片视频流)
    读取并丢弃 首8% 尾2% 的数据。按理 rclone 配置缓存也可以,但实测效果不佳。
  • 浏览器访问局域网的反代站,或配合后续的 模拟 302 重定向视频流。才能起到缓存效果。
  • 填写位置:.ini > playlist
    # 播放进度超过 50% 时触发预读取,预读取下一集。
    prefetch_percent = 50
    
    # 服务端路径包含以下前缀才预读取,逗号隔开,全部启用就留空或删除。
    prefetch_path = /disk/od/TV, /disk/gd
    
  • 网盘和本地硬盘混合使用的话。[可选] 配置本地文件用读盘模式:.ini > dev > force_disk_mode_path
  • 用自签证书反代 https 的站,可以仅反代视频流,并配置跳过证书验证。.ini > dev > skip_certificate_verify
    不过部分播放器也会校检证书,这个需要自行解决。
模拟 302 重定向视频流

模拟 302 重定向视频流

  • 若使用预读取下一集,nginx 可以只反代视频流。浏览器访问源站,重定向视频流交给本机。降低 nginx 配置难度。减少 bug。
  • 亦可用于其他重定向视频流服务器。采用本地重定向。加速访问。
  • 填写位置:.ini > dev
    # 网址之间逗号隔开,成对填写。源站, 反代站。
    stream_redirect = http://src.src.com, http://reverse.proxy.com, https://src.abc.org, https://reverse.efg.xyz
    
预读取继续观看

预读取继续观看

  • 类似预读取下一集。仅处理最近上映的集(7天内),适合追更。
  • [可选] 在不关机的机器里配置并运行更合适一点。
  • 填写位置:.ini > dev
    # 配置格式:网址,user_id,api_key,一个或者多个服务端路径前缀;
    # 服务端路径包含路径前缀才预读取,全部就写 /
    # 各项之间逗号隔开,最后分号结尾。复数服务器需要配置就分号后面继续写。
    # user_id:设置 > 用户 > [用户名] > 看浏览器网址。api_key:设置 > API 密钥。
    prefetch_conf = http://emby.abc.org:8096, user_id, api_key, /, /od/另一个路径前缀;
    
  • 若需要 nginx 缓存:网址填反代站。如果填源站,需要配置上方的重定向视频流到反代站。
    注意播放链接与预读取链接不一致。 proxy_cache_key "$arg_MediaSourceId$slice_range";
追更 TG 通知

追更 TG 通知

  • 继续观看更新时,通过 Telegram 机器人发送通知。(每10分钟检测一次)
  • 前置依赖:启用 预读取继续观看。
  • 填写位置:.ini 顶部或底部(单独的配置区域即可,不要填到别的配置里)
    ##################################################################
    ### v v # # # # # # # # 追更 TG 通知 # # # # # # # # # # # v v ###
    
    [tg_notify]
    
    # 找 @BotFather 创建一个机器人。复制并填写 token。
    bot_token = 
    
    # 点击你创建的机器人,然后点击开始或随便发送信息给你的机器人,最后启动本脚本。机器人会告诉你 chat_id。
    chat_id = 
    
    # chat_id 填写后,重启脚本,会自动测试,提示测试成功的话,本项可以关闭。 
    get_chat_id = yes
    
    # 如果不需要预读取服务,仅通知。就启用本项。
    disable_prefetch = no
    
    # 静音通知时间段,范围间逗号隔开。例如:0-9 0点后9点前。类似针式时钟的时间范围。
    silence_time = 0-9, 12-14
    
    # [可选] 可指定 api, 自行搜索 "TG Bot API 反代", 解决网络连接问题。
    base_url = https://api.telegram.org
    
持久性缓存

配置方法

  • 填写位置:.ini 顶部或底部(单独的配置区域即可,不要填到别的配置里)

    ##################################################################
    ### v v # # # # # # # 文件缓存(边下边播) # # # # # # # # # # v v ###
    
    [gui]
    
    # 若同时使用播放列表,出现问题属于正常现象,换 mpv 等试试看。
    # 是否需要缓存文件到本地硬盘,播放时会弹菜单。油猴不用开读取硬盘模式。
    enable = no
    
    # 缓存路径:NTFS 支持不很理想,解决方法详见 FAQ
    cache_path = D:\cache
    
    # 当播放进度超过 98% ,此时若关闭播放器,则删除缓存。禁用填 100
    delete_at = 98
    
    # 缓存超过 100GB 时删除旧缓存。
    cache_size_limit = 100
    
    # 重启后是否自动开始下载未完成任务
    auto_resume = no
    
    # 下载时的代理,用不到就留空。 http://127.0.0.1:7890
    http_proxy =
    
    # 需要禁用 gui 的域名:所包含的字符串列表,逗号隔开,将根据油猴设置直接播放。
    except_host = localhost, 127.0.0.1, 192.168. , 192-168-, example.com:8096
    

持久性缓存(边下边播)FAQ

  • 如果播放进度超过下载进度,建议关闭播放器触发回传以保存播放进度。(以下为 Windows 平台测试):
    mpv mpv.net 会停止播放十几秒。
    Pot 会停止播放或跳到尾部。(记得拖回来再关闭)
    MPC 会退出播放器。
    VLC 会停止播放。
  • Windows:( Linux ext4, macOS APFS 没问题。)
    问题:默认的硬盘文件系统 NTFS 会造成额外磁盘开销和初始化时间久,ReFS 正常。
    解决方案:
    1. 使用 顺序下载(需要下载完毕才会用缓存播放,点播放会回退到网络播放模式)
    2. Win10 工作站版和企业版 支持 ReFS,把缓存盘或分区格式化为 ReFS(数据会清空)。
    3. 未核实:用密匙升级为工作站版,或数字权利工具转换。
    4. 开虚拟机或别的电脑有工作站版,然后直通硬盘并格式化成 ReFS 给 Win10 用(专业版测试可行)。
      Win8.1 有人改注册表支持。
  • 网页点击播放时弹出菜单:
    1. 播放:当缓存进度大于播放开始时间时用缓存播放。其他情况回退网络模式。
    2. 下载 1% 后播放:等待下载首尾各 1% 后启动播放器。其他等同于播放。
    3. 下载(首尾优先):优先下载首尾各 1% ,可边下边播。
    4. 下载(顺序下载):不能边下边播。
    5. 删除当前下载
    6. 下载管理器
弹弹播放器

配置方法

  • 填写位置:.ini 顶部或底部(单独的配置区域即可,不要填到别的配置里)
    ##################################################################
    ### v v # # # # # # # # # 弹弹播放器 # # # # # # # # # # # # v v ###
    
    [dandan]
    # 弹弹play 动漫弹幕播放器支持。
    # 播放器需开启远程访问和自动加入媒体库。以及 设置 > 文件关联 > 修复弹弹play专用链。
    
    # 总开关: no 禁用,yes 启用。
    enable = no
    
    # 播放器路径
    exe = C:\Green\dandanplay-x64\dandanplay.exe
    
    # 远程访问端口。远程访问里 ip 改为 127.0.0.1 会比较安全。
    port = 80
    
    # 若远程访问曾经启用过 Web验证,请在这里填写 api密钥,没设置则留空。(注意不是密码)
    api_key =
    
    # 仅当服务端路径包含以下路径时使用弹弹播放,逗号隔开。全部文件都用弹弹播放就留空或删除。
    enable_path = /disk/od/TV, /disk/e/anime
    
    # 通过 http 播放时,是否控制开始时间。需等待播放15秒。
    http_seek = yes
    

弹弹play FAQ

  • 弹弹 api 服务需要10秒左右启动,播放时间太短可能会回传失败。
  • 播放器需开启远程访问和自动加入媒体库。以及 设置 > 文件关联 > 修复弹弹play专用链。
  • 若通过 http 播放,有以下缺点:
    1. 每次播放需要选择弹幕。(已把文件名发送给播放器匹配)
    2. 启动时无法及时跳转到 Emby 开始时间,需要播放开始后等待15秒。(每次看完一集则不影响)
    3. 无法加载外挂字幕。
  • 读盘模式:解决切换设备播放时,进度不一致(读盘模式进度由弹弹存储),同步策略:
    当 Emby 上的进度大于120秒,但弹弹播放器进度小于30秒时(且 api 启动后未曾超过120秒), 会调整弹弹播放器进度,使其与 Emby 上的一致,需等待 api 启动。
Pot 漏播第零季选集/美化播放列表标题
  • 修复情景:
    1. Pot 读盘模式:播放动漫第一季,会漏播 Emby 穿插的 S0 集数。
    2. Pot 读盘模式:剧集播放列表标题错位/缺少。
  • 前提条件二选一:
    1. Pot 选项 > 配置 > 用当前方案创建 > 改配置文件名称为 emby(用脚本播放时会自动切换为该配置):
      Pot 选项 > 左上角切换配置为 emby > 基本 > 相似文件打开策略 > 仅打开选定的文件 > 确定 > 关闭。(仅 emby 播放时由脚本添加播列表)
    2. Pot 选项 > 基本 > 相似文件打开策略 > 仅打开选定的文件。(缺点:用文件管理器播放无播放列表)
  • 填写位置:.ini > playlist
    # 解决 Pot 读盘模式漏播第零季选集及播放列表标题错位/缺少,播放列表加载会变慢,每秒1集。
    mix_s0 = yes
    
  • 播放的第一个文件是 S0 的话,会连续播 S0。(通用 Bug,换 mpv 也会这样)

embytolocalplayer's People

Contributors

eatsolx avatar idealhs avatar kjtsune avatar pmman289 avatar publieople avatar verygoodlee avatar xuanqb avatar ygguorun avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar

embytolocalplayer's Issues

播放 plex 的时候 tools.py 报错

log.txt

Exception occurred during processing of request from ('127.0.0.1', 61666)
Traceback (most recent call last):
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.496.0_x64__qbz5n2kfra8p0\Lib\socketserver.py", line 318, in _handle_request_noblock
    self.process_request(request, client_address)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.496.0_x64__qbz5n2kfra8p0\Lib\socketserver.py", line 349, in process_request
    self.finish_request(request, client_address)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.496.0_x64__qbz5n2kfra8p0\Lib\socketserver.py", line 362, in finish_request
    self.RequestHandlerClass(request, client_address, self)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.496.0_x64__qbz5n2kfra8p0\Lib\socketserver.py", line 761, in __init__
    self.handle()
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.496.0_x64__qbz5n2kfra8p0\Lib\http\server.py", line 436, in handle
    self.handle_one_request()
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.12_3.12.496.0_x64__qbz5n2kfra8p0\Lib\http\server.py", line 424, in handle_one_request
    method()
  File "D:\Program Files\embyToLocalPlayer\embyToLocalPlayer.py", line 32, in do_POST
    data = parse_received_data_emby(data) if self.path.startswith('/emby') else parse_received_data_plex(data)
                                                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\Program Files\embyToLocalPlayer\utils\tools.py", line 448, in parse_received_data_plex
    provider_ids = [tuple(i['id'].split('://')) for i in meta['Guid']]
                                                         ~~~~^^^^^^^^
KeyError: 'Guid'

当删除以下代码之后可以正常播放 plex 视频。potplayer 可以回传进度,mpv 不行,mpvn 可以。

mpv 使用的是 https://github.com/dyphire/mpv-config

provider_ids = [tuple(i['id'].split('://')) for i in meta['Guid']]
provider_ids = {k.title(): v for (k, v) in provider_ids}
trakt_emby_ver_dict = dict(
    Type=meta['type'],
    ProviderIds=provider_ids
)


res.update(trakt_emby_ver_dict)

弹弹play调用播放记录无法回传

Win11,emby,硬盘模式,1.1.13版本,弹弹play使用mpv弹幕外挂模式
因为想用自己的本地资源观看动漫,同时又想直接在mpv上看弹幕(比如芙莉莲早3周播放,只有巴哈有弹幕资源),所以尝试使用了以上组合方式。
emby调用弹弹play正常,弹弹play唤起mpv正常,调用的观看记录是弹弹play自己的观看记录;观看后关闭mpv窗口,mpv进度条会传到弹弹play的进度条里,关闭弹弹play后,播放进度不会回传到emby。
image

另,或者请问是否有可能通过类似emby弹幕插件(danmaku.movie.kg)的方式,使用弹弹play的api,直接匹配相应弹幕,然后用MPV-Play-BiliBili-Comments插件的方法,将弹幕直接在mpv上显示呢?

希望插件上可以切换播放器

希望插件上可以切换播放器

需求:
有时不想开弹幕就不选弹弹play了,可以自由切换选mpv。

插件非常好用,希望可以变得更好,非常感谢!!

是否可以支持在PICO VR上

I also encountered a similar issue. Whether I remove the movie from a collection in Jellyfin or manually delete the movie from the collection's XML file located at config\data\collections directory, after performing a "Scan Library Files" again, the movie still reappears in the collection. Even if I delete the 'set' field from the movie's NFO file, the issue persists. The same happens when attempting to delete the entire collection in Jellyfin - after deletion and re-scan, this collection reappears.

控制台脚本报错

平台:x64
系统:Windows 11 专业版 22H2 22621.2861
问题:双击 embyToLocalPlayer_debug.bat 无报错,按按1(窗口运行)时出现异常,异常信息如下
Pythone 版本:Python 3.10.11

C:\Program Files\Python310\python.exe
press a number
1: run in console
2: run in background and add to startup folder
3: open startup folder
4: path translate helper
5: copy script path to clipboard
6: update to latest version
press a number 1
you have pressed one
[01/09/24 17:11:43] ['Python path: C:\\Program Files\\Python310\\python.exe']
[01/09/24 17:11:43] ['ini path: C:\\Users\\_hide_user_\\embyToLocalPlayer\\embyToLocalPlayer_config.ini']
[01/09/24 17:11:43] Windows-10-10.0.22621-SP0 Python-3.10.11
Traceback (most recent call last):
  File "C:\Users\_hide_user_\embyToLocalPlayer\embyToLocalPlayer.py", line 144, in <module>
    kill_multi_process(name_re=f'(embyToLocalPlayer.py|autohotkey_tool|' +
  File "C:\Users\_hide_user_\embyToLocalPlayer\utils\tools.py", line 103, in kill_multi_process
    pid_cmd = list_pid_and_cmd(name_re)
  File "C:\Users\_hide_user_\embyToLocalPlayer\utils\windows_tool.py", line 26, in list_pid_and_cmd
    result = [(i['ProcessId'], i['CommandLine']) for i in json.loads(proc.stdout)
  File "C:\Program Files\Python310\lib\json\__init__.py", line 346, in loads
    return _default_decoder.decode(s)
  File "C:\Program Files\Python310\lib\json\decoder.py", line 337, in decode
    obj, end = self.raw_decode(s, idx=_w(s, 0).end())
  File "C:\Program Files\Python310\lib\json\decoder.py", line 355, in raw_decode
    raise JSONDecodeError("Expecting value", s, err.value) from None
json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
all tasks are finished.
Press any key to continue . . .```

在 Linux 下如何随 mpv 启动设置临时环境变量?

如题,Arch Linux笔记本用户,平时使用

env __NV_PRIME_RENDER_OFFLOAD=1 __GLX_VENDOR_LIBRARY_NAME="nvidia" __VK_LAYER_NV_optimus="NVIDIA_only" mpv video_file.mp4

设置临时环境变量可以调用 NVIDIA 显卡启动 mpv,在脚本中不知如何设置,麻烦指教!

PermissionError: [WinError 5] Access is denied

Hello, thanks for making this wonderful tool. This is the very first time i am using this tool. i am getting the following error when i play any file in emby website while running embyToLocalPlayer_debug.bat as admin

[12/20/23 20:00:23] ['Python path: C:\\Users\\_hide_user_\\AppData\\Local\\Programs\\Python\\Python312\\python.exe']
[12/20/23 20:00:23] ['ini path: C:\\Users\\_hide_user_\\Downloads\\embyToLocalPlayer\\embyToLocalPlayer_config.ini']
[12/20/23 20:00:23] Windows-11-10.0.22631-SP0 Python-3.12.0
[12/20/23 20:00:26] C:\Users\_hide_user_\Downloads\embyToLocalPlayer\embyToLocalPlayer.py
[12/20/23 20:00:26] serving at 127.0.0.1:58000
127.0.0.1 - - [20/Dec/2023 20:01:14] "POST /embyToLocalPlayer/ HTTP/1.1" 200 -
[12/20/23 20:01:14] server=emby mount_disk_mode=False
[12/20/23 20:01:14] ['emby.xd_mix_host_ not match: gui[except_host] []']
[12/20/23 20:01:14] command line: ['"C:\\Program Files\\mpv\\mpv.exe"', 'https://emby.xd_mix_host_/emby/videos/962/original.mkv?DeviceId=a4e7280e-6df0-4a47-867d-9a725e3da5cf&MediaSourceId=1db25df025b26dfaea14ea236e6cca43&PlaySessionId=94ccee27af7c47439bd9fed593e44780&api_key=_hide_api_key_&Static=true']
[12/20/23 20:01:14] ["emby.xd_mix_host_ match: playlist[enable_host] ['localhost', '127.0.0.1', '192.168.', '192-168-', 'example.com:8096', '.']"]
[12/20/23 20:01:14] ['"C:\\Program Files\\mpv\\mpv.exe"', 'https://emby.xd_mix_host_/emby/videos/962/original.mkv?DeviceId=a4e7280e-6df0-4a47-867d-9a725e3da5cf&MediaSourceId=1db25df025b26dfaea14ea236e6cca43&PlaySessionId=94ccee27af7c47439bd9fed593e44780&api_key=_hide_api_key_&Static=true', '--force-media-title=The Godfather (1972)  |  The Godfather (1972) - HD Version [BluRay-1080p][10bit][x265][AC3 5.1][HI+EN]-afm72[tmdbid-238].mkv', '--osd-playing-msg=The Godfather (1972)  |  The Godfather (1972) - HD Version [BluRay-1080p][10bit][x265][AC3 5.1][HI+EN]-afm72[tmdbid-238].mkv', '--start=0', '--input-ipc-server=\\\\.\\pipe\\pipe_nameA', '--script-opts-append=autoload-disabled=yes', '--fullscreen=yes']
Exception in thread Thread-4 (start_play):
Traceback (most recent call last):
  File "C:\Users\_hide_user_\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 1052, in _bootstrap_inner
    self.run()
  File "C:\Users\_hide_user_\AppData\Local\Programs\Python\Python312\Lib\threading.py", line 989, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\_hide_user_\Downloads\embyToLocalPlayer\embyToLocalPlayer.py", line 100, in start_play
    player_manager.start_player(cmd=cmd, start_sec=start_sec, sub_file=sub_file, media_title=media_title,
  File "C:\Users\_hide_user_\Downloads\embyToLocalPlayer\utils\players.py", line 45, in start_player
    self.player_kwargs = player_start_func_dict[self.player_name](**kwargs)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\_hide_user_\Downloads\embyToLocalPlayer\utils\players.py", line 227, in mpv_player_start
    player = subprocess.Popen(cmd, env=os.environ)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\_hide_user_\AppData\Local\Programs\Python\Python312\Lib\subprocess.py", line 1026, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Users\_hide_user_\AppData\Local\Programs\Python\Python312\Lib\subprocess.py", line 1538, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
PermissionError: [WinError 5] Access is denied
Traceback (most recent call last):
  File "C:\Users\_hide_user_\Downloads\embyToLocalPlayer\embyToLocalPlayer.py", line 161, in <module>
    run_server(_RequestHandler)
  File "C:\Users\_hide_user_\Downloads\embyToLocalPlayer\utils\net_tools.py", line 29, in run_server
    httpd.serve_forever()
  File "C:\Users\_hide_user_\AppData\Local\Programs\Python\Python312\Lib\socketserver.py", line 235, in serve_forever
    ready = selector.select(poll_interval)
            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\_hide_user_\AppData\Local\Programs\Python\Python312\Lib\selectors.py", line 323, in select
    r, w, _ = self._select(self._readers, self._writers, [], timeout)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\_hide_user_\AppData\Local\Programs\Python\Python312\Lib\selectors.py", line 314, in _select
    r, w, x = select.select(r, w, w, timeout)
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

控制台运行出现异常

平台:x64
系统:Win10 22H2 内部版本:19045.3324
问题:双击 embyToLocalPlayer_debug.bat 无报错,按按1(窗口运行)时出现异常,异常信息如下
image

win11 22h2 重启失效

win11 22h2 加入启动组后重启失效 原来的win10没有任何问题 请大哥解决下

无法在Mac上开机自运行

使用MAC13.3系统 iina播放器,jellyfin服务端。
根据自动运行教程,卡在“启动台 > 自动操作 > 文件 > 新建 > 应用程序 > 运行 Shell 脚本 >把 emby_script_run.command 文件拖入 > 点击运行后测试播放”这里,这里测试 iina 会显示“无法打开文件或流!”。
而直接双击运行emby_script_run.command文件,是可以正常调用iina播放器的,求大大指导
上传截屏2023-05-17 11.20.44.png...

iina在使用磁盘模式后开启playlist功能同步观看进度失败

在使用磁盘模式并开启playlist后,iina在观看视频并关闭后未能成功同步进度,输出skip update progress: {key=} {_stop_sec=} not in playlist_data
目前来看emby中playlist_data 中的 key会是 "我心里危险的东西 S1:E14 - 病例.14「我们快变大人了」 | 我心里危险的东西 - S01E14 - 第14集-Nekomoe kissaten.mp4" 这种格式
而 mpv.command('get_property', 'media-title') 在iina情况下 返回值是 "我心里危险的东西 - S01E14 - 第14集-Nekomoe kissaten.mp4" 导致key未能命中而无法同步进度.

在playlist_add_mpv的循环中加了一段

if getattr(mpv, 'is_iina'):
            playlist_data[basename] = ep

目前来看似乎是好了

挂载云盘情况下,不启用读取硬盘模式就播放失败

大佬您好,我的使用情况较为复杂,我的影片是存放在云盘上的,通过虚拟挂载的方式挂载为本地磁盘,然后再通过softlink的方式映射到本地磁盘,再对本地磁盘的软链接文件进行刮削,因此我的emby本地的文件其实是经过刮削之后的软链接文件,使用读取硬盘模式的话可以正常播放,但是关闭该模式之后,就会报错,本人才疏学浅,研究了FAQ之后也不知道如何解决这个问题,还请大佬指教或者是修复这个问题。下面是问题日志
[01/07/24 22:05:21] ['Python path: D:\Program\Anaconda3\python.exe']
[01/07/24 22:05:21] ['ini path: D:\tools\embyToLocalPlayer\embyToLocalPlayer.ini']
[01/07/24 22:05:21] Windows-10-10.0.22621-SP0 Python-3.9.13
system proxy: http://127.0.0.1:10809
system proxy: http://127.0.0.1:10809
[01/07/24 22:05:28] D:\tools\embyToLocalPlayer\embyToLocalPlayer.py
[01/07/24 22:05:28] serving at 127.0.0.1:58000
127.0.0.1 - - [07/Jan/2024 22:05:35] "POST /embyToLocalPlayer/ HTTP/1.1" 200 -
system proxy: http://127.0.0.1:10809
[01/07/24 22:05:35] server=emby mount_disk_mode=False
[01/07/24 22:05:35] ['loca_mix_host_:8096 not match: gui[except_host] []']
[01/07/24 22:05:35] command line: ['D:\tools\mpv\mpv.exe', 'http://loca_mix_host_:8096/emby/videos/15119/stream.mp4?DeviceId=1436e78b-e4f3-4939-b3d5-290f5d1c77e3&MediaSourceId=0153f8c64d9df76b16ce16119caed254&PlaySessionId=a577dd4fbd5a49af8abf44b92684f1e3&api_key=hide_api_key&Static=true']
[01/07/24 22:05:35] ["loca_mix_host_:8096 match: playlist[enable_host] ['localhost', '127.0.0.1', '192.168.', '192-168-', 'example.com:8096', '.']"]
[01/07/24 22:05:35] ['D:\tools\mpv\mpv.exe', 'http://loca_mix_host_:8096/emby/videos/15119/stream.mp4?DeviceId=1436e78b-e4f3-4939-b3d5-290f5d1c77e3&MediaSourceId=0153f8c64d9df76b16ce16119caed254&PlaySessionId=a577dd4fbd5a49af8abf44b92684f1e3&api_key=hide_api_key&Static=true', '--force-media-title=111.mp4', '--osd-playing-msg=111.mp4', '--http-proxy=http://127.0.0.1:10809', '--start=9023', '--input-ipc-server=\\.\pipe\pipe_nameA', '--script-opts-append=autoload-disabled=yes', '--fullscreen=yes']
[01/07/24 22:05:41] Cannot connect to pipe. init_player: init_times=1
[01/07/24 22:05:47] Cannot connect to pipe. init_player: init_times=2
[01/07/24 22:05:53] Cannot connect to pipe. init_player: init_times=3
[01/07/24 22:06:00] Cannot connect to pipe. init_player: init_times=4
[01/07/24 22:06:06] Cannot connect to pipe. init_player: init_times=5

使用MPV播放器报错 无法获取播放列表、回传进度

日志如下,在utils\python_mpv_jsonipc第66行加了日志输出
image

C:\Users\enlce\AppData\Local\Programs\Python\Python311\python.exe
press a number
1: run in console
2: run in background and add to startup folder
3: open startup folder
4: path translate helper
5: copy script path to clipboard
6: update to latest version
press a number 1
you have pressed one
[01/23/24 09:35:34] ['Python path: C:\\Users\\_hide_user_\\AppData\\Local\\Programs\\Python\\Python311\\python.exe']
[01/23/24 09:35:34] ['ini path: D:\\Program Files\\embyToLocalPlayer\\embyToLocalPlayer_config.ini']
[01/23/24 09:35:34] Windows-10-10.0.22621-SP0 Python-3.11.7
system proxy: http://127.0.0.1:8999
system proxy: http://127.0.0.1:8999
[01/23/24 09:35:35] D:\Program Files\embyToLocalPlayer\embyToLocalPlayer.py
[01/23/24 09:35:36] serving at 127.0.0.1:58000
127.0.0.1 - - [23/Jan/2024 09:35:40] "POST /embyToLocalPlayer/ HTTP/1.1" 200 -
system proxy: http://127.0.0.1:8999
[01/23/24 09:35:40] server=jellyfin/10.8.13 data['mount_disk_mode']=False
[01/23/24 09:35:40] 192.168.10.135:8096 not match: gui[except_host] []
[01/23/24 09:35:40] command line: ['D:\\Program Files\\mpv\\mpv.exe', 'http://192.168.10.135:8096/videos/35f9eeaaa40f8d1b02555fc2c19cc179/stream.mp4?DeviceId=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyMC4wLjAuMCBTYWZhcmkvNTM3LjM2fDE3MDQ3ODMyMTcxMjc1&MediaSourceId=35f9eeaaa40f8d1b02555fc2c19cc179&PlaySessionId=69f7d1fd929f4dc287a0901e09ea234f&api_key=4efc20e5f1be4e7fa4d88137d74987eb&Static=true']
[01/23/24 09:35:40] 192.168.10.135:8096 match: playlist[enable_host] ['localhost', '127.0.0.1', '192.168.', '192-168-', 'example.com:8096', '.']
[01/23/24 09:35:40] ['D:\\Program Files\\mpv\\mpv.exe', 'http://192.168.10.135:8096/videos/35f9eeaaa40f8d1b02555fc2c19cc179/stream.mp4?DeviceId=TW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEyMC4wLjAuMCBTYWZhcmkvNTM3LjM2fDE3MDQ3ODMyMTcxMjc1&MediaSourceId=35f9eeaaa40f8d1b02555fc2c19cc179&PlaySessionId=69f7d1fd929f4dc287a0901e09ea234f&api_key=4efc20e5f1be4e7fa4d88137d74987eb&Static=true', '--force-media-title=黑土无言 S1:E6 - 钟意抓王山被割喉  |  黑土无言 - S01E06 - 第6集.mp4', '--osd-playing-msg=黑土无言 S1:E6 - 钟意抓王山 被割喉  |  黑土无言 - S01E06 - 第6集.mp4', '--http-proxy=http://127.0.0.1:8999', '--start=1328', '--input-ipc-server=\\\\.\\pipe\\pipe_nameA', '--script-opts-append=autoload-disabled=yes', '--fullscreen=yes']
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[01/23/24 09:35:46] Cannot connect to pipe. init_player: init_times=1
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[01/23/24 09:35:52] Cannot connect to pipe. init_player: init_times=2
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[01/23/24 09:35:58] Cannot connect to pipe. init_player: init_times=3
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[01/23/24 09:36:04] Cannot connect to pipe. init_player: init_times=4
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[WinError 2] 系统找不到指定的文件。
[01/23/24 09:36:10] Cannot connect to pipe. init_player: init_times=5
[01/23/24 09:36:10] mpv not found skip playlist_add_mpv
[01/23/24 09:36:10] mpv not found, skip stop_sec_mpv
[01/23/24 09:36:10] skip update progress: playlist_data not found
  • 可以正常调用mpv进行播放,但无法回传进度以及获取播放列表
  • 手动在浏览器打开视频流url可以正常播放
  • 换一个视频也报错
  • 换potplayer播放器功能正常

VBScript即将被移除,windows版可能要考虑其他自启动方案了

微软宣布弃用 VBScript 脚本语言,将在未来的 Windows 版本中移除
Windows 客户端的已弃用功能
就是不知道微软的效率,多久后被彻底移除。
这就有点难受了,如果以windows服务方式启动,运行播放器时只有进程看不到播放器窗口,因为服务是SYSTEM用户,和普通用户不在同一个会话。
很难找到vbs的替代方案,既能隐藏黑窗口,又能正常运行播放器。

播放列表从后面的集数切回第一集时字幕有问题

启动时第一集选择了字幕,播放列表的subtitle_priority参数也填写了,字幕都能成功加载,
从第一集往后切没啥问题,但是从后面切回第一集字幕没了。
原因是第一集的字幕加载方式用的JSON IPC,不是以启动参数加载的

if sub_file and not is_iina and mpv:
_cmd = ['sub-add', sub_file]
mpv.command(*_cmd)

启动参数--sub-file影响后面的集数是可以解决的,sub-files是一个List Options,利用-toggle操作的特性:不存在则添加,存在则删除。启动参数改为cmd.append(f'--sub-files-toggle={sub_file}')
# if sub_file:
# if is_iina:
# # https://github.com/iina/iina/issues/1991
# pass
# # 全局 sub_file 会影响播放列表下一集
# # cmd.append(f'--sub-file={sub_file}')

播放列表的字幕参数部分改为

        # 启动时选择的第一集的字幕,先给它加上,启动参数sub-files-toggle会把它删掉
        first_ep_sub_file = data['sub_file'] or ''
        sub_file_cmd = f',sub-files-remove={first_ep_sub_file},sub-files-append={first_ep_sub_file}' if first_ep_sub_file else ''
        sub_file = ep['sub_file'] or ''
        sub_file_cmd = sub_file_cmd + (f',sub-files-append={sub_file}' if sub_file else '')

sub_file = ep['sub_file'] or ''
sub_file_cmd = f',sub-file={sub_file}' if sub_file else ''

202403版本mpv,播放列表报错

Emby 4..8.3.0
mpv https://github.com/shinchiro/mpv-winbuild-cmake/releases/tag/20240301

关键报错信息

Exception in thread Thread-14 (start_play):
Traceback (most recent call last):
  File "threading.py", line 1073, in _bootstrap_inner
  File "threading.py", line 1010, in run
  File "C:\Program Files\EmbyToLocalPlayer\embyToLocalPlayer.py", line 103, in start_play
    player_manager.playlist_add(eps_data=eps_data)
  File "C:\Program Files\EmbyToLocalPlayer\utils\players.py", line 60, in playlist_add
    self.playlist_data = playlist_fun[self.player_name](data=self.data, eps_data=eps_data, **self.player_kwargs)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\EmbyToLocalPlayer\utils\players.py", line 307, in playlist_add_mpv
    mpv.command(
  File "C:\Program Files\EmbyToLocalPlayer\utils\python_mpv_jsonipc.py", line 627, in command
    return self.mpv_inter.command(command, *args)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Program Files\EmbyToLocalPlayer\utils\python_mpv_jsonipc.py", line 338, in command
    raise MPVError(data["error"])
utils.python_mpv_jsonipc.MPVError: invalid parameter

Potplayer 读取硬盘模式下播放列表标题错误

媒体服务器: nyanmisaka/jellyfin 10.8.13 (Docker)
本地播放器: Potplayer 240307 (1.7.22125) x64
油猴插件: 2024.03.27,开启读取硬盘模式
本地配置: 播放器选择 pot,开启路径转换,开启播放列表

问题描述:
jellyfin 点击播放《金字塔游戏 - S01E02》,开启读取硬盘模式后,Potplayer 播放列表中可显示本地路径下的全部 10 个视频,但是:

  1. 只有播放列表中的第一个条目有标题
  2. 播放列表第一个条目为《金字塔游戏 - S01E01》,但是标题却被错误替换为点击播放的《金字塔游戏 - S01E02》对应的标题

image
image

是否方便修复(或者在本地播放器为 Potplayer 且开启读取硬盘模式时不作标题替换
感谢大佬辛勤开发~

本地日志:

127.0.0.1 - - [02/Apr/2024 22:42:13] "POST /embyToLocalPlayer/ HTTP/1.1" 200 -
system proxy: http://127.0.0.1:7890
[04/02/24 22:42:13.9] PyScript/2024.04.02 UserScript/2024.03.27 Tampermonkey/5.1.0
[04/02/24 22:42:13.9] Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36
[04/02/24 22:42:13.9] server=jellyfin/10.8.13 data['mount_disk_mode']=True
[04/02/24 22:42:13.9] command line: ['C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini64.exe', '\\\\_hide_user_\\media1\\link\\tv\\日韩剧\\金字塔游戏 (2024)\\Season 1\\金字塔游戏 - S01E02 - 第2集.mkv']
[04/02/24 22:42:13.9] ["_mix_host_:8920 match: playlist[enable_host] ['localhost', '127.0.0.1', '192.168.', '192-168-', '_mix_host_']"]
[04/02/24 22:42:13.9] ['C:\\Program Files\\DAUM\\PotPlayer\\PotPlayerMini64.exe', '\\\\_hide_user_\\media1\\link\\tv\\日韩剧\\金字塔游戏 (2024)\\Season 1\\金字塔游戏 - S01E02 - 第2集.mkv', '/seek=00:14:52', '/title=金字塔游戏 S1:E2 - 金字塔游戏的策划者  |  金字塔游戏 - S01E02 - 第2集.mkv']

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.