1
0

tvheadend43: initial package

This commit is contained in:
CvH
2021-02-27 07:03:24 +01:00
parent 07a3883fe3
commit 994cdeb931
25 changed files with 1079 additions and 0 deletions

@ -0,0 +1,34 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<addon id="@PKG_ADDON_ID@"
name="@ADDON_NAME@"
version="@ADDON_VERSION@"
provider-name="@PROVIDER_NAME@">
<requires>
<import addon="xbmc.python" version="3.0.0"/>
@REQUIRES@
</requires>
<extension point="xbmc.service" library="default.py">
<provides>@PKG_ADDON_PROVIDES@</provides>
</extension>
<extension point="xbmc.python.script" library="download.py">
<provides>@PKG_ADDON_PROVIDES@</provides>
</extension>
<extension point="xbmc.addon.metadata">
<summary>@PKG_SHORTDESC@</summary>
<description>
@PKG_LONGDESC@
</description>
<disclaimer>
@PKG_DISCLAIMER@
</disclaimer>
<platform>all</platform>
<news>
@PKG_ADDON_NEWS@
</news>
<assets>
<icon>resources/icon.png</icon>
<fanart>resources/fanart.png</fanart>
@PKG_ADDON_SCREENSHOT@
</assets>
</extension>
</addon>

@ -0,0 +1,2 @@
100
- initial LibreELEC version

Binary file not shown.

After

(image error) Size: 16 KiB

