Kodi的缓冲问题(在openelec上)


9

每次我尝试通过网络(webdav,sftp ...)流传输较重的视频(大多为1080p)时,要么失败,要么我收到消息“缓存已满”等。视频开始播放,但随机停止(以再次缓冲) , 我猜)。

我知道这是一个常见问题,我知道我可以做的调整(也可以卷曲)。

环境:

我使用的是RPi模型B,并且具有100M / b的互联网连接。我一直在用Kodi 14.2和Kodi 15(openelec 5.0.7,openelec 5.95.2)进行测试。

测试:

到目前为止,在许多其他选项中,这是我尝试的方法:

Cache\Protocol | Webdav      | SFTP (local and internet)
--------------------------------------------------------------------------
No cache       | not loading | loads quickly, no error, stops frequently
--------------------------------------------------------------------------
(5mb cache)    | not loading | slow to load, cache error, stops randomly
--------------------------------------------------------------------------
(25mb cache)   | not loading | very slow to load, cache error, stops randomly
--------------------------------------------------------------------------
sdcard cache   | not loading | incredibly slow to load, no error, fine
--------------------------------------------------------------------------

视频有问题吗?

不。如果将其复制到sd卡上,则运行平稳。

RAM问题?

如果RAM已满,我会理解硬件的局限性,但是在观看视频时,free -m会看到以下信息:

             total         used         free       shared      buffers
Mem:           373          236          137            4           34
-/+ buffers:                202          171
Swap:            0            0            0

似乎有很多可用的...

有趣的事实,正如@goldilocks注意到的那样,缓冲区异常低。

网络问题?

如果我要使用SFTP 手动下载视频文件,同时播放此文件,则可以正常工作。下载速度:〜1.5MB / s。因此,网络也不是解密的瓶颈。

还有其他问题吗?

日志文件中的错误(带有视频调试,ffmpeg调试),但调试和注意事项除外:

ERROR: CCurlFile::FillBuffer - Failed: Timeout was reached
ERROR: OMXPlayerVideo: Got MSGQ_IS_ERROR(-1) Aborting

好的,因此卷曲并未针对视频流进行优化。但是SFTP呢?应该是小菜一碟。

配置问题?

上面的最后一个测试(sdcard缓存)很有趣。在sdcard(.kodi/temp/filecache000.cache)上下载约150M(!)后,它开始播放视频。尽管运行良好,但由于启动速度太慢,因此不是可行的解决方案。

似乎尝试下载相同数量的RAM,而忽略了中的配置advancedsettings.xml。我检查了一下,文件加载没有任何问题。这是我测试过的示例(.kodi/userdata/advancedsettings.xml):

<advancedsettings>
    <network>
        <buffermode>1</buffermode>
        <cachemembuffersize>5242880</cachemembuffersize>
        <readbufferfactor>4.0</readbufferfactor>
        <curlclienttimeout>60</curlclienttimeout>
        <curllowspeedtime>20</curllowspeedtime>
    </network>
</advancedsettings>

注意:其中一些选项在kodi 17中不再正确,请参阅@ZacWolf答案以获取更新

那么,有人有什么主意吗?这有什么问题吗?无论采用哪种解决方案,我都想知道为什么在这种情况下正常使用(RAM缓冲区)会失败。

编辑:在Archlinux上测试

我在Archlinux上安装了kodi,以确定这是kodi还是openelec问题。一样:高清视频不连贯,因此这似乎是kodi中的错误。这更像是协议问题(SFTP和WebDAV:http),因为我对SSHFS的测试效果很好。不幸的是,在openelec上安装SSHFS并非易事。

编辑2:解决方法

我在这里编写它是因为它不能直接解决缓冲问题,但是我已经在Archlinux上安装了kodi一年多了,并且运行良好。它比openelec不友好,但对于那些感兴趣的人:

  • 安装用于ARM的Archlinux(非常容易,只需按照指南进行操作 -适用于rpi1,对于最新的版本,只需更改平台);
  • 安装Kodi(遵循Archlinux Wiki指南 -基本安装kodi-rbp软件包);
  • 启用科迪服务在启动时自动运行科迪:# systemctl enable kodi.service;
  • 安装SSHFS:pacman -Suy sshfs;
  • 使用非常有用的SSHFS挂载/etc/fstab挂载你遥远的份额。

做完了 不要忘记频繁更新(pacman -Suy)。


