Каждый раз, когда я пытаюсь транслировать тяжелые (в основном 1080p) видео через сеть (webdav, sftp ...), либо происходит сбой, либо появляется сообщение «кэш заполнен» и т. Д. Видео начинает воспроизводиться, но случайно останавливается (для буферизации снова , Я полагаю).
Я знаю, что это распространенная проблема, и я знаю, какие уловки я могу сделать ( тоже скручивать ).
Окружение:
Я использую модель 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-карту, он работает гладко.
Проблема с оперативной памятью?
Я бы понял аппаратное ограничение, если бы ОЗУ было заполнено, но при просмотре видео free -m
выдает следующее:
total used free shared buffers
Mem: 373 236 137 4 34
-/+ buffers: 202 171
Swap: 0 0 0
Кажется, есть много доступных ...
Интересный факт, как заметил @goldilocks, буферы необычно малы.
Проблемы с сетью?
Если я загружаю видеофайл вручную с помощью SFTP, одновременно воспроизводя этот же файл, он работает. Скорость загрузки: ~ 1,5 МБ / с. Таким образом, ни сеть, ни расшифровка не являются узким местом.
Другая проблема?
Ошибки в лог-файле (с отладкой видео, отладкой ffmpeg), кроме отладки и уведомлений:
ERROR: CCurlFile::FillBuffer - Failed: Timeout was reached
ERROR: OMXPlayerVideo: Got MSGQ_IS_ERROR(-1) Aborting
Итак, curl не оптимизирован для потокового видео. Но как насчет SFTP? Это должен быть кусок пирога.
Проблема с конфигурацией?
Последний тест выше (sdcard cache) интересен. Воспроизведение видео начнется после загрузки примерно 150M (!) На SDCard ( .kodi/temp/filecache000.cache
). Хотя он работает хорошо, это не жизнеспособное решение, так как он слишком медленный для запуска.
Кажется, пытается загрузить тот же объем оперативной памяти, игнорируя конфигурацию в 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>
Примечание: некоторые из этих опций больше не верны в коди 17, см. Ответ @ZacWolf для обновления
Итак, у кого-нибудь есть идеи? Что здесь может быть не так? Безотносительно решения я также хочу знать, почему нормальное использование (буфер ОЗУ) терпит неудачу в этом случае.
РЕДАКТИРОВАТЬ: Тест на Archlinux
Я установил kodi на Archlinux, чтобы определить, является ли это проблемой kodi или openelec. То же самое: HD-видео нестабильно, так что, похоже, это ошибка в коди. Это больше похоже на проблему с протоколом (SFTP и WebDAV: http), потому что мой тест с SSHFS работает отлично. К сожалению, не так просто установить SSHFS на openelec.
РЕДАКТИРОВАТЬ 2: Обходной путь
Я пишу это здесь, потому что это напрямую не решает проблему буферизации, но я установил kodi на Archlinux уже более года, и он отлично работает. Это менее дружественно, чем openelec, но для тех, кто заинтересован:
- Установить Archlinux для ARM (очень просто, просто следуйте инструкциям - это для rpi1, для более поздних просто смените платформу);
- Установите Kodi ( следуйте вики-руководству Archlinux - в основном, установите
kodi-rbp
пакет); - Включить Коди службу для автоматического запуска при запуске Коди:
# systemctl enable kodi.service
; - Установка SSHFS:
pacman -Suy sshfs
; - Используйте очень полезное SSHFS автомонтирования с
/etc/fstab
смонтировать далекую долю.
Выполнено. Не забудьте обновить часто ( pacman -Suy
).
free
поэтому в вашем посте интересен тот факт, что это число относительно мало. Если вы увеличите кэш-память Kodi на диске, это число может / должно увеличиться во время работы, чтобы примерно соответствовать ему.