@ -0,0 +1,130 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
PKG_NAME="tvheadend43"
PKG_VERSION="fe0e5f1f9c8fa175183cede9b3182fb25de2d367"
PKG_SHA256="64f006c76f6bb6f17bc5420ff42b7d9ca2530ae9fdd1a835afa91c8acecad3b7"
PKG_VERSION_NUMBER="4.3-1940"
PKG_REV="100"
PKG_ARCH="any"
PKG_LICENSE="GPL"
PKG_SITE="http://www.tvheadend.org"
PKG_URL="https://github.com/tvheadend/tvheadend/archive/${PKG_VERSION}.tar.gz"
PKG_DEPENDS_TARGET="toolchain avahi comskip curl dvb-apps ffmpegx libdvbcsa libhdhomerun \
libiconv openssl pcre2 pngquant:host Python3:host tvh-dtv-scan-tables"
PKG_DEPENDS_CONFIG="ffmpegx"
PKG_SECTION="service"
PKG_SHORTDESC="Tvheadend: a TV streaming server for Linux"
PKG_LONGDESC="Tvheadend (${PKG_VERSION_NUMBER}): is a TV streaming server for Linux supporting DVB-S/S2, DVB-C, DVB-T/T2, IPTV, SAT>IP, ATSC and ISDB-T"
PKG_BUILD_FLAGS="-sysroot"
PKG_IS_ADDON="yes"
PKG_ADDON_NAME="Tvheadend Server 4.3 (Alpha)"
PKG_ADDON_TYPE="xbmc.service"
# basic transcoding options
PKG_TVH_TRANSCODING="\
--disable-ffmpeg_static \
--disable-libfdkaac_static \
--disable-libopus_static \
--disable-libtheora \
--disable-libtheora_static \
--disable-libvorbis_static \
--disable-libvpx_static \
--disable-libx264_static \
--disable-libx265_static \
--enable-libav \
--enable-libfdkaac \
--enable-libopus \
--enable-libvorbis \
--enable-libvpx \
--enable-libx264 \
--enable-libx265"
# hw specific transcoding options
if [ "$TARGET_ARCH" = x86_64 ]; then
PKG_DEPENDS_TARGET="$PKG_DEPENDS_TARGET libva"
PKG_TVH_TRANSCODING="$PKG_TVH_TRANSCODING \
--enable-vaapi"
fi
# specific transcoding options
if [[ "${TARGET_ARCH}" != "x86_64" ]]; then
PKG_TVH_TRANSCODING="${PKG_TVH_TRANSCODING} \
--disable-libvpx \
--disable-libx265"
fi
post_unpack() {
sed -e 's/VER="0.0.0~unknown"/VER="'${PKG_VERSION_NUMBER}' ~ LibreELEC Tvh-addon v'${ADDON_VERSION}'.'${PKG_REV}'"/g' -i ${PKG_BUILD}/support/version
sed -e 's|'/usr/bin/pngquant'|'${TOOLCHAIN}/bin/pngquant'|g' -i ${PKG_BUILD}/support/mkbundle
}
pre_configure_target() {
PKG_CONFIGURE_OPTS_TARGET="--prefix=/usr \
--arch=${TARGET_ARCH} \
--cpu=${TARGET_CPU} \
--cc=${CC} \
${PKG_TVH_TRANSCODING} \
--enable-avahi \
--enable-bundle \
--disable-dbus_1 \
--enable-dvbcsa \
--disable-dvben50221 \
--disable-dvbscan \
--enable-hdhomerun_client \
--disable-hdhomerun_static \
--enable-epoll \
--enable-inotify \
--enable-pngquant \
--disable-libmfx_static \
--disable-nvenc \
--disable-uriparser \
--enable-tvhcsa \
--enable-trace \
--nowerror \
--disable-bintray_cache \
--python=${TOOLCHAIN}/bin/python"
# fails to build in subdirs
cd ${PKG_BUILD}
rm -rf .${TARGET_NAME}
# pass ffmpegx to build
CFLAGS+=" -I$(get_install_dir ffmpegx)/usr/local/include"
LDFLAGS+=" -L$(get_install_dir ffmpegx)/usr/local/lib"
# pass libhdhomerun to build
CFLAGS+=" -I${SYSROOT_PREFIX}/usr/include/hdhomerun"
export CROSS_COMPILE="${TARGET_PREFIX}"
export CFLAGS+=" -I${SYSROOT_PREFIX}/usr/include/iconv -L${SYSROOT_PREFIX}/usr/lib/iconv"
}
post_make_target() {
${CC} -O -fbuiltin -fomit-frame-pointer -fPIC -shared -o capmt_ca.so src/extra/capmt_ca.c -ldl
}
post_makeinstall_target() {
mkdir -p ${INSTALL}/usr/lib
cp -p capmt_ca.so ${INSTALL}/usr/lib
}
addon() {
mkdir -p ${ADDON_BUILD}/${PKG_ADDON_ID}/bin
cp ${PKG_DIR}/addon.xml ${ADDON_BUILD}/${PKG_ADDON_ID}
# set only version (revision will be added by buildsystem)
sed -e "s|@ADDON_VERSION@|${ADDON_VERSION}|g" \
-i ${ADDON_BUILD}/${PKG_ADDON_ID}/addon.xml
cp -P ${PKG_INSTALL}/usr/bin/tvheadend ${ADDON_BUILD}/${PKG_ADDON_ID}/bin
cp -P ${PKG_INSTALL}/usr/lib/capmt_ca.so ${ADDON_BUILD}/${PKG_ADDON_ID}/bin
cp -P $(get_install_dir comskip)/usr/bin/comskip ${ADDON_BUILD}/${PKG_ADDON_ID}/bin
# dvb-scan files
mkdir -p ${ADDON_BUILD}/${PKG_ADDON_ID}/dvb-scan
cp -r $(get_install_dir tvh-dtv-scan-tables)/usr/share/dvbv5/* \
${ADDON_BUILD}/${PKG_ADDON_ID}/dvb-scan
}

@ -0,0 +1,11 @@
--- a/src/input/mpegts/scanfile.c
+++ b/src/input/mpegts/scanfile.c
@@ -921,7 +921,7 @@ scanfile_init ( const char *muxconf_path
#elif defined(PLATFORM_FREEBSD)
path = "/usr/local/share/dtv-scan-tables";
#else
- path = "/usr/share/dvb";
+ path = "/storage/.kodi/addons/service.tvheadend43/dvb-scan";
#endif
if (!initialized) {

@ -0,0 +1,35 @@
fix libhdhomerun includes
--- a/configure
+++ b/configure
@@ -419,7 +419,7 @@ if enabled hdhomerun_static; then
else
if enabled_or_auto hdhomerun_client; then
- if check_cc_header 'libhdhomerun/hdhomerun' libhdhomerun; then
+ if check_cc_header 'hdhomerun' libhdhomerun; then
enable hdhomerun_client
LDFLAGS="$LDFLAGS -lhdhomerun"
fi
--- a/src/input/mpegts/tvhdhomerun/tvhdhomerun.c
+++ b/src/input/mpegts/tvhdhomerun/tvhdhomerun.c
@@ -17,7 +17,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "libhdhomerun/hdhomerun.h"
+#include "hdhomerun.h"
#include "tvheadend.h"
#include "input.h"
--- a/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c
+++ b/src/input/mpegts/tvhdhomerun/tvhdhomerun_frontend.c
@@ -17,7 +17,7 @@
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
-#include "libhdhomerun/hdhomerun.h"
+#include "hdhomerun.h"
#include <fcntl.h>
#include "tvheadend.h"

@ -0,0 +1,76 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
if [ $# -lt 1 ]
then
. /etc/profile
ADDON_HOME="$HOME/.kodi/userdata/addon_data/service.tvheadend43"
ADDON_SETTINGS="$ADDON_HOME/settings.xml"
XML_SETTINGS_VER="$(xmlstarlet sel -t -m settings -v @version $ADDON_SETTINGS)"
if [ "$XML_SETTINGS_VER" = "2" ]; then
XMLTV_TYPE="$(xmlstarlet sel -t -v '/settings/setting[@id="XMLTV_TYPE"]' $ADDON_SETTINGS)"
XMLTV_LOCATION_FILE="$(xmlstarlet sel -t -v '/settings/setting[@id="XMLTV_LOCATION_FILE"]' $ADDON_SETTINGS)"
XMLTV_LOCATION_WEB="$(xmlstarlet sel -t -v '/settings/setting[@id="XMLTV_LOCATION_WEB"]' $ADDON_SETTINGS | xmlstarlet unesc)"
XMLTV_LOCATION_SCRIPT="$(xmlstarlet sel -t -v '/settings/setting[@id="XMLTV_LOCATION_SCRIPT"]' $ADDON_SETTINGS)"
else
XMLTV_TYPE="$(xmlstarlet sel -t -m '/settings/setting[@id="XMLTV_TYPE"]' -v @value $ADDON_SETTINGS)"
XMLTV_LOCATION_FILE="$(xmlstarlet sel -t -m '/settings/setting[@id="XMLTV_LOCATION_FILE"]' -v @value $ADDON_SETTINGS)"
XMLTV_LOCATION_WEB="$(xmlstarlet sel -t -m '/settings/setting[@id="XMLTV_LOCATION_WEB"]' -v @value $ADDON_SETTINGS | xmlstarlet unesc)"
XMLTV_LOCATION_SCRIPT="$(xmlstarlet sel -t -m '/settings/setting[@id="XMLTV_LOCATION_SCRIPT"]' -v @value $ADDON_SETTINGS)"
fi
if [ "$XMLTV_TYPE" = "FILE" ]; then
case "$XMLTV_LOCATION_FILE" in
*.gz | *.bz2 | *.xz)
zcat "$XMLTV_LOCATION_FILE"
;;
*)
cat "$XMLTV_LOCATION_FILE"
;;
esac
exit 0
elif [ "$XMLTV_TYPE" = "SCRIPT" ]; then
if [ -e "$XMLTV_LOCATION_SCRIPT" ] ; then
exec "$XMLTV_LOCATION_SCRIPT"
fi
elif [ "$XMLTV_TYPE" = "WEB" ]; then
case "$XMLTV_LOCATION_WEB" in
*.gz | *.bz2 | *.xz)
wget -qO - "$XMLTV_LOCATION_WEB" | zcat
;;
*)
wget -qO - "$XMLTV_LOCATION_WEB"
;;
esac
exit 0
fi
fi
dflag=
vflag=
cflag=
for a in "$@"
do
[ "$a" = "-d" -o "$a" = "--description" ] && dflag=1
[ "$a" = "-v" -o "$a" = "--version" ] && vflag=1
[ "$a" = "-c" -o "$a" = "--capabilities" ] && cflag=1
done
if [ -n "$dflag" ]
then
echo "tv_grab_file is a simple grabber that can be configured through the addon settings from Kodi"
fi
if [ -n "$vflag" ]
then
echo "1.0"
fi
if [ -n "$cflag" ]
then
echo "baseline"
fi

@ -0,0 +1,177 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
. /etc/profile
oe_setup_addon service.tvheadend43
ADDON_SETTINGS="$ADDON_HOME/settings.xml"
COMSKIP_DIR="$ADDON_HOME/comskip"
COMSKIP_SETTINGS_FILE="$COMSKIP_DIR/comskip.ini"
DVR_SETTINGS_DIR="$ADDON_HOME/dvr/config"
DVR_SETTINGS_FILE="$DVR_SETTINGS_DIR/8d0f5b7ae354d956d7fe5db25f5d0d24"
EPGGRAB_SETTINGS_DIR="$ADDON_HOME/epggrab"
EPGGRAB_SETTINGS_FILE="$EPGGRAB_SETTINGS_DIR/config"
TIMESHIFT_SETTINGS_DIR="$ADDON_HOME/timeshift"
TIMESHIFT_SETTINGS_FILE="$TIMESHIFT_SETTINGS_DIR/config"
TVH_SETTINGS_DIR="$ADDON_HOME"
TVH_SETTINGS_FILE="$TVH_SETTINGS_DIR/config"
XMLTV_SETTINGS_DIR="$ADDON_HOME/xmltv"
XMLTV_SETTINGS_FILE="$XMLTV_SETTINGS_DIR/config"
TIMESHIFT_DIR="$ADDON_HOME/cache/timeshift"
XMLTV_FILE="$ADDON_DIR/bin/tv_grab_file"
chmod a+x $ADDON_DIR/bin/*
# workaround to support old 4.1.x version upgrade for Tvh after 4.1.2369
if [ -f "$ADDON_HOME/dvr/config/dvr-config" ]; then
rm $ADDON_HOME/dvr/config/dvr-config
fi
# workaround to create default Tvh directories without entering samba share
if [ ! -d "/storage/recordings" ]; then
mkdir -p /storage/recordings /storage/picons/tvh /storage/picons/vdr
fi
if [ -f "$ADDON_HOME/channel/config/config.tmp" ]; then
rm $ADDON_HOME/channel/config/config.tmp
fi
if [ -f "$ADDON_HOME/channel/config/tag.tmp" ]; then
rm $ADDON_HOME/channel/config/tag.tmp
fi
# copy config files to userdata
if [ ! -f "$COMSKIP_SETTINGS_FILE" ]; then
mkdir -p $COMSKIP_DIR
cp $ADDON_DIR/defaults/comskip/comskip.ini $COMSKIP_SETTINGS_FILE
fi
if [ ! -f "$DVR_SETTINGS_FILE" ]; then
mkdir -p $DVR_SETTINGS_DIR
cp $ADDON_DIR/defaults/dvr/config/8d0f5b7ae354d956d7fe5db25f5d0d24 $DVR_SETTINGS_FILE
fi
if [ ! -f "$EPGGRAB_SETTINGS_FILE" ]; then
mkdir -p $EPGGRAB_SETTINGS_DIR
cp $ADDON_DIR/defaults/epggrab/config $EPGGRAB_SETTINGS_FILE
fi
if [ ! -f "$TIMESHIFT_SETTINGS_FILE" ]; then
mkdir -p $TIMESHIFT_DIR
mkdir -p $TIMESHIFT_SETTINGS_DIR
cp $ADDON_DIR/defaults/timeshift/config $TIMESHIFT_SETTINGS_FILE
fi
if [ ! -f "$TVH_SETTINGS_FILE" ]; then
mkdir -p $TVH_SETTINGS_DIR
cp $ADDON_DIR/defaults/config $TVH_SETTINGS_FILE
fi
if [ ! -f "$XMLTV_SETTINGS_FILE" ]; then
mkdir -p $XMLTV_SETTINGS_DIR
cp $ADDON_DIR/defaults/xmltv/config $XMLTV_SETTINGS_FILE
fi
# delayed Tvh startup
if [ "$WORKAROUND_SLEEP" == "true" ]; then
sleep $WORKAROUND_SLEEP_TIME
fi
# support FritzBox Sat>IP Server detection workaround for AVM-Repeater and AVM-6490
if [ "$AVM_SATIP_SERVER" == "true" ]; then
if [ "$AVM_DEVICE" == "AVM_Repeater" ]; then
AVM_SATIP="--satip_xml http://${AVM_ROUTER_IP}:49000/satipdesc.xml"
fi
if [ "$AVM_DEVICE" == "AVM_6490" ]; then
AVM_SATIP="--satip_xml http://${AVM_ROUTER_FAKE_IP}:49000/satipdesc.xml"
AVM_NUM="4"
fi
# add virtual ip as workaround for AVM limitation of one stream per ip
# AVM-Repeater (2 tuners)
ip address add ${AVM_IP1}/24 dev $AVM_ETH
ip address add ${AVM_IP2}/24 dev $AVM_ETH
# AVM-6490 (4 tuners)
if [ "$AVM_NUM" = "4" ]; then
ip address add ${AVM_IP3}/24 dev $AVM_ETH
ip address add ${AVM_IP4}/24 dev $AVM_ETH
fi
fi
# custom startup parameters
if [ "$CUSTOM_START" != "true" ]; then
CUSTOM_ARGS=""
fi
# debug value generation
if [ "$DEBUG_LOG_TRACE_1" != "NONE" ]; then
DEBUG_LOG_ARG="$DEBUG_LOG_TRACE_1"
fi
if [ "$DEBUG_LOG_TRACE_2" != "NONE" ]; then
DEBUG_LOG_ARG="$DEBUG_LOG_ARG,$DEBUG_LOG_TRACE_2"
fi
if [ "$DEBUG_LOG_TRACE_3" != "NONE" ]; then
DEBUG_LOG_ARG="$DEBUG_LOG_ARG,$DEBUG_LOG_TRACE_3"
fi
if [ "$DEBUG_LOG_TRACE_4" != "NONE" ]; then
DEBUG_LOG_ARG="$DEBUG_LOG_ARG,$DEBUG_LOG_TRACE_4"
fi
if [ "$DEBUG_LOG_TRACE_5" != "NONE" ]; then
DEBUG_LOG_ARG="$DEBUG_LOG_ARG,$DEBUG_LOG_TRACE_5"
fi
# if debuglog is activated and nothing selected to trace
if [ -z "$DEBUG_LOG_ARG" ];then
DEBUG_LOG_ARG="all"
fi
# rename debuglog if already exist to prevent overwriting after crash
if [ -f "${DEBUG_LOG_PATH}" ]; then
cp ${DEBUG_LOG_PATH} ${DEBUG_LOG_PATH}_$(date '+%Y-%m-%d_%H.%M.%S').txt
fi
# debug commandline
if [ "$DEBUG_LOG" = "true" ]; then
TVHEADEND_ARG="-B -C -u root -g video -c $ADDON_HOME $AVM_SATIP $CUSTOM_ARGS -l ${DEBUG_LOG_PATH} --trace $DEBUG_LOG_ARG"
else
TVHEADEND_ARG="-B -C -u root -g video -c $ADDON_HOME $AVM_SATIP $CUSTOM_ARGS"
fi
# start userspace DVB driver/addon
for driver_dvb in $(find /storage/.kodi/addons/driver.dvb.*/bin/userspace-driver.sh -type f 2>/dev/null); do
driver_dvb_name=$(echo $driver_dvb | awk 'BEGIN {FS="/"} {printf("%s", $5)}')
logger -t Tvheadend "### Loading userspace DVB driver: $driver_dvb_name ###"
# use ". " because of variable export
. $driver_dvb
done
if [ "$WAIT_FOR_FEINIT" == "true" ] ; then
while [ true ] ; do
if [ -e /dev/dvb/adapter$((NUM_ADAPTERS-1))/frontend0 ] ; then
break
fi
sleep 1
done
fi
if [ "$PRELOAD_CAPMT_CA" == "true" ] ; then
logger -t Tvheadend "### Preloading capmt_ca.so library ###"
LD_PRELOAD="$ADDON_DIR/bin/capmt_ca.so $LD_PRELOAD" exec $ADDON_DIR/bin/tvheadend $TVHEADEND_ARG &>$ADDON_LOG_FILE
else
exec $ADDON_DIR/bin/tvheadend $TVHEADEND_ARG &>$ADDON_LOG_FILE
fi

