embyToLocalPlayer icon indicating copy to clipboard operation
embyToLocalPlayer copied to clipboard

Miss duration in plex media tv show!

Open zhengsun2020 opened this issue 1 year ago • 34 comments

when i saw tv show ,i got this info from cmd out:

File "D:\Downloads\embyToLocalPlayer-python-embed-win32\utils\http_server.py", line 65, in do_POST data = parse_received_data_emby(data) if self.path.startswith('/emby') else parse_received_data_plex(data) File "D:\Downloads\embyToLocalPlayer-python-embed-win32\utils\tools.py", line 489, in parse_received_data_plex duration = data['duration'] KeyError: 'duration'

i print data from Plex and tv show send info json includ “duration” in selected season espoid 'Media': [{ 'id': 586519, 'duration': 1445162, 'bitrate': 3018, 'width': 1920, 'height': 1080,

but no in next espoid 'Media': [{ 'id': 586520, 'Part': [{ 'id': 608139, 'key': '/library/parts/608139/1722653858/file.mkv', 'file': 'D:\XXXXXXX', 'size': 435248006 }] so the program process this json can not get duration, and "KeyError: 'duration'" here

And the last year tv shows added in my lib , PLEX would send all duration of every espoid!

Finallly I modified these line in tools.py , it work fine:

    duration = data.get('duration')

    if data['Part'][0].get('Stream'):
        sub_dict_list = [i for i in data['Part'][0]['Stream'] if i.get('streamType') == 3 and i.get('key')]

zhengsun2020 avatar Aug 03 '24 17:08 zhengsun2020

docker pull linuxserver/plex 版本1.40.4.8679 最新版无法复现,什么服务端版本,注意不是 webui 版本。

kjtsune avatar Aug 04 '24 07:08 kjtsune

版本1.40.4.8679 服务器 VPS海外 和 国内的Windows都能复现,我已经修改我自己的代码了。主要是 获得服务器传回的jason 很奇怪 电视剧有些集没有时长信息等详细信息,看过一次会有,因为脚本要读取所有集信息,有的就是没有。不知道是否和plex的TV刮削出问题有关系。

注释了 #duration = data['duration'] 并做了如下两处修改 if data['Part'][0].get('Stream') is not None: sub_dict_list = [i for i in data['Part'][0]['Stream'] if i.get('streamType') == 3 and i.get('key')] else: sub_dict_list = [] 和

    duration = meta.get('duration')  
    if duration is not None:  
        total_sec = int(duration) // (10 ** 3)  
    else:  
        duration = "60000000"
        total_sec = 60000  # 或者其他合适的默认值
    position = start_sec / total_sec

zhengsun2020 avatar Aug 04 '24 15:08 zhengsun2020

新入库的电视项目,没点开详情或者播放过的,浏览器进入下一集详情会看不到字幕视频流等数据,同时也会无法快速播放。体现在本地服浏览器播放,点下一集无法秒播,要转很久。用本项目调用播放的话,下一集会卡住。等plex自己修了。

kjtsune avatar Aug 05 '24 03:08 kjtsune

是的 就是因为他不传送下一集的各种信息,而咱们的脚本 有的地方不是 get方法,是直接引用,这里就报错了,我就把这几个地方增加了判断。

zhengsun2020 avatar Aug 05 '24 06:08 zhengsun2020

我怀疑他们就打算这么做下去了,我的1.40 还降级不了 1.32

zhengsun2020 avatar Aug 05 '24 06:08 zhengsun2020

新入库的电视项目,没点开详情或者播放过的,浏览器进入下一集详情会看不到字幕视频流等数据,同时也会无法快速播放。体现在本地服浏览器播放,点下一集无法秒播,要转很久。用本项目调用播放的话,下一集会卡住。等plex自己修了。

而且刮削的剧情介绍也没有,必须手工刷新元数据

zhengsun2020 avatar Aug 05 '24 07:08 zhengsun2020

是的 就是因为他不传送下一集的各种信息,而咱们的脚本 有的地方不是 get方法,是直接引用,这里就报错了,我就把这几个地方增加了判断。

不止不传送,而是没有去获取,不然就不会播放下一集卡住了。 这几个数据都有作用,目前不考虑适配,建议降级服务端。

对于想使用的用户,可以自行修改以下几个变量的值,外挂字幕和部分功能可能会失效。 https://github.com/kjtsune/embyToLocalPlayer/blob/7be8a192484af4f4e078332126959addde1d018e/utils/tools.py#L489 duration = data.get('duration', 10**12)

https://github.com/kjtsune/embyToLocalPlayer/blob/7be8a192484af4f4e078332126959addde1d018e/utils/tools.py#L494 sub_dict_list = []

https://github.com/kjtsune/embyToLocalPlayer/blob/7be8a192484af4f4e078332126959addde1d018e/utils/tools.py#L522 total_sec = duration // (10 ** 3)

kjtsune avatar Aug 05 '24 08:08 kjtsune

是的 就是因为他不传送下一集的各种信息,而咱们的脚本 有的地方不是 get方法,是直接引用,这里就报错了,我就把这几个地方增加了判断。

不止不传送,而是没有去获取,不然就不会播放下一集卡住了。 这几个数据都有作用,目前不考虑适配,建议降级服务端。

对于想使用的用户,可以自行修改以下几个变量的值,外挂字幕和部分功能可能会失效。

https://github.com/kjtsune/embyToLocalPlayer/blob/7be8a192484af4f4e078332126959addde1d018e/utils/tools.py#L489

duration = data.get('duration', 10**12) https://github.com/kjtsune/embyToLocalPlayer/blob/7be8a192484af4f4e078332126959addde1d018e/utils/tools.py#L494

sub_dict_list = [] https://github.com/kjtsune/embyToLocalPlayer/blob/7be8a192484af4f4e078332126959addde1d018e/utils/tools.py#L522

total_sec = duration // (10 ** 3)

降级我试过 告诉我系统DB失败启动不了

zhengsun2020 avatar Aug 05 '24 14:08 zhengsun2020

那就先这样子用吧。 本地挂载用户可以启用读盘模式来解决外挂字幕问题。

kjtsune avatar Aug 06 '24 07:08 kjtsune

请问一下读盘模式是啥,我从来没开过,我看的都是GD网盘的资源。可能外挂字幕也少

zhengsun2020 avatar Aug 06 '24 08:08 zhengsun2020

明白了,我测试了读盘模式可以,那我平常一直开着读盘模式可以吗?有什么缺点?

zhengsun2020 avatar Aug 06 '24 09:08 zhengsun2020

https://github.com/kjtsune/embyToLocalPlayer/blob/7be8a192484af4f4e078332126959addde1d018e/README.md#L116-L119

kjtsune avatar Aug 06 '24 09:08 kjtsune

明白了,我测试了读盘模式可以,那我平常一直开着读盘模式可以吗?有什么缺点?

可以,缺点不知道。

kjtsune avatar Aug 06 '24 09:08 kjtsune

我看日志明白了,本地模式必须服务器和文件以及播放是在本地才行,如果是远端服务器开着本地模式,这时本地没有实际文件那就是报错

zhengsun2020 avatar Aug 06 '24 09:08 zhengsun2020

这个1.40改动太大了,而且我测试了 无法回退1.32.8 简直无语了 ,最近刮削也完蛋

zhengsun2020 avatar Aug 06 '24 14:08 zhengsun2020

我看日志明白了,本地模式必须服务器和文件以及播放是在本地才行,如果是远端服务器开着本地模式,这时本地没有实际文件那就是报错

远端服务器也可以,本地挂载GD就可以。看 ini 配置文件。

kjtsune avatar Aug 07 '24 06:08 kjtsune

这个1.40改动太大了,而且我测试了 无法回退1.32.8 简直无语了 ,最近刮削也完蛋

跨大版本回退一般需要重建。刮削是因为被墙了。

kjtsune avatar Aug 07 '24 06:08 kjtsune

重建就算了,而且我发现 现在的plex 外置srt 出不来是因为 download=0不起作用,服务器还是会按照下载处理,所以potplayer就无法支持srt,Emby就是直接可以访问的方式打开srt。 这个我调试了半天也不行只能本地硬盘模式就能解决,但是得自己想着点切换,因为有的时候需要连接朋友的plex就不能用本地硬盘模式了。而且朋友的服务器共享的就可以按照 download=0处理,只有我自己的账户的服务器不行

zhengsun2020 avatar Aug 12 '24 03:08 zhengsun2020

只能本地硬盘模式就能解决,但是得自己想着点切换

# 当服务端路径包含以下前缀强制使用读盘模式,忽略油猴设置。逗号隔开,例如: /disk/p, disk/e force_disk_mode_path = 临时曲线救国方案。

kjtsune avatar Aug 12 '24 08:08 kjtsune

plex 外置srt 出不来是因为 download=0不起作用

mpv 没这问题,pot 原因未知。 随便修了 plex 选中字幕时的bug。

kjtsune avatar Aug 12 '24 09:08 kjtsune

[08/12/24 22:30:51.7] ['C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe', 'http://127.mix_host:32400/library/parts/598744/1716962577/file.mkv?download=0&X-Plex-Token=hide_api_key', '/sub=http://127.mix_host:32400/library/streams/2241525?download=0&X-Plex-Token=hide_api_key', '/seek=00:00:00', '/title=国庆节 | 摩登家庭 - S10E01 - 第 1 集.mkv'] [08/12/24 22:30:51.7] send 1 requests to check subtitles [08/12/24 22:30:52.7] disable playlist cuz is_http_sub [08/12/24 22:31:12.9] update progress: 摩登家庭 - S10E01 - 第 1 集.mkv stop_sec=13

http://127.mix_host:32400/library/streams/2241525?download=0&X-Plex-Token=hide_api_key 换成我的IP和Token 。Plex的URL访问会下载srt文件,而EMBY的URL就是直接浏览器中显示srt的内容。就这么点区别。这个应该是和服务器有关系。

zhengsun2020 avatar Aug 12 '24 14:08 zhengsun2020

https://192-168-123-123.abcdefg.plex.direct:32400/library/streams/13350?download=0&X-Plex-Token=hide_api_key

可以用局域网ip 192.168.... 访问plex播放试试看。 我测试也是直接浏览器中显示srt的内容,但链接格式和你有点区别。这种是他自己转换的。

kjtsune avatar Aug 13 '24 01:08 kjtsune

是的我就是这么测试的,我的1.40.4.8679服务端(Windows、linux)都有这个问题,就是一输入url这种(URL换成了局域网IP)然后就是下载过来了,而不是显示在浏览器中。这个应该是服务器的问题感觉是

zhengsun2020 avatar Aug 13 '24 01:08 zhengsun2020

那就不懂了,我也是这个版本。版本1.40.4.8679

kjtsune avatar Aug 13 '24 01:08 kjtsune

我再找找服务设置问题吧

zhengsun2020 avatar Aug 13 '24 01:08 zhengsun2020

当然,只是会在浏览器里显示而已,我的pot也是无法加载字幕的。mpv可以。

kjtsune avatar Aug 13 '24 01:08 kjtsune

外置srt 您那里也不行是吧,那就不一定是和这个有关。那就算了 我用mpv也可

zhengsun2020 avatar Aug 13 '24 01:08 zhengsun2020

是的。

我还尝试下载到本地后指定路径,也是不行,不管他了。 https://github.com/kjtsune/embyToLocalPlayer/blob/be0b62b228a0404f90cf35fc6b8f830344a25cf8/utils/players.py#L761-L763

    if sub_file:
        if 'Plex-Token' in sub_file:
            sub_file = save_sub_file(sub_file)

kjtsune avatar Aug 13 '24 03:08 kjtsune

本地模式是因为他自己去取 同名的srt 可以显示。但是如果直接指定另一个目录下的 srt文件(就是先下载字幕然后播放) 比如 "C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe" "http://127.0.0.1:32400/library/parts/598744/1716962577/file.mkv?download=0&X-Plex-Token=ScUthCDZ8-h-ui7Eyn-K" /sub="D:\home\摩登家庭 - S10E01 - 第 1 集.srt" /seek=00:18:33 /title="国庆节 | 摩登家庭 - S10E01 - 第 1 集.mkv" 这样是可以的,然后我修改了您对应文件的代码,确实无法工作

但是我测试了 "C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe" "http://127.0.0.1:32400/library/parts/598744/1716962577/file.mkv?download=0&X-Plex-Token=ScUthCDZ8-h-ui7Eyn-K" /sub="D:\Downloads\embyToLocalPlayer-python-embed-win32.tmp\tmp_sub.srt" /seek=00:18:33 /title="国庆节 | 摩登家庭 - S10E01 - 第 1 集.mkv" 以上我在cmd中启动加载已经都正常了

然后我增加代码中 " 符号 代码生成的是 [08/13/24 12:27:45.2] ['C:\Program Files\DAUM\PotPlayer\PotPlayerMini64.exe', 'http://127.mix_host:32400/library/parts/598744/1716962577/file.mkv?download=0&X-Plex-Token=hide_api_key', '/sub="D:\Downloads\embyToLocalPlayer-python-embed-win32\.tmp\tmp_sub.srt"', '/seek=00:00:00', '/title=国庆节 | 摩登家庭 - S10E01 - 第 1 集.mkv']

还是加载不了字幕。。。。

zhengsun2020 avatar Aug 13 '24 03:08 zhengsun2020

如下修改就好了

if sub_file:
    if 'Plex-Token' in sub_file:
        sub_file = save_sub_file(sub_file)
        newsub_file = sub_file.replace('_', ' ')
        if os.path.exists(newsub_file):
            os.remove(newsub_file)
        os.rename(sub_file, newsub_file)
        sub_file = newsub_file
    cmd.append(f'/sub={sub_file}')

zhengsun2020 avatar Aug 13 '24 06:08 zhengsun2020