#1 - 2023-2-28 12:04
h3nt4i
在Mac下挂载webdav并播放里面的视频,如果是几百M到1个G左右的可能没啥影响,但是一旦播放那种十几到几十G的电影,就会发现,webdavfs_agent进程会先下载大量缓存到本地硬盘然后才开始播放,这期间Finder就会卡死。这个缓存大小至少几个G,经多次清理缓存、重新挂载、再打开文件的测试,发现即使是同一个文件,每次打开的初始的缓存大小都不一样,不知道为啥。

而当电影播放到未缓存的部分或者直接拖到进度条后面时,就会可能出现两种情况,一是先缓存好一会(又是一阵等)再接着播放,二是不做缓存而是直接就结束播放了,同一个文件在多次测试下也会出现这两种情况,后者的概率更高。

使用的播放器分别为IINA和Infuse,如果是直接从Finder里面点击打开的话,这两个播放器都会出现上述的情况。实际上有时候(也存在一定概率)哪怕只是在Finder中单击文件而不打开或者只是进入文件所在目录,也会直接卡住然后大量缓存。IINA的GitHub里面也有人发过这样的issue(https://github.com/iina/iina/issues/3449https://github.com/iina/iina/issues/1266)。

即使不通过Finder点击,也会出现同样的上述情况。IINA支持在浏览器中通过URL Scheme打开(iina://open?url=/Volume/192.168.x.x/xxx.mkv),使用这种方式打开也是一样的毛病。但是,实际上Mac的webdav是可以只缓存少量数据的,我用Python写了个简单的脚本,调用read()只读取几个字节并输出,这个操作马上就能完成,而不是像上述那样大量缓存。

我还设想过一种可能,Finder或者播放器会不会把webdav中的文件当成了本地文件所以才会大量缓存,但仔细想想,如果是这样的话那应该会先把整个视频完整缓存下来,而不是只缓存几个G。于是我用C写了段程序,调用系统的fstatfs()函数,可以发现系统是可以识别出这是来自webdav的文件。在翻阅mpv的源码(https://github.com/mpv-player/mp ... tream/stream_file.c)的时候,也可以找到这一部分的判断代码(check_stream_network())。

当然,要想愉快地播放webdav的视频,也不是非得通过Mac的webdavfs挂载。Infuse有自己的远程视频库功能,IINA也可以通过http地址来播放webdav视频,在这种情况下是不需要大量缓存并且可以正常流畅播放的。

以后有空我也会瞅瞅Mac的webdavfs的源码(https://github.com/apple-oss-distributions/webdavfs),看能不能找到更多问题所在,但以我目前的技术力大概还是挺难。
#2 - 2023-2-28 12:14
(Don't feel. Think.)
>Finder或者播放器会不会把webdav中的文件当成了本地文件所以才会大量缓存
反了,mpv判断是network流的时候才会开启--cache。
盲猜mpv尝试缓存之后webdav又加了一层缓存导致越来越大?可以试试--cache=no不许mpv缓存?
#3 - 2023-2-28 22:22
mac finder就是傻狗,挂载SMB、FTP和webdav都会卡死。
用alist调起HTTP播放吧。
#4 - 2024-3-10 23:20
mac的webdavfs就是狗屎,不知道卡死我几次了
#5 - 2024-4-2 20:00
Finder是这样的,建议用nPlayer或者VidHub挂载。
#6 - 2024-4-2 20:10
(亡死来招会但人迷爱可然虽我。)
你真厉害,我顶多也就去搜搜为什么会出现这种情况不会考虑自己调试。
解决不了就换其他方法了。
#7 - 2024-4-5 19:00
我在使用 WebDAV+Blu-ray Player Pro 观看 BDMV 的时候非常正常, 没有出现缓冲完成才能加载的事.
不过值得一提的是: 对于远程目标, macOS 会试图扫描 WebDAV 的所有文件, 这使列出文件很慢.
#8 - 2024-4-5 19:07
(Nice Fever)
直接
mpv http://192.168.x.x/xxx.mkv

谁挖的坟
#9 - 2024-4-5 19:08
(V1046-R MAHORO)
借地方问下,我 iOS (iPad) 用nPlayer直接挂载OneDrive播放,观察似乎也是每次都要下载整个文件或者极大缓存才会播放,这个能解决不?