@ -0,0 +1,20 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
import subprocess
import xbmc
import xbmcaddon
class Monitor(xbmc.Monitor):
def __init__(self, *args, **kwargs):
xbmc.Monitor.__init__(self)
self.id = xbmcaddon.Addon().getAddonInfo('id')
def onSettingsChanged(self):
subprocess.call(['systemctl', 'restart', self.id])
if __name__ == "__main__":
Monitor().waitForAbort()

@ -0,0 +1,83 @@
; See comskip.txt in the distribution zip file for many settable parameters, read manual.html, tuning.html and debugwindow.html for how to tune and debug comskip
edl_mode=3 ; the mode specified in the generated edl file, 0=cut, 3=commercial break
mkv_time_offset=30.0 ; offset in seconds, to work around what appears to be an Kodi or ffmpeg bug
always_keep_first_seconds=2 ; Kodi has a bug that causes a segfault if we don't keep the start of the stream, I'll fix that when I get a chance
detect_method=43 ; 1=black frame, 2=logo, 4=scene change, 8=fuzzy logic, 16=closed captions, 32=aspect ration, 64=silence, 128=cutscenes, 255=all
validate_silence=1 ; Default, set to 0 to force using this clues if selected above.
validate_uniform=1 ; Default, set to 0 to force using this clues (like pure white frames) if blackframe is selected above.
validate_scenechange=1 ; Default, set to 0 to force using this clues if selected above.
verbose=10 ; show a lot of extra info, level 5 is also OK, set to 0 to disable
max_brightness=60 ; frame not black if any pixels checked are greater than this (scale 0 to 255)
test_brightness=40 ; frame not pure black if any pixels checked are greater than this, will check average brightness (scale 0 to 255)
max_avg_brightness=25 ; maximum average brightness for a dim frame to be considered black (scale 0 to 255) 0 means autosetting
max_commercialbreak=600 ; maximum length in seconds to consider a segment a commercial break
min_commercialbreak=25 ; minimum length in seconds to consider a segment a commercial break
max_commercial_size=125 ; maximum time in seconds for a single commercial or multiple commercials if no breaks in between
min_commercial_size=4 ; mimimum time in seconds for a single commercial
min_show_segment_length=250 ; any segment longer than this will be scored towards show.
non_uniformity=500 ; Set to 0 to disable cutpoints based on uniform frames
max_volume=500 ; any frame with sound volume larger than this will not be regarded as black frame
min_silence=12 ; Any deep silence longer than this amount of frames is a possible cutpoint
ticker_tape=0 ; Amount of pixels from bottom to ignore in all processing
logo_at_bottom=0 ; Set to 1 to search only for logo at the lower half of the video, do not combine with subtitle setting
punish=0 ; Compare to average for sum of 1=brightness, 2=uniform 4=volume, 8=silence, 16=schange, set to 0 to disable
punish_threshold=1.3 ; Multiply when amount is above average * punish_threshold
punish_modifier=2 ; When above average * threshold multiply score by this value
intelligent_brightness=0 ; Set to 1 to use a USA specific algorithm to tune some of the settings, not adviced outside the USA
logo_percentile=0.92 ; if more then this amount of logo is found then logo detection will be disabled
logo_threshold=0.75
punish_no_logo=1 ; Default, set to 0 to avoid show segments without logo to be scored towards commercial
aggressive_logo_rejection=0
connect_blocks_with_logo=1 ; set to 1 if you want successive blocks with logo on the transition to be regarded as connected, set to 0 to disable
logo_filter=0 ; set the size of the filter to apply to bad logo detection, 4 seems to be a good value.
cut_on_ar_change=1 ; set to 1 if you want to cut also on aspect ratio changes when logo is present, set to 2 to force cuts on aspect ratio changes. set to 0 to disable
delete_show_after_last_commercial=0 ; set to 1 if you want to delete the last block if its a show and after a commercial
delete_show_before_or_after_current=0 ; set to 1 if you want to delete the previous and the next show in the recording, this can lead to the deletion of trailers of next show
delete_block_after_commercial=0 ; set to max size of block in seconds to be discarded, set to 0 to disable
remove_before=0 ; amount of seconds of show to be removed before ALL commercials
remove_after=0 ; amount of seconds of show to be removed after ALL commercials
shrink_logo=5 ; Reduce the duration of the logo with this amount of seconds
after_logo=0 ; set to number of seconds after logo disappears comskip should start to search for silence to insert an additional cutpoint
padding=0
ms_audio_delay=5
volume_slip=40
skip_b_frames=0 ; Set to 1 to force Comskip to skip frames for higher processing speed.
hardware_decode=0 ; Set to 1 to enable hardware accelerated video decoding, only available in donator version
max_repair_size=200 ; Will repair maximum 200 missing MPEG frames in the timeline, set to 0 to disable repairing for players that don't use PTS.
disable_heuristics=4 ; bit pattern for disabling heuristics, adding 1 disables heristics 1, adding 2 disables heristics 2, adding 4 disables heristics 3, 255 disables all heuristics
delete_logo_file=0 ; set to 1 if you want comskip to tidy up after finishing
output_framearray=0 ; create a big excel file for detailed analysis, set to 0 to disable
output_data=0 ; create a dump of the user data channel, used for CC and XDS (such as V-Chip info). Can be use together with output_framearray to remote debug CC decoding
output_videoredo=0 ; The old videoredo format
output_videoredo3=0 ; The new videoredo v3 format.
output_womble=0
output_mls=0 ; set to 1 if you want MPeg Video Wizard bookmark file output
output_cuttermaran=0
output_mpeg2schnitt=0
output_mpgtx=0
output_dvrcut=0
output_zoomplayer_chapter=0
output_zoomplayer_cutlist=0
output_edl=1
output_dvrmstb=0 ; Set to 1 if you're running DVRMS-Toolbox
output_edlx=0
output_vcf=0
output_bsplayer=0
output_btv=0 ; set to 1 if you want Beyond TV chapter cutlist output
output_projectx=0 ; set to 1 if you want ProjectX cutlist output (Xcl)
output_avisynth=0
output_vdr=1 ; set to 1 if you want Kodi to skipping commercials
output_demux=0 ; set to 1 if you want comskip to demux the mpeg file while scanning
sage_framenumber_bug=0
sage_minute_bug=0
live_tv=0 ; set to 1 if you use parallelprocessing and need the output while recording
live_tv_retries=4 ; change to 16 when using live_tv in BTV, used for mpeg PS and TS
dvrms_live_tv_retries=300 ; only used for dvr_ms
standoff=0 ; change to 8000000 when using live_tv in BTV
cuttermaran_options="cut=\"true\" unattended=\"true\" muxResult=\"false\" snapToCutPoints=\"true\" closeApp=\"true\""
mpeg2schnitt_options="mpeg2schnitt.exe /S /E /R25 /Z %2 %1"
avisynth_options="LoadPlugin(\"MPEG2Dec3.dll\") \nMPEG2Source(\"%s\")\n"
dvrcut_options="dvrcut \"%s.dvr-ms\" \"%s_clean.dvr-ms\" "
windowtitle="Comskip - %s"

