Всем привет. Я уже начинал вопрос, связанный с автозапуском TVIP, при использовании связки TVLINK+TVHEADEND (serv)+TVIP, но потом как-то подзабылось это. Сейчас опять вернулся к этому вопросу.
Итак в чем собственно вопрос: при изменении в файле shell.conf значения KODI на TVIP, чтобы при включении ТВ-бокса автоматически запускалась оболочка TVIP, получаем ошибку " ОШИБКА ЗАГРУЗКИ КАНАЛОВ"!
Если выйти из TVIP и снова запустить его вручную, то все работает как надо. Alex подсказал что причина (и это видно по логу) в том что TVIP запускается до того как TVLINK отдаст плейлист в TVHEADEND (serv). Поэтому необходимо организовать паузу перед запуском TVIP и для этих целей было предложено использовать файл tvip-autorun.
Однако какую бы задержку я не прописывал в этот файл, это никак не влияет на время запуска TVIP (он всегда стартует приблизительно через 4 сек. после запуска TVLINK).
Для того чтобы проверить что tvip-autorun выполняется написал вот такой скрипт:
date > /storage/service/date
while ! [[ -f /storage/.config/tvlink/log/tvlink.log ]]
do
sleep 1
done
date >> /storage/service/date
let rez=1
while [[ $rez -ne 0 ]]
do
cat /storage/.config/tvlink/log/tvlink.log | grep "Playlist tvheadend end."
let rez=$?
done
date >> /storage/service/date
Этот скрипт ожидает когда TVLINK создаст log файл и затем ждёт когда в логе появится запись
"Playlist tvheadend end." что будет означать что TVHEADEND получил ссылку на плейлист. Date используется три раза чтобы зафиксировать время когда 1) скрипт начал выполняться, 2) сознался лог файл, 3) tvheadend получил плейлист от tvlink.
После перезагрузки тв-бокса он завис на лого ALEXelec, при этом подключившись к нему по ssh, я увидел что все три времени были зафиксированы и записаны в файле date.
Но в journalctl все-равно зафиксировано что запуск tvip был через 4 сек. после tvlink. В общем у меня подозрения что tvip-autorun не до запуска TVIP, а после него.
Это подтверждается тем, что записав в tvip-autorun одну единственную строку sleep 30, у меня после ручного запуска tvip воспроизведение начинается с задержкой около 30сек.
Что подскажете по этому поводу? Как заставить TVIP запускаться с задержкой???
Что подскажете по этому поводу? Как заставить TVIP запускаться с задержкой???
Попробуйте сделать такой /home/tvip/tvip-autorun:
#!/bin/sh
TIMEOUT=30
for i in $(seq 1 $TIMEOUT) ; do
if [ -e /run/tvlink ]; then
break
fi
sleep 1
done
TIMEOUT - подберите сами.
Проверил с Вашим скриптом Alex. Результат одинаков при значениях переменной TIMEOUT=30, 60 и 300. Во всех трех случаях при автозапуске TVIP на экране появляется сообщение "Ошибка загрузки каналов".Вот что дает journalctl в этих случаях:
TIMEOUT=30
AlexELEC: 3.2.8 (S812.KII.arm)
AlexELEC:~ # journalctl | grep "IPTV"
Nov 02 21:40:53 AlexELEC systemd[1]: Started TVLINK IPTV streamer/aggregator.
Nov 02 21:40:58 AlexELEC systemd[1]: Starting TVIP is IPTV shell...
Nov 02 21:41:05 AlexELEC systemd[1]: Started TVIP is IPTV shell.
Nov 02 21:41:11 AlexELEC sh[2155]: 2020-11-02 21:41:11.132 [ INFO] iptv: m3u parse: 0 new mux(es) in network 'IPTV-TVLINK' (total 630)
AlexELEC:~ #
TIMEOUT=60
AlexELEC: 3.2.8 (S812.KII.arm)
AlexELEC:~ # journalctl | grep "IPTV"
Nov 02 21:46:14 AlexELEC systemd[1]: Started TVLINK IPTV streamer/aggregator.
Nov 02 21:46:21 AlexELEC systemd[1]: Starting TVIP is IPTV shell...
Nov 02 21:46:28 AlexELEC systemd[1]: Started TVIP is IPTV shell.
Nov 02 21:46:33 AlexELEC sh[2165]: 2020-11-02 21:46:33.136 [ INFO] iptv: m3u parse: 0 new mux(es) in network 'IPTV-TVLINK' (total 630)
AlexELEC:~ #
TIMEOUT=300
AlexELEC: 3.2.8 (S812.KII.arm)
AlexELEC:~ # journalctl | grep "IPTV"
Nov 02 21:49:05 AlexELEC systemd[1]: Started TVLINK IPTV streamer/aggregator.
Nov 02 21:49:11 AlexELEC systemd[1]: Starting TVIP is IPTV shell...
Nov 02 21:49:18 AlexELEC systemd[1]: Started TVIP is IPTV shell.
Nov 02 21:49:23 AlexELEC sh[2161]: 2020-11-02 21:49:23.188 [ INFO] iptv: m3u parse: 0 new mux(es) in network 'IPTV-TVLINK' (total 630)
AlexELEC:~ #
Видно что независимо от TIMEOUT, TVIP стартует после запуска TVLINK через 5-7 сек.
Мне все-таки кажется что tvip-autostart это скрипт, который выполняется во время запуска TVIP, а не перед ним непосредственно.