150 MB可能偏高,但如果要避免不连贯性,则对于约1 MB / s的比特率内容,5 MB可能太低了。我会放弃关于SD卡的偏执狂。您购买使用了吗?如果不是这样,将它放在凉爽干燥的橱柜中甚至更安全。
goldilocks

感谢你的关心。但是,请注意,我的问题不仅仅在于sdcard缓冲区。其次,150M,约1MB / s ...是的,150s。这太荒谬了。使用sdcard时是否可以更改缓冲区大小?这可能是一个解决方案。然后,无论缓存大小如何,它都会将整个视频(有时是几GB)加载到sdcard上,而不仅仅是缓冲区。我知道,sdcard很便宜。没什么大不了的。我知道。但是,为什么在RAM应该正常工作的同时我还要对sdcard感到困扰?
Gui-Don

抱歉-回头看一下后,我将其调低了一点。我没有使用过Kodi,所以在这里没有太大帮助,这只是一个一般性的观察。IMO,缓冲到磁盘比缓冲到RAM是更好的策略,因为如果100%填满RAM,系统将没有剩余磁盘缓存,这将显着影响操作的各个方面。但是,如果您不填满RAM而没有其他任何事情,那么您写入磁盘(并同时从磁盘读取)的内容肯定会放入磁盘缓存中-即RAM,但由内核动态管理,即是什么使它成为更好的策略。
goldilocks

如果不清楚,操作系统将尽可能多地使用未使用的RAM进行缓存(我在上面将其称为“磁盘缓存”,这是一个误用,但强调了一个事实,通常它通常是经常从磁盘读取的内容)。在pi上,所有未提交的RAM 都是不寻常的,这是来自“缓冲区”的数字free-因此,您的帖子中有一个有趣的事实是,该数字相对较小。如果您增加Kodi的磁盘缓存,则该数字可能会/应该在实际操作中增加以匹配它。
goldilocks

1
我看到了;)好,我知道使用磁盘比填满RAM更好。如果我可以减小播放视频所需的缓冲区大小,那么这是一个很好的解决方案。顺便说一句,这似乎是一个百分比,而不是一个绝对值。不过,我很好奇这里发生的事情。奇怪的是,即使有视频正在缓冲,我也有大量未使用的RAM。
Gui-Don

Answers:


2

编辑(12/2017)

Kodi v17 在advancedsetting.xml中重命名和重定位了标签

<cachemembuffersize>重命名为<memorysize>

<readbufferfactor>重命名为<readfactor>

并且它们已从<network>中删除并添加到<cache>

我的advancesettings.xml现在看起来像:

<?xml version="1.0" encoding="utf-8"?>
<advancedsettings>
        <cache>
                <memorysize>524288000</memorysize>
                <buffermode>1</buffermode>
                <readfactor>6</readfactor>
        </cache>
</advancedsettings>

这是专门针对Vero4K设备的,该设备比Pi具有更多的内存,因此您需要根据可用内存来调整这些设置。
ZacWolf

1

我在运行带有OpenElec的Pi 3时,也遇到了很多缓冲问题。

我以为它就在路由器旁边,并且正在通过Wi-Fi流式传输,应该没有任何问题。通过以太网插入后,由于缓冲问题停止了,我必须一起删除高级xml文件。

我的笔记本电脑和手机都可以通过Wi-Fi正常播放而无需缓冲,因此Pi3内置的OpenElec Wi-Fi引起了问题。


我很高兴您解决了您的问题,并且我相信这会帮助很多遇到此问题的人。就我而言,我从一开始就使用以太网。对于rpi1,我认为这不是解决方案。话虽这么说,您在rpi3上遇到了类似的问题,这很奇怪,因为它的内存是rpi1的两倍……我可能是错的,但是似乎kodi上的缓存处理简直糟透了。
Gui-Don

-1

我遇到了同样的问题,并且使用了这种“ hack”,现在一切运行顺利。

---编辑---以下@Simulant建议:

  • 安装xunity维护工具。
  • 进入程序(不是设置),xunity-进行了调整。
  • 选择“添加0缓存高级XML”

1
请从您的链接源中划出关键内容。否则,如果链接的源脱机,则您的帖子将无用。
Simulant

1
Xunity不仅仅是为此目的的GUI吗?我的意思是,与我自己调整advancedsettings.xml文件有何不同?实际上,我没有设置缓存,这是减慢SFTP或webdav视频加载速度的方法。
Gui-Don

这是一个gui。但是根据我的经验,直接编辑可能会比较棘手(由于权限等原因)。插件的效果很好,我用过它:-)
Meir
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.