@ -0,0 +1,14 @@
{
"wizard": "hello",
"uilevel": 1,
"uilevel_nochange": true,
"ui_quicktips": true,
"cookie_expires": 14,
"caclient_ui": true,
"epg_compress": true,
"prefer_picon": true,
"chiconpath": "file:///storage/picons/tvh/%C.png",
"chiconscheme": 2,
"piconpath": "file:///storage/picons/vdr/",
"piconscheme": 1
}

@ -0,0 +1,18 @@
{
"storage": "/storage/recordings",
"retention-days": 2147483646,
"removal-days": 2147483647,
"pre-extra-time": 0,
"post-extra-time": 0,
"day-dir": false,
"channel-dir": false,
"channel-in-title": true,
"date-in-title": true,
"time-in-title": true,
"whitespace-in-title": false,
"title-dir": true,
"episode-in-title": true,
"tag-files": true,
"windows-compatible-filenames": true,
"charset": "UTF-8"
}

@ -0,0 +1,79 @@
{
"channel_rename": true,
"channel_renumber": false,
"channel_reicon": false,
"epgdb_periodicsave": 2,
"ota_initial": true,
"modules": {
"opentv-skyit": {
"class": "epggrab_mod_ota",
"name": "OpenTV: Sky Italia",
"type": "Over-the-air",
"enabled": true,
"priority": 2
},
"opentv-skynz": {
"class": "epggrab_mod_ota",
"name": "OpenTV: Sky NZ",
"type": "Over-the-air",
"enabled": true,
"priority": 2
},
"opentv-skyuk": {
"class": "epggrab_mod_ota",
"name": "OpenTV: Sky UK",
"type": "Over-the-air",
"enabled": true,
"priority": 2
},
"opentv-ausat": {
"class": "epggrab_mod_ota",
"name": "OpenTV: Ausat",
"type": "Over-the-air",
"enabled": true,
"priority": 2
},
"psip": {
"class": "epggrab_mod_ota",
"name": "PSIP: ATSC Grabber",
"type": "Over-the-air",
"enabled": true,
"priority": 1
},
"Bulsatcom_39E": {
"class": "epggrab_mod_ota",
"name": "Bulsatcom: Bula 39E",
"type": "Over-the-air",
"enabled": true,
"priority": 5
},
"viasat_baltic": {
"class": "epggrab_mod_ota",
"name": "VIASAT: Baltic",
"type": "Over-the-air",
"enabled": true,
"priority": 5
},
"uk_freeview": {
"class": "epggrab_mod_ota",
"name": "UK: Freeview",
"type": "Over-the-air",
"enabled": true,
"priority": 5
},
"uk_freesat": {
"class": "epggrab_mod_ota",
"name": "UK: Freesat",
"type": "Over-the-air",
"enabled": true,
"priority": 5
},
"eit": {
"class": "epggrab_mod_ota",
"name": "EIT: DVB Grabber",
"type": "Over-the-air",
"enabled": true,
"priority": 1
}
}
}

