TVLINK: настройка и использование (https://alexelec.tv/nastrojka-tvlink/) (инструкция обновляется и дополняется).
Телеграм чат (https://t.me/tvlinkae) по вопросам TVLINK.
- TVLINK - 3.2.2 для PC (x86-64-v2 Python-3.9 ) (https://github.com/AlexELEC/TVLINK-x86_64/releases/tag/3.2.2)
- TVLINK - 3.2.2 для ARM (Amlogic/RPi/Allwinner Python-3.8 ) (https://github.com/AlexELEC/TVLINK-arm7/releases/tag/3.2.2)
- TVLINK - 3.2.2 для ARM64 (Rockchip RK3399, OpenWRT, Python-3.7 ) (https://github.com/AlexELEC/TVLINK-arm64/releases/tag/3.2.2)
- TVLINK - 3.2.2 для MIPSEL (MediaTek MT7621AT, OpenWrt 19.07, Python 3.7 ) (https://github.com/AlexELEC/TVLINK-mips/releases/tag/3.2.2)
- TVLINK - 3.2.2 для ARM (AlexELEC-3.3.4, Python-3.7 ) (https://github.com/AlexELEC/TVLINK-aml/releases/tag/3.2.2)
Отдельный релиз для MIPSEL (MediaTek MT7621AT, OpenWrt 22.03, Python 3.10 ) собранный под Python-3.10:
http://addons.alexelec.tv/TVLINK-3.2.2-mipsel-py3.10.tar.bz2
- обновлена утилита "picons" (синхронизация имен каналов с программой)
- добавлен модуль преобразования потоков в реальном времени через FFMPEG (transcoding)
FFmpeg transcode stream.
Основное назначение этого модуля - обеспечить нормальное переключение разных потоков одного и того же канала в KODI. Имеется ввиду, когда TVLINK автоматически переключает переставший работать поток на следующий.
Как я уже упоминал, если аудио-параметры нового потока отличаются от предыдущего - плеер в KODI не сможет проиграть такой (новый) поток.
Модуль "FFmpeg transcode stream" решает проблему, преобразовывая все потоки к одному и тому же аудио формату.
Также, модуль можно использовать для передачи потоков в "Tvheadend" или просто для перекодировки потоков в нужный формат...
Если в Вашей системе установлен FFmpeg, на странице "Settings" веб-интерфейса TVLINK, будет возможность включить модуль "FFmpeg transcode stream".
***В системах AlexELEC (для PC/Amlogic) FFmpeg встроен в систему. В CoreELEC ae-fork нужно установить плагин "FFmpeg-tools".
(https://i.ibb.co/WzfH2vH/ffmpeg-01.png)
Опции - это параметры командной строки FFmpeg (https://ffmpeg.org/ffmpeg.html). Назначение полей:
- Before input - для параметров аппаратного транскодинга
- Video encoder - параметры видео энкодера
- Audio encoder - параметры видео энкодера
Чтобы было понятно, какая опция куда будет вставлена - строка параметров FFmpeg по умолчанию выглядит так (упрощенная схема):
/usr/bin/ffmpeg -err_detect ignore_err -stream_loop -1 [Before input] -i http://channel.stream (http://channel.stream) -c:v [Video encoder] -c:a [Audio encoder] -ignore_unknown -map 0:v -map 0:a -f mpegts
Video/Audio encoder по умолчанию содержат параметр "copy". Если эти строки пусты в веб-интерфейсе - будет установлено значение "copy" (пропускать поток без перекодирования).
Для основного своего назначения (преобразования аудио для KODI) , установите значение для "Audio encoder" например так - "aac -b:a 96k".
(https://i.ibb.co/pwrmSrK/ffmpeg-02.png)
Это означает, что аудио всех потоков будет выдаваться в формате "AAC (Advanced Audio Coding)" с битрейтом 96 kbit.
Перед тем как устанавливать значения - убедитесь, что ffmpeg в Вашей системе поддерживает те или иные параметры. Например, дайте команду
ffmpeg -hide_banner -encoders
чтобы посмотреть доступные Вам аудио/видео энкодеры.
Вот вывод этой команды в системе AlexELEC-PC:
Encoders:
V..... = Video
A..... = Audio
...
------
V..... h263 H.263 / H.263-1996
V....D h264_vaapi H.264/AVC (VAAPI) (codec h264)
V....D hevc_vaapi H.265/HEVC (VAAPI) (codec hevc)
VFS... mjpeg MJPEG (Motion JPEG)
V.S... mpeg2video MPEG-2 video
V.S... mpeg4 MPEG-4 part 2
VF.... png PNG (Portable Network Graphics) image
A..... aac AAC (Advanced Audio Coding)
A..... ac3 ATSC A/52A (AC-3)
A..... wmav2 Windows Media Audio 2
Если процессор в Вашей системе (например Intel Pentium N5000 в моем боксе) поддерживает аппаратное преобразование потоков - можно сделать такие настройки:
Before input
-hwaccel vaapi -hwaccel_output_format vaapi -hwaccel_device /dev/dri/renderD128
Video encoder
Audio encoder
Before input - здесь говорит о том, что мы будем использовать аппаратные возможности видео-адаптера Intel UHD Graphics 605 для преобразования потока.
Video encoder - указываем encoder "h264_vaapi" (в H.264) и задаем частоту обновления выходного потока (frame rate) 50 кадров/сек.
К слову, на моем Intel Pentium N5000 я подключал 4 клиента к TVLINK c включенными настройками выше (аппаратное кодирование h264) без особой нагрузки на процессор (примерно 30%).
А вот если включить кодек "hevc_vaapi" (H.265/HEVC) - больше одного клиента не обработать. При этом процессор не загружен, просто ограничение в самой графике.
Хочу предупредить, что FFmpeg не всегда может нормально перейти от одного потока на другой, при аппаратном кодировании видео (речь идет именно о кодировании видео, если Вы его включили). Например, если первый поток канала был обычный h264 с частотой 25 кадров, то переход на Youtube-поток этого канала с частотой 30 кадров - вызывает падение FFmpeg и TVLINK переключает дальше. Хотя, в обратном порядке (сначала Youtube 30, потом обычный 25) - проблем не возникает.
После применения настроек (Apply Settings) на странице "About" появиться ссылка на "M3U FFmpeg Playlist" (формат: http://ip-address:port/ffmpeglist (http://ip-address:port/ffmpeglist)).
(https://i.ibb.co/ts8r9H3/ffmpeg-03.png)
Включение "FFmpeg transcode stream" не влияет на основной модуль вешания. Они работают параллельно. Вы можете одновременно подключить одних клиентов к обычному плейлисту (playlist), а других к "FFmpeg transcode stream" плейлисту (ffmpeglist).
По ссылке "http://ip-address:port/ffmpeglist (http://ip-address:port/ffmpeglist)" - Вы всегда можете получить плейлист, даже если "FFmpeg transcode stream" отключен и в системе нет FFmpeg. Поэтому будьте внимательны.
Если включить "Debug Streams" и запустить TVLINK из командной строки
/storage/.config/tvlink/tvlink
при остановке потока будет выведена информация FFmpeg (кодирование, ошибки и тп). Например преобразование аудио/видео потоков:
(https://i.ibb.co/cJRcRyz/ffmpeg-04.png)
PVR TVLINK Client - 2.2.1
Во всех системах будет обновлен "PVR TVLINK Client". Будет добавлена опция "FFmpeg плейлист", которая служит для работы с модулем "FFmpeg transcode stream".
(https://i.ibb.co/2MzfCx7/ffmpeg-05.png)
Нужно сделать systemd service (/storage/.config/system.d/) который перед запуском TVLINK установит $PATH.
Здаюсь , не получается у меня с этим. то что наваял не фурычит. как должно быть?
Хотя я так надеялся, что из коробки заведётся аппаратное ускорение енкодера, но увы как всегда :(
Может всё таки вариант про фриибсд.......
startup.service
[Unit]
Description=StartUp Path Service
After=network-online.target
Before=tvlink.service
[Service]
Type=oneshot
ExecStart=/storage/.config/startup.path
startup.path
#!/bin/sh
export PATH="$PATH:/usr/bin:/usr/sbin:/storage/.kodi/addons/script.module.torrent2http/bin:/storage/.kodi/addons/tools.ffmpeg-tools/bin:/storage/.kodi/addons/virtual.system-tools/bin"
ПС. по идее, если перестартовать твлинк на запущенной системе, он же должен подхватить патх в котором всё есть и найти ффмпег или как?
Здаюсь , не получается у меня с этим. то что наваял не фурычит. как должно быть?
Моя догадка оказалась не верна. Проблема в другом. Нужно сказать Systemd, чтобы он читал профили...
Остановите tvlink.service.
Скопируйте /usr/lib/systemd/system/tvlink.service в /storage/.config/system.d
Замените в tvlink.service "ExecStart" на
ExecStart=-/bin/sh -c ". /etc/profile; /storage/.config/tvlink/tvlink > /dev/null 2>&1"
примените и запустите
systemctl daemon-reload
systemctl start tvlink
Замените в tvlink.service "ExecStart" на
ExecStart=-/bin/sh -c ". /etc/profile; /storage/.config/tvlink/tvlink > /dev/null 2>&1"
Заработало !! ;D
От меня, если при выравнивании уровня звука возникает рассинхрон звука и видео ,то можно добавить в FFmpeg transcode stream: Audio encoderacс -ac 2 -ar 48000 -vbr 3 -af aresample=async=1000:first_pts=0,loudnorm=I=-20:TP=-2:LRA=15
и с этим легко справляется моя коробочка :)
Ещё вы не рассматривали вариант отключения в твлинке юзеров от просмотра по времени... хочу чтоб ребёнок ночью спал, а не пялился в тв.понимаю, что это можно реализовать файрволом и кроном, но в этой системе мне это пока неизвестно.
Зависимость Urllib3 в системе присутствует
В какой системе и по какому пути?
Проверьте из командной строки:
python3
import urllib3.util.connection