@ -0,0 +1,9 @@
{
"enabled": 0,
"ondemand": 0,
"path": "/storage/.kodi/userdata/addon_data/service.tvheadend43/cache/timeshift",
"unlimited_period": 0,
"max_period": 3600,
"unlimited_size": 0,
"max_size": 3072
}

@ -0,0 +1,14 @@
{
"grabbers": [
{
"path": "/storage/.kodi/addons/service.tvheadend43/bin/tv_grab_file",
"description": "tv_grag_file is a simple grabber that just read the ~/.xmltv/tv_grab_file.xmltv file",
"version": "0.1\n",
"mtime": 1318774706,
"capabilities": 1
}
],
"grab-interval": 12,
"grab-enabled": 1,
"current-grabber": "/storage/.kodi/addons/service.tvheadend43/bin/tv_grab_file"
}

@ -0,0 +1,67 @@
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2018-present Team LibreELEC (https://libreelec.tv)
import urllib.request, urllib.parse, urllib.error, os, zipfile
from urllib.error import URLError
import xbmc, xbmcvfs, xbmcgui, xbmcaddon
import shutil
import sys
url = 'https://github.com/tvheadend/dtv-scan-tables/archive/tvheadend.zip'
temp = xbmcvfs.translatePath('special://temp')
temp_folder = os.path.join(temp, 'dtv-scan-tables-tvheadend')
dest_folder = os.path.join(xbmcvfs.translatePath(xbmcaddon.Addon().getAddonInfo('path')), 'dvb-scan')
archive = os.path.join(temp, 'dtv_scantables.zip')
ADDON_NAME = xbmcaddon.Addon().getAddonInfo('name')
LS = xbmcaddon.Addon().getLocalizedString
SCANTABLES = ['atsc', 'channels-conf', 'dvb-c', 'dvb-s', 'dvb-t', 'isdb-t']
class DownLoader():
def __init__(self):
self.dp = xbmcgui.DialogProgressBG()
def download(self, url, dest):
try:
self.dp.create(ADDON_NAME, LS(30042))
urllib.request.urlretrieve(url, dest, reporthook=self._pbhook)
self.dp.close()
zip = zipfile.ZipFile(archive)
if zip.testzip() is not None: raise zipfile.BadZipfile
if os.path.exists(temp_folder): shutil.rmtree(temp_folder)
if os.path.exists(dest_folder): shutil.rmtree(dest_folder)
self.dp.create(ADDON_NAME, LS(30043))
for idx, folder in enumerate(SCANTABLES):
self._pbhook(idx, 1, len(SCANTABLES) - 1)
for z in zip.filelist:
if folder in z.filename: zip.extract(z.filename, temp)
self.dp.close()
for folder in SCANTABLES:
shutil.copytree(os.path.join(temp_folder, folder), os.path.join(dest_folder, folder))
xbmcgui.Dialog().notification(ADDON_NAME, LS(30039), xbmcgui.NOTIFICATION_INFO)
except URLError as e:
xbmc.log('Could not download file: %s' % e.reason, xbmc.LOGERROR)
self.dp.close()
xbmcgui.Dialog().notification(ADDON_NAME, LS(30040), xbmcgui.NOTIFICATION_ERROR)
except zipfile.BadZipfile:
xbmc.log('Could not extract files from zip, bad zipfile', xbmc.LOGERROR)
xbmcgui.Dialog().notification(ADDON_NAME, LS(30041), xbmcgui.NOTIFICATION_ERROR)
def _pbhook(self, numblocks, blocksize, filesize):
percent = int((numblocks * blocksize * 100) / filesize)
self.dp.update(percent)
if __name__ == '__main__':
try:
if sys.argv[1] == 'getscantables':
dl = DownLoader()
dl.download(url, archive)
except IndexError:
pass

@ -0,0 +1,182 @@
# Kodi Media Center language file
# Addon Name: tvheadend43
# Addon id: service.tvheadend43
# Addon Provider: Team LibreELEC
msgid ""
msgstr ""
msgctxt "#30000"
msgid "XMLTV"
msgstr ""
msgctxt "#30001"
msgid "DVB"
msgstr ""
msgctxt "#30002"
msgid "DEBUG"
msgstr ""
msgctxt "#30003"
msgid "FRITZ!Box Sat>IP"
msgstr ""
msgctxt "#30004"
msgid "XMLTV Configuration"
msgstr ""
msgctxt "#30005"
msgid "XMLTV source type"
msgstr ""
msgctxt "#30006"
msgid "XMLTV File location"
msgstr ""
msgctxt "#30007"
msgid "XMLTV Web location"
msgstr ""
msgctxt "#30008"
msgid "XMLTV Script location"
msgstr ""
msgctxt "#30009"
msgid "DVB Configuration"
msgstr ""
msgctxt "#30010"
msgid "Unload DVB modules before suspend"
msgstr ""
msgctxt "#30011"
msgid "Wait for frontend initialization"
msgstr ""
msgctxt "#30012"
msgid "Number of adapters to wait for"
msgstr ""
msgctxt "#30013"
msgid "Preload capmt_ca.so library"
msgstr ""
msgctxt "#30014"
msgid "Delay the start of Tvheadend"
msgstr ""
msgctxt "#30015"
msgid "Seconds delay"
msgstr ""
msgctxt "#30016"
msgid "Custom start parameter"
msgstr ""
msgctxt "#30017"
msgid "Parameter"
msgstr ""
msgctxt "#30018"
msgid "FRITZ!Box Sat>IP server"
msgstr ""
msgctxt "#30019"
msgid "AVM device"
msgstr ""
msgctxt "#30020"
msgid "IP of the AVM Repeater"
msgstr ""
msgctxt "#30021"
msgid "Router IP range (last digits are always .254)"
msgstr ""
msgctxt "#30022"
msgid "Used network"
msgstr ""
msgctxt "#30023"
msgid "Virtual IP #1"
msgstr ""
msgctxt "#30024"
msgid "Virtual IP #2"
msgstr ""
msgctxt "#30025"
msgid "Virtual IP #3"
msgstr ""
msgctxt "#30026"
msgid "Virtual IP #4"
msgstr ""
msgctxt "#30027"
msgid "TRACE Configuration"
msgstr ""
msgctxt "#30028"
msgid "Path"
msgstr ""
msgctxt "#30029"
msgid "Activate TRACE Debug"
msgstr ""
msgctxt "#30030"
msgid "Debug Value #1"
msgstr ""
msgctxt "#30031"
msgid "Debug Value #2"
msgstr ""
msgctxt "#30032"
msgid "Debug Value #3"
msgstr ""
msgctxt "#30033"
msgid "Debug Value #4"
msgstr ""
msgctxt "#30034"
msgid "Debug Value #5"
msgstr ""
msgctxt "#30035"
msgid "FRITZ!Box Configuration for FRITZ!OS 6.x (do not use for 7.x)"
msgstr ""
msgctxt "#30036"
msgid "Scan Tables"
msgstr ""
msgctxt "#30037"
msgid "Manage Scan-Tables"
msgstr ""
msgctxt "#30038"
msgid "Download and install Scan-Tables"
msgstr ""
msgctxt "#30039"
msgid "Download completed, tables installed"
msgstr ""
msgctxt "#30040"
msgid "Could not download Scan-Tables"
msgstr ""
msgctxt "#30041"
msgid "Could not extract zip files"
msgstr ""
msgctxt "#30042"
msgid "Download Scan-Tables"
msgstr ""
msgctxt "#30043"
msgid "Extract Scan-Tables"
msgstr ""

Binary file not shown.

After

(image error) Size: 128 KiB

Binary file not shown.

After

(image error) Size: 136 KiB

Binary file not shown.

After

(image error) Size: 167 KiB

Binary file not shown.

After

(image error) Size: 77 KiB

@ -0,0 +1,55 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<settings>
<!-- HTS TVHEADEND -->
<category label="30000">
<setting label="30004" type="lsep"/>
<setting type="sep" />
<setting id="XMLTV_TYPE" type="labelenum" label="30005" values="NONE|FILE|SCRIPT|WEB" sort="yes" default="NONE"/>
<setting id="XMLTV_LOCATION_FILE" type="file" label="30006" default="" enable="eq(-1,0)"/>
<setting id="XMLTV_LOCATION_WEB" type="text" label="30007" default="http://" enable="eq(-2,3)"/>
<setting id="XMLTV_LOCATION_SCRIPT" type="file" label="30008" default="" enable="eq(-3,2)"/>
</category>
<category label="30001">
<setting label="30009" type="lsep"/>
<setting type="sep" />
<setting id="WAIT_FOR_FEINIT" type="bool" label="30011" default="false" />
<setting id="NUM_ADAPTERS" type="slider" range="1,16" option="int" label="30012" default="1" enable="eq(-1,true)" />
<setting id="REMOVE_MODULES" type="text" label="30010" values="" default=""/>
<setting id="PRELOAD_CAPMT_CA" type="bool" label="30013" default="false" />
<setting id="WORKAROUND_SLEEP" type="bool" label="30014" default="false" />
<setting id="WORKAROUND_SLEEP_TIME" type="slider" range="1,30" option="int" label="30015" default="1" enable="eq(-1,true)" />
</category>
<category label="30002">
<setting label="30027" type="lsep"/>
<setting type="sep" />
<setting id="DEBUG_LOG" type="bool" label="30029" default="false" />
<setting type="sep" />
<setting id="DEBUG_LOG_PATH" type="text" label="30028" default="/storage/.kodi/userdata/addon_data/service.tvheadend43/debug.txt" enable="eq(-2,true)"/>
<setting id="DEBUG_LOG_TRACE_1" type="select" default="NONE" visible="eq(-3,true)" enable="eq(-3,true)" label="30030" values="NONE|all|access|api|avahi|bat|bonjour|bouquet|caclient|capmt|channel|charset|config|CPU|cron|csa|cwc|dbus|descrambler|diseqc|dvb|dvbcam|dvr|epg|epgdb|epggrab|esfilter|fastscan|fsmonitor|globalheaders|gtimer|hevc|htsp|htsp-ans|htsp-req|htsp-sub|http|httpc|idnode|imagecache|iptv|iptv-pcr|libav|linuxdvb|lock|main|mkv|mpegts|mtimer|muxer|muxsched|opentv|parser|pass|pat|pmt|profile|psip|pyepg|rtsp|satip|satips|scanfile|service|service-mapper|settings|spawn|subscription|tbl|tbl-atsc|tbl-base|tbl-csa|tbl-eit|tbl-pass|tbl-satip|tbl-time|tcp|thread|time|timeshift|transcode|TS|tsfile|tsfix|tvhdhomerun|tvhpoll|upnp|url|uuid|webui|xmltv" />
<setting id="DEBUG_LOG_TRACE_2" type="select" default="NONE" visible="eq(-4,true)" enable="!eq(-1,NONE)+eq(-4,true)" label="30031" values="NONE|access|api|avahi|bat|bonjour|bouquet|caclient|capmt|channel|charset|config|CPU|cron|csa|cwc|dbus|descrambler|diseqc|dvb|dvbcam|dvr|epg|epgdb|epggrab|esfilter|fastscan|fsmonitor|globalheaders|gtimer|hevc|htsp|htsp-ans|htsp-req|htsp-sub|http|httpc|idnode|imagecache|iptv|iptv-pcr|libav|linuxdvb|lock|main|mkv|mpegts|mtimer|muxer|muxsched|opentv|parser|pass|pat|pmt|profile|psip|pyepg|rtsp|satip|satips|scanfile|service|service-mapper|settings|spawn|subscription|tbl|tbl-atsc|tbl-base|tbl-csa|tbl-eit|tbl-pass|tbl-satip|tbl-time|tcp|thread|time|timeshift|transcode|TS|tsfile|tsfix|tvhdhomerun|tvhpoll|upnp|url|uuid|webui|xmltv" />
<setting id="DEBUG_LOG_TRACE_3" type="select" default="NONE" visible="eq(-5,true)" enable="!eq(-1,NONE)+!eq(-2,NONE)+eq(-5,true)" label="30032" values="NONE|access|api|avahi|bat|bonjour|bouquet|caclient|capmt|channel|charset|config|CPU|cron|csa|cwc|dbus|descrambler|diseqc|dvb|dvbcam|dvr|epg|epgdb|epggrab|esfilter|fastscan|fsmonitor|globalheaders|gtimer|hevc|htsp|htsp-ans|htsp-req|htsp-sub|http|httpc|idnode|imagecache|iptv|iptv-pcr|libav|linuxdvb|lock|main|mkv|mpegts|mtimer|muxer|muxsched|opentv|parser|pass|pat|pmt|profile|psip|pyepg|rtsp|satip|satips|scanfile|service|service-mapper|settings|spawn|subscription|tbl|tbl-atsc|tbl-base|tbl-csa|tbl-eit|tbl-pass|tbl-satip|tbl-time|tcp|thread|time|timeshift|transcode|TS|tsfile|tsfix|tvhdhomerun|tvhpoll|upnp|url|uuid|webui|xmltv" />
<setting id="DEBUG_LOG_TRACE_4" type="select" default="NONE" visible="eq(-6,true)" enable="!eq(-1,NONE)+!eq(-2,NONE)+!eq(-3,NONE)+eq(-6,true)" label="30033" values="NONE|access|api|avahi|bat|bonjour|bouquet|caclient|capmt|channel|charset|config|CPU|cron|csa|cwc|dbus|descrambler|diseqc|dvb|dvbcam|dvr|epg|epgdb|epggrab|esfilter|fastscan|fsmonitor|globalheaders|gtimer|hevc|htsp|htsp-ans|htsp-req|htsp-sub|http|httpc|idnode|imagecache|iptv|iptv-pcr|libav|linuxdvb|lock|main|mkv|mpegts|mtimer|muxer|muxsched|opentv|parser|pass|pat|pmt|profile|psip|pyepg|rtsp|satip|satips|scanfile|service|service-mapper|settings|spawn|subscription|tbl|tbl-atsc|tbl-base|tbl-csa|tbl-eit|tbl-pass|tbl-satip|tbl-time|tcp|thread|time|timeshift|transcode|TS|tsfile|tsfix|tvhdhomerun|tvhpoll|upnp|url|uuid|webui|xmltv" />
<setting id="DEBUG_LOG_TRACE_5" type="select" default="NONE" visible="eq(-7,true)" enable="!eq(-1,NONE)+!eq(-2,NONE)+!eq(-3,NONE)+!eq(-4,NONE)+eq(-7,true)" label="30034" values="NONE|access|api|avahi|bat|bonjour|bouquet|caclient|capmt|channel|charset|config|CPU|cron|csa|cwc|dbus|descrambler|diseqc|dvb|dvbcam|dvr|epg|epgdb|epggrab|esfilter|fastscan|fsmonitor|globalheaders|gtimer|hevc|htsp|htsp-ans|htsp-req|htsp-sub|http|httpc|idnode|imagecache|iptv|iptv-pcr|libav|linuxdvb|lock|main|mkv|mpegts|mtimer|muxer|muxsched|opentv|parser|pass|pat|pmt|profile|psip|pyepg|rtsp|satip|satips|scanfile|service|service-mapper|settings|spawn|subscription|tbl|tbl-atsc|tbl-base|tbl-csa|tbl-eit|tbl-pass|tbl-satip|tbl-time|tcp|thread|time|timeshift|transcode|TS|tsfile|tsfix|tvhdhomerun|tvhpoll|upnp|url|uuid|webui|xmltv" />
<setting type="sep" />
<setting id="CUSTOM_START" type="bool" label="30016" default="false" />
<setting id="CUSTOM_ARGS" type="text" label="30017" default="" enable="eq(-1,true)" />
</category>
<category label="30003">
<setting label="30035" type="lsep"/>
<setting type="sep" />
<setting id="AVM_SATIP_SERVER" type="bool" label="30018" default="false"/>
<setting id="AVM_DEVICE" type="labelenum" label="30019" values="AVM_Repeater|AVM_6490" visible="eq(-1,true)"/>
<setting id="AVM_ROUTER_IP" type="ipaddress" label="30020" default="192.168.178.2" visible="eq(-2,true)+eq(-1,0)"/>
<setting id="AVM_ROUTER_FAKE_IP" type="ipaddress" label="30021" default="192.168.178.254" visible="eq(-3,true)+eq(-2,1)"/>
<setting id="AVM_ETH" type="labelenum" label="30022" default="eth0" visible="eq(-4,true)" values="eth0|wlan0|eth1|wlan1" />
<setting type="sep" visible="eq(-5,true)"/>
<setting id="AVM_IP1" type="ipaddress" label="30023" default="192.168.178.201" visible="eq(-6,true)"/>
<setting id="AVM_IP2" type="ipaddress" label="30024" default="192.168.178.202" visible="eq(-7,true)"/>
<setting id="AVM_IP3" type="ipaddress" label="30025" default="192.168.178.203" visible="eq(-8,true)+eq(-7,1)"/>
<setting id="AVM_IP4" type="ipaddress" label="30026" default="192.168.178.204" visible="eq(-9,true)+eq(-8,1)"/>
</category>
<category label="30036">
<setting label="30037" type="lsep"/>
<setting id="DOWNLOAD_SCAN_TABLES" type="action" label="30038" option="close" action="RunScript(service.tvheadend43,getscantables)"/>
</category>
</settings>

@ -0,0 +1,31 @@
<settings version="2">
<setting id="AVM_DEVICE" default="true"></setting>
<setting id="AVM_ETH" default="true">eth0</setting>
<setting id="AVM_IP1" default="true">192.168.178.201</setting>
<setting id="AVM_IP2" default="true">192.168.178.202</setting>
<setting id="AVM_IP3" default="true">192.168.178.203</setting>
<setting id="AVM_IP4" default="true">192.168.178.204</setting>
<setting id="AVM_ROUTER_FAKE_IP" default="true">192.168.178.254</setting>
<setting id="AVM_ROUTER_IP" default="true">192.168.178.2</setting>
<setting id="AVM_SATIP_SERVER" default="true">false</setting>
<setting id="CUSTOM_ARGS" default="true"></setting>
<setting id="CUSTOM_START" default="true">false</setting>
<setting id="DEBUG_LOG" default="true">false</setting>
<setting id="DEBUG_LOG_PATH" default="true">/storage/.kodi/userdata/addon_data/service.tvheadend43/debug.txt</setting>
<setting id="DEBUG_LOG_TRACE_1" default="true">NONE</setting>
<setting id="DEBUG_LOG_TRACE_2" default="true">NONE</setting>
<setting id="DEBUG_LOG_TRACE_3" default="true">NONE</setting>
<setting id="DEBUG_LOG_TRACE_4" default="true">NONE</setting>
<setting id="DEBUG_LOG_TRACE_5" default="true">NONE</setting>
<setting id="DOWNLOAD_SCAN_TABLES" default="true"></setting>
<setting id="NUM_ADAPTERS">1</setting>
<setting id="PRELOAD_CAPMT_CA" default="true">false</setting>
<setting id="REMOVE_MODULES" default="true"></setting>
<setting id="WAIT_FOR_FEINIT" default="true">false</setting>
<setting id="WORKAROUND_SLEEP" default="true">false</setting>
<setting id="WORKAROUND_SLEEP_TIME">1</setting>
<setting id="XMLTV_LOCATION_FILE" default="true"></setting>
<setting id="XMLTV_LOCATION_SCRIPT" default="true"></setting>
<setting id="XMLTV_LOCATION_WEB" default="true">http://</setting>
<setting id="XMLTV_TYPE" default="true">NONE</setting>
</settings>

@ -0,0 +1,29 @@
#!/bin/sh
# SPDX-License-Identifier: GPL-2.0
# Copyright (C) 2016-present Team LibreELEC (https://libreelec.tv)
. /etc/profile
oe_setup_addon service.tvheadend43
SERVICE="service.tvheadend43"
case "$1" in
pre)
if systemctl is-active "$SERVICE" &>/dev/null ; then
systemctl stop "$SERVICE"
for module in $REMOVE_MODULES ; do
rmmod $module
done
fi
;;
post)
if systemctl is-enabled "$SERVICE" &>/dev/null ; then
for module in $REMOVE_MODULES ; do
modprobe $module
done
systemctl start "$SERVICE"
fi
;;
esac

@ -0,0 +1,13 @@
[Unit]
Description=TVHeadend43 Service
After=network-online.service
[Service]
ExecStart=/bin/sh -c "exec sh /storage/.kodi/addons/service.tvheadend43/bin/tvheadend43.start"
TimeoutStopSec=2
Restart=always
RestartSec=2
StartLimitInterval=0
[Install]
WantedBy=kodi.target