Add files via upload
This commit is contained in:
125
tvheadend/DOCS.md
Normal file
125
tvheadend/DOCS.md
Normal file
@@ -0,0 +1,125 @@
|
|||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
|
||||||
|
TVHeadend is a TV streaming server and recorder supporting:
|
||||||
|
DVB-S, DVB-S2, DVB-C, DVB-T, DVB-T2, ATSC, ISDB-T, IPTV, SAT>IP and HDHomeRun
|
||||||
|
as input sources.
|
||||||
|
TVHeadend offers the HTTP (VLC, MPlayer), HTSP (Kodi, Movian) and SAT>IP streaming.
|
||||||
|
|
||||||
|
Multiple EPG sources are supported such as
|
||||||
|
over-the-air DVB and ATSC including OpenTV DVB extensions, XMLTV, PyXML.
|
||||||
|
|
||||||
|
Have included the following along with TVHeadend:
|
||||||
|
-Webgrab+
|
||||||
|
-Streamlink
|
||||||
|
|
||||||
|
## Installation
|
||||||
|
|
||||||
|
The installation of this add-on is pretty straightforward and not different in
|
||||||
|
comparison to installing any other Home Assistant add-on.
|
||||||
|
|
||||||
|
1. Add this repository to have addons by GauthamVarmaK:
|
||||||
|
[![Home Assistant with repository URL pre-filled][my-ha-shield]][my-ha-repo]
|
||||||
|
1. Search for the "TVHeadend" add-on in the Supervisor add-on store and install it.
|
||||||
|
1. Start the "TVHeadend" add-on.
|
||||||
|
1. Check the logs of the "TVHeadend" to see if everything went well.
|
||||||
|
1. Click the "OPEN WEB UI" button and start using it.
|
||||||
|
1. Ready to go!
|
||||||
|
|
||||||
|
## Configuration
|
||||||
|
|
||||||
|
**Note**: _Remember to restart the add-on when the configuration is changed._
|
||||||
|
|
||||||
|
Example add-on configuration:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
system_packages:
|
||||||
|
- ffmpeg
|
||||||
|
init_commands:
|
||||||
|
- echo 'Hello World'
|
||||||
|
```
|
||||||
|
|
||||||
|
**Note**: _This is just an example, don't copy and paste it! Create your own!_
|
||||||
|
|
||||||
|
### Option: `system_packages`
|
||||||
|
|
||||||
|
Allows you to specify additional [Alpine packages][alpine-packages] to be
|
||||||
|
installed to the TVHeadend Addon (e.g., `ffmpeg`, `g++`, etc. ).
|
||||||
|
|
||||||
|
**Note**: _Adding many packages will result in a longer start-up time for the add-on._
|
||||||
|
|
||||||
|
### Option: `init_commands`
|
||||||
|
|
||||||
|
Customize your TVHeadend environment even more with the `init_commands` option.
|
||||||
|
Add one or more shell commands to the list, and they will be executed
|
||||||
|
every single time this add-on starts.
|
||||||
|
|
||||||
|
## Additional Details
|
||||||
|
|
||||||
|
- Config files are stored in `/config/tvheadend/`
|
||||||
|
- Recording files are stored in `/config/tvheadend/recordings/`
|
||||||
|
- `/dev/dvb/`, `/dev/dri/` would be respectively mapped to
|
||||||
|
`/dev/dvb/`, `/dev/dri/` inside the addon.
|
||||||
|
|
||||||
|
Consider, backing `/config/tvheadend/` up whenever migrating.
|
||||||
|
|
||||||
|
## Changelog & Releases
|
||||||
|
|
||||||
|
This repository keeps a change log using [GitHub's releases][releases]
|
||||||
|
functionality.
|
||||||
|
|
||||||
|
Releases are based on [Semantic Versioning][semver], and use the format
|
||||||
|
of `MAJOR.MINOR.PATCH`. In a nutshell, the version will be incremented
|
||||||
|
based on the following:
|
||||||
|
|
||||||
|
- `MAJOR`: Incompatible or major changes.
|
||||||
|
- `MINOR`: Backwards-compatible new features and enhancements.
|
||||||
|
- `PATCH`: Backwards-compatible bugfixes and package updates.
|
||||||
|
|
||||||
|
## Support
|
||||||
|
|
||||||
|
Got questions?
|
||||||
|
|
||||||
|
You have several options to get them answered:
|
||||||
|
|
||||||
|
- The Home Assistant [Community Forum][forum].
|
||||||
|
- You could also [open an issue here][issue] GitHub.
|
||||||
|
|
||||||
|
## Authors & contributors
|
||||||
|
|
||||||
|
This repository is owned and maintained by [GauthamVarmaK][gautham].
|
||||||
|
|
||||||
|
This has been possible thanks to the community add-ons initiative by [Frenck][frenck]
|
||||||
|
|
||||||
|
## License
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021-2022 GauthamVarmaK
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
in the Software without restriction, including without limitation the rights
|
||||||
|
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
copies of the Software, and to permit persons to whom the Software is
|
||||||
|
furnished to do so, subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||||
|
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||||
|
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||||
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||||
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
|
SOFTWARE.
|
||||||
|
|
||||||
|
[alpine-packages]: https://pkgs.alpinelinux.org/packages
|
||||||
|
[forum]: https://community.home-assistant.io/
|
||||||
|
[frenck]: https://github.com/frenck
|
||||||
|
[gautham]: https://github.com/GauthamVarmaK
|
||||||
|
[my-ha-shield]: https://my.home-assistant.io/badges/supervisor_add_addon_repository.svg
|
||||||
|
[issue]: https://github.com/GauthamVarmaK/addon-tvheadend/issues
|
||||||
|
[semver]: http://semver.org/spec/v2.0.0.htm
|
||||||
|
[my-ha-repo]: https://my.home-assistant.io/redirect/supervisor_add_addon_repository/?repository_url=https%3A%2F%2Fgithub.com%2FGauthamVarmaK%2Fhassio-addons
|
||||||
|
[releases]: https://github.com/GauthamVarmaK/addon-tvheadend/releases
|
||||||
203
tvheadend/Dockerfile
Normal file
203
tvheadend/Dockerfile
Normal file
@@ -0,0 +1,203 @@
|
|||||||
|
ARG BUILD_FROM
|
||||||
|
# hadolint ignore=DL3006
|
||||||
|
FROM ${BUILD_FROM} as buildstage
|
||||||
|
############## build stage ##############
|
||||||
|
|
||||||
|
# package versions
|
||||||
|
ARG TVHEADEND_COMMIT="52c3ed3e"
|
||||||
|
|
||||||
|
# environment settings
|
||||||
|
ARG TZ="Europe/Berlin"
|
||||||
|
ENV HOME="/config"
|
||||||
|
|
||||||
|
# copy patches
|
||||||
|
COPY patches/ /tmp/patches/
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
echo "**** install build packages ****" && \
|
||||||
|
apk add --no-cache \
|
||||||
|
libcrypto1.1=1.1.1s-r1 \
|
||||||
|
libssl1.1=1.1.1s-r1 \
|
||||||
|
autoconf \
|
||||||
|
automake \
|
||||||
|
bsd-compat-headers \
|
||||||
|
bzip2 \
|
||||||
|
cmake \
|
||||||
|
curl \
|
||||||
|
ffmpeg-dev \
|
||||||
|
file \
|
||||||
|
findutils \
|
||||||
|
g++ \
|
||||||
|
gcc \
|
||||||
|
gettext-dev \
|
||||||
|
git \
|
||||||
|
gnu-libiconv-dev \
|
||||||
|
gzip \
|
||||||
|
jq \
|
||||||
|
libcurl \
|
||||||
|
libdvbcsa-dev \
|
||||||
|
libgcrypt-dev \
|
||||||
|
libhdhomerun-dev \
|
||||||
|
libtool \
|
||||||
|
libva-dev \
|
||||||
|
libvpx-dev \
|
||||||
|
libxml2-dev \
|
||||||
|
libxslt-dev \
|
||||||
|
linux-headers \
|
||||||
|
make \
|
||||||
|
openssl-dev \
|
||||||
|
opus-dev \
|
||||||
|
patch \
|
||||||
|
pcre2-dev \
|
||||||
|
pkgconf \
|
||||||
|
pngquant \
|
||||||
|
python3 \
|
||||||
|
sdl-dev \
|
||||||
|
tar \
|
||||||
|
uriparser-dev \
|
||||||
|
wget \
|
||||||
|
x264-dev \
|
||||||
|
x265-dev \
|
||||||
|
zlib-dev \
|
||||||
|
xmltv \
|
||||||
|
coreutils
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
echo "**** remove musl iconv.h and replace with gnu-iconv.h ****" && \
|
||||||
|
rm -rf /usr/include/iconv.h && \
|
||||||
|
cp /usr/include/gnu-libiconv/iconv.h /usr/include/iconv.h
|
||||||
|
|
||||||
|
RUN \
|
||||||
|
echo "**** compile tvheadend ****" && \
|
||||||
|
if [ -z ${TVHEADEND_COMMIT} ]; then \
|
||||||
|
TVHEADEND_COMMIT=$(curl -sX GET https://api.github.com/repos/tvheadend/tvheadend/commits/master \
|
||||||
|
| jq -r '. | .sha'); \
|
||||||
|
fi && \
|
||||||
|
mkdir -p \
|
||||||
|
/tmp/tvheadend && \
|
||||||
|
git clone https://github.com/tvheadend/tvheadend.git /tmp/tvheadend && \
|
||||||
|
cd /tmp/tvheadend && \
|
||||||
|
git checkout ${TVHEADEND_COMMIT} && \
|
||||||
|
./configure \
|
||||||
|
`#Encoding` \
|
||||||
|
--disable-ffmpeg_static \
|
||||||
|
--disable-libfdkaac_static \
|
||||||
|
--disable-libtheora_static \
|
||||||
|
--disable-libopus_static \
|
||||||
|
--disable-libvorbis_static \
|
||||||
|
--disable-libvpx_static \
|
||||||
|
--disable-libx264_static \
|
||||||
|
--disable-libx265_static \
|
||||||
|
--disable-libfdkaac \
|
||||||
|
--enable-libopus \
|
||||||
|
--enable-libvorbis \
|
||||||
|
--enable-libvpx \
|
||||||
|
--enable-libx264 \
|
||||||
|
--enable-libx265 \
|
||||||
|
\
|
||||||
|
`#Options` \
|
||||||
|
--disable-avahi \
|
||||||
|
--disable-dbus_1 \
|
||||||
|
--disable-bintray_cache \
|
||||||
|
--disable-execinfo \
|
||||||
|
--disable-hdhomerun_static \
|
||||||
|
--enable-hdhomerun_client \
|
||||||
|
--enable-libav \
|
||||||
|
--enable-pngquant \
|
||||||
|
--enable-trace \
|
||||||
|
--enable-vaapi \
|
||||||
|
--infodir=/usr/share/info \
|
||||||
|
--localstatedir=/var \
|
||||||
|
--mandir=/usr/share/man \
|
||||||
|
--prefix=/usr \
|
||||||
|
--python=python3 \
|
||||||
|
--sysconfdir=/config && \
|
||||||
|
make -j 2 && \
|
||||||
|
make DESTDIR=/tmp/tvheadend-build install
|
||||||
|
|
||||||
|
############## runtime stage ##############
|
||||||
|
FROM ${BUILD_FROM}
|
||||||
|
|
||||||
|
# set version label
|
||||||
|
ARG BUILD_DATE
|
||||||
|
ARG VERSION
|
||||||
|
LABEL build_version="Linuxserver.io version:- ${VERSION} Build-date:- ${BUILD_DATE}"
|
||||||
|
LABEL maintainer="saarg"
|
||||||
|
|
||||||
|
# environment settings
|
||||||
|
ENV HOME="/config"
|
||||||
|
|
||||||
|
# libva-intel-driver \
|
||||||
|
# intel-media-driver \
|
||||||
|
RUN \
|
||||||
|
echo "**** install runtime packages ****" && \
|
||||||
|
apk add --no-cache \
|
||||||
|
bsd-compat-headers \
|
||||||
|
bzip2 \
|
||||||
|
curl \
|
||||||
|
ffmpeg \
|
||||||
|
ffmpeg-libs \
|
||||||
|
gnu-libiconv \
|
||||||
|
gzip \
|
||||||
|
libcrypto1.1 \
|
||||||
|
libcurl \
|
||||||
|
libdvbcsa \
|
||||||
|
libhdhomerun-libs \
|
||||||
|
libssl1.1 \
|
||||||
|
libva \
|
||||||
|
mesa-dri-ati \
|
||||||
|
libvpx \
|
||||||
|
libxml2 \
|
||||||
|
libxslt \
|
||||||
|
linux-headers \
|
||||||
|
openssl \
|
||||||
|
opus \
|
||||||
|
pcre2 \
|
||||||
|
py3-requests \
|
||||||
|
python3 \
|
||||||
|
tar \
|
||||||
|
uriparser \
|
||||||
|
wget \
|
||||||
|
x264 \
|
||||||
|
x265 \
|
||||||
|
zlib \
|
||||||
|
xmltv
|
||||||
|
|
||||||
|
# copy local files and buildstage artifacts
|
||||||
|
COPY --from=buildstage /tmp/tvheadend-build/usr/ /usr/
|
||||||
|
#COPY --from=buildstage /usr/local/share/man/ /usr/local/share/man/
|
||||||
|
|
||||||
|
# Copy root filesystem
|
||||||
|
COPY rootfs /
|
||||||
|
|
||||||
|
# ports and volumes
|
||||||
|
VOLUME /config
|
||||||
|
|
||||||
|
# Build arguments
|
||||||
|
ARG BUILD_ARCH
|
||||||
|
ARG BUILD_DATE
|
||||||
|
ARG BUILD_DESCRIPTION
|
||||||
|
ARG BUILD_NAME
|
||||||
|
ARG BUILD_REF
|
||||||
|
ARG BUILD_REPOSITORY
|
||||||
|
ARG BUILD_VERSION
|
||||||
|
|
||||||
|
# Labels
|
||||||
|
LABEL \
|
||||||
|
io.hass.name="${BUILD_NAME}" \
|
||||||
|
io.hass.description="${BUILD_DESCRIPTION}" \
|
||||||
|
io.hass.arch="${BUILD_ARCH}" \
|
||||||
|
io.hass.type="addon" \
|
||||||
|
io.hass.version=${BUILD_VERSION} \
|
||||||
|
maintainer="Gautham Varma K <43441192+GauthamVarmaK@users.noreply.github.com>" \
|
||||||
|
org.opencontainers.image.title="${BUILD_NAME}" \
|
||||||
|
org.opencontainers.image.description="${BUILD_DESCRIPTION}" \
|
||||||
|
org.opencontainers.image.vendor="GauthamVarmaK" \
|
||||||
|
org.opencontainers.image.authors="Gautham Varma K <43441192+GauthamVarmaK@users.noreply.github.com>" \
|
||||||
|
org.opencontainers.image.licenses="MIT" \
|
||||||
|
org.opencontainers.image.url="https://github.com/GauthamVarmaK/addon-tvheadend" \
|
||||||
|
org.opencontainers.image.source="https://github.com/${BUILD_REPOSITORY}" \
|
||||||
|
org.opencontainers.image.documentation="https://github.com/${BUILD_REPOSITORY}/blob/main/README.md" \
|
||||||
|
org.opencontainers.image.created=${BUILD_DATE} \
|
||||||
|
org.opencontainers.image.revision=${BUILD_REF} \
|
||||||
|
org.opencontainers.image.version=${BUILD_VERSION}
|
||||||
7
tvheadend/build.yaml
Normal file
7
tvheadend/build.yaml
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
build_from:
|
||||||
|
aarch64: ghcr.io/hassio-addons/base/aarch64:11.1.2
|
||||||
|
amd64: ghcr.io/hassio-addons/base/amd64:11.1.2
|
||||||
|
armhf: ghcr.io/hassio-addons/base/armhf:11.1.2
|
||||||
|
armv7: ghcr.io/hassio-addons/base/armv7:11.1.2
|
||||||
|
i386: ghcr.io/hassio-addons/base/i386:11.1.2
|
||||||
43
tvheadend/config.yaml
Normal file
43
tvheadend/config.yaml
Normal file
@@ -0,0 +1,43 @@
|
|||||||
|
---
|
||||||
|
name: TVHeadend
|
||||||
|
version: 1.5
|
||||||
|
stage: experimental
|
||||||
|
slug: tvheadend
|
||||||
|
description: TV streaming server and recorder.
|
||||||
|
url: "https://github.com/GauthamVarmaK/addon-tvheadend"
|
||||||
|
init: false
|
||||||
|
arch:
|
||||||
|
- aarch64
|
||||||
|
- amd64
|
||||||
|
- armhf
|
||||||
|
- armv7
|
||||||
|
- i386
|
||||||
|
webui: "http://[HOST]:[PORT:9981]/"
|
||||||
|
hassio_role: admin
|
||||||
|
hassio_api: true
|
||||||
|
host_network: true
|
||||||
|
privileged:
|
||||||
|
- NET_ADMIN
|
||||||
|
- SYS_ADMIN
|
||||||
|
- SYS_RAWIO
|
||||||
|
devices:
|
||||||
|
- /dev/dvb
|
||||||
|
- /dev/dri
|
||||||
|
ports:
|
||||||
|
9981/tcp: 9981
|
||||||
|
9982/tcp: 9982
|
||||||
|
ports_description:
|
||||||
|
9981/tcp: TVH Web Interface
|
||||||
|
9982/tcp: TVH HTSP
|
||||||
|
map:
|
||||||
|
- "config:rw"
|
||||||
|
options:
|
||||||
|
system_packages: []
|
||||||
|
init_commands: []
|
||||||
|
webgrabplus: false
|
||||||
|
schema:
|
||||||
|
system_packages:
|
||||||
|
- str
|
||||||
|
init_commands:
|
||||||
|
- str
|
||||||
|
webgrabplus: bool
|
||||||
BIN
tvheadend/icon.png
Normal file
BIN
tvheadend/icon.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 63 KiB |
BIN
tvheadend/logo.png
Normal file
BIN
tvheadend/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.5 KiB |
1466
tvheadend/patches/config.guess
vendored
Normal file
1466
tvheadend/patches/config.guess
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1836
tvheadend/patches/config.sub
vendored
Normal file
1836
tvheadend/patches/config.sub
vendored
Normal file
File diff suppressed because it is too large
Load Diff
23
tvheadend/patches/cpanfile
Normal file
23
tvheadend/patches/cpanfile
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
requires 'perl' => '5.24.0';
|
||||||
|
|
||||||
|
# perl packages for tvheadend x86
|
||||||
|
requires 'Data::Dump' ;
|
||||||
|
requires 'DateTime::Format::ISO8601' ;
|
||||||
|
requires 'DateTime::Format::SQLite' ;
|
||||||
|
requires 'Encode' ;
|
||||||
|
requires 'File::HomeDir' ;
|
||||||
|
requires 'File::Path' ;
|
||||||
|
requires 'HTML::Entities' ;
|
||||||
|
requires 'HTML::TableExtract' ;
|
||||||
|
requires 'HTTP::Cache::Transparent' => ">= 1.3, != 1.4" ;
|
||||||
|
requires 'inc' ;
|
||||||
|
requires 'JSON::PP' ;
|
||||||
|
requires 'LWP::Simple' ;
|
||||||
|
requires 'LWP::UserAgent' ;
|
||||||
|
requires 'PerlIO::gzip' ;
|
||||||
|
requires 'SOAP::Lite' ;
|
||||||
|
requires 'Storable' ;
|
||||||
|
requires 'Unicode::UTF8simple' ;
|
||||||
|
requires 'version' ;
|
||||||
|
requires 'WWW::Mechanize' ;
|
||||||
|
requires 'XML::DOM' ;
|
||||||
38
tvheadend/rootfs/defaults/7a5edfbe189851e5b1d1df19c93962f0
Normal file
38
tvheadend/rootfs/defaults/7a5edfbe189851e5b1d1df19c93962f0
Normal file
@@ -0,0 +1,38 @@
|
|||||||
|
{
|
||||||
|
"enabled": true,
|
||||||
|
"name": "",
|
||||||
|
"profile": "22f637a89b4dec0d67e3107ee88ee4c5",
|
||||||
|
"cache": 2,
|
||||||
|
"retention-days": 2147483646,
|
||||||
|
"removal-days": 2147483647,
|
||||||
|
"clone": true,
|
||||||
|
"rerecord-errors": 10,
|
||||||
|
"warm-time": 30,
|
||||||
|
"pre-extra-time": 0,
|
||||||
|
"post-extra-time": 0,
|
||||||
|
"epg-update-window": 86400,
|
||||||
|
"epg-running": true,
|
||||||
|
"autorec-maxcount": 0,
|
||||||
|
"autorec-maxsched": 0,
|
||||||
|
"storage": "/recordings/",
|
||||||
|
"storage-mfree": 1000,
|
||||||
|
"storage-mused": 0,
|
||||||
|
"file-permissions": "0755",
|
||||||
|
"charset": "UTF-8",
|
||||||
|
"tag-files": true,
|
||||||
|
"skip-commercials": true,
|
||||||
|
"pathname": "$t/$t -$ e -$ s$n.$x",
|
||||||
|
"directory-permissions": "0775",
|
||||||
|
"day-dir": false,
|
||||||
|
"channel-dir": false,
|
||||||
|
"title-dir": true,
|
||||||
|
"channel-in-title": false,
|
||||||
|
"date-in-title": false,
|
||||||
|
"time-in-title": false,
|
||||||
|
"episode-in-title": false,
|
||||||
|
"subtitle-in-title": false,
|
||||||
|
"omit-title": false,
|
||||||
|
"clean-title": false,
|
||||||
|
"whitespace-in-title": false,
|
||||||
|
"windows-compatible-filenames": true
|
||||||
|
}
|
||||||
81
tvheadend/rootfs/defaults/comskip.ini.org
Normal file
81
tvheadend/rootfs/defaults/comskip.ini.org
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
; 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 xbmc or ffmpeg bug
|
||||||
|
always_keep_first_seconds=2 ; xbmc/vdpau 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=255 ;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.775
|
||||||
|
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=0 ; 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.
|
||||||
|
logo_max_percentage_of_screen=0.9
|
||||||
|
subtitles=1
|
||||||
|
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=0 ; 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.
|
||||||
|
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
|
||||||
|
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=0
|
||||||
|
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 XBMC 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"
|
||||||
7
tvheadend/rootfs/defaults/config
Normal file
7
tvheadend/rootfs/defaults/config
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
{
|
||||||
|
"prefer_picon": true,
|
||||||
|
"chiconpath": "file:///picons/%C.png",
|
||||||
|
"piconpath": "file:///picons/",
|
||||||
|
"piconscheme": 0,
|
||||||
|
"chiconscheme": 2
|
||||||
|
}
|
||||||
47
tvheadend/rootfs/etc/cont-init.d/30-config
Normal file
47
tvheadend/rootfs/etc/cont-init.d/30-config
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
#!/usr/bin/with-contenv bash
|
||||||
|
|
||||||
|
# make folders
|
||||||
|
mkdir -p \
|
||||||
|
/config/comskip
|
||||||
|
|
||||||
|
# copy config
|
||||||
|
[[ ! -e /config/dvr/config ]] && \
|
||||||
|
(mkdir -p /config/dvr/config && cp /defaults/7a5edfbe189851e5b1d1df19c93962f0 /config/dvr/config/7a5edfbe189851e5b1d1df19c93962f0)
|
||||||
|
[[ ! -e /config/comskip/comskip.ini ]] && \
|
||||||
|
cp /defaults/comskip.ini.org /config/comskip/comskip.ini
|
||||||
|
[[ ! -e /config/config ]] && \
|
||||||
|
(cp /defaults/config /config/config)
|
||||||
|
|
||||||
|
# extract picons on first run
|
||||||
|
#[[ -f /picons.tar.bz2 ]] && \
|
||||||
|
# mkdir -p /picons
|
||||||
|
# tar xf \
|
||||||
|
# /picons.tar.bz2 -C \
|
||||||
|
# /picons &&
|
||||||
|
# rm -f /picons.tar.bz2
|
||||||
|
|
||||||
|
# function to randomly sample 5 files for their owner and only chown if not abc
|
||||||
|
chowner () {
|
||||||
|
files=(${1}/*)
|
||||||
|
for i in {1..5}; do
|
||||||
|
user=$(stat -c '%U' $(printf "%s\n" "${files[RANDOM % ${#files[@]}]}"))
|
||||||
|
if [ "${user}" != "abc" ]; then
|
||||||
|
chown -R abc:abc ${1}
|
||||||
|
break
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
# permissions
|
||||||
|
#echo "Setting permissions"
|
||||||
|
#abc_dirs=( \
|
||||||
|
#/config \
|
||||||
|
#/picons \
|
||||||
|
#)
|
||||||
|
#for i in "${abc_dirs[@]}"; do
|
||||||
|
# if [ "$(ls -A ${i})" ]; then
|
||||||
|
# chowner ${i}
|
||||||
|
# else
|
||||||
|
# chown -R abc:abc ${i}
|
||||||
|
# fi
|
||||||
|
#done
|
||||||
26
tvheadend/rootfs/etc/cont-init.d/50-gid-video
Normal file
26
tvheadend/rootfs/etc/cont-init.d/50-gid-video
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
#!/usr/bin/with-contenv bash
|
||||||
|
|
||||||
|
FILES=$(find /dev/dri /dev/dvb -type c -print 2>/dev/null)
|
||||||
|
|
||||||
|
for i in $FILES
|
||||||
|
do
|
||||||
|
VIDEO_GID=$(stat -c '%g' "$i")
|
||||||
|
if id -G abc | grep -qw "$VIDEO_GID"; then
|
||||||
|
touch /groupadd
|
||||||
|
else
|
||||||
|
if [ ! "${VIDEO_GID}" == '0' ]; then
|
||||||
|
VIDEO_NAME=$(getent group "${VIDEO_GID}" | awk -F: '{print $1}')
|
||||||
|
if [ -z "${VIDEO_NAME}" ]; then
|
||||||
|
VIDEO_NAME="video$(head /dev/urandom | tr -dc 'a-z0-9' | head -c8)"
|
||||||
|
groupadd "$VIDEO_NAME"
|
||||||
|
groupmod -g "$VIDEO_GID" "$VIDEO_NAME"
|
||||||
|
fi
|
||||||
|
usermod -a -G "$VIDEO_NAME" abc
|
||||||
|
touch /groupadd
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ -n "${FILES}" ] && [ ! -f "/groupadd" ]; then
|
||||||
|
usermod -a -G root abc
|
||||||
|
fi
|
||||||
24
tvheadend/rootfs/etc/cont-init.d/customizations.sh
Normal file
24
tvheadend/rootfs/etc/cont-init.d/customizations.sh
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Executes user customizations on startup
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
# Install user configured/requested packages
|
||||||
|
if bashio::config.has_value 'system_packages'; then
|
||||||
|
apk update \
|
||||||
|
|| bashio::exit.nok 'Failed updating Alpine packages repository indexes'
|
||||||
|
|
||||||
|
for package in $(bashio::config 'system_packages'); do
|
||||||
|
apk add "$package" \
|
||||||
|
|| bashio::exit.nok "Failed installing system package ${package}"
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Executes user commands on startup
|
||||||
|
if bashio::config.has_value 'init_commands'; then
|
||||||
|
while read -r cmd; do
|
||||||
|
eval "${cmd}" \
|
||||||
|
|| bashio::exit.nok "Failed executing init command: ${cmd}"
|
||||||
|
done <<< "$(bashio::config 'init_commands')"
|
||||||
|
fi
|
||||||
63
tvheadend/rootfs/etc/cont-init.d/tvheadend.sh
Normal file
63
tvheadend/rootfs/etc/cont-init.d/tvheadend.sh
Normal file
@@ -0,0 +1,63 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Executes user customizations on startup
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
check_webgrabplus(){
|
||||||
|
if [ -z "$(ls -A /config/tvheadend/wg++)" ]; then return 1; else return 0; fi
|
||||||
|
}
|
||||||
|
|
||||||
|
webgrabplus_install(){
|
||||||
|
if apk update; then
|
||||||
|
bashio::log.info '[Webgrab+] APK: Installing required packages.'
|
||||||
|
if apk add --no-cache --virtual .build-deps git mono --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing; then
|
||||||
|
bashio::log.info '[Webgrab+] Installing Webgrab+.'
|
||||||
|
cd /tmp \
|
||||||
|
&& wget http://webgrabplus.com/sites/default/files/download/SW/V3.2.0/WebGrabPlus_V3.2_install.tar.gz \
|
||||||
|
&& tar -zxvf WebGrabPlus_V3.2_install.tar.gz \
|
||||||
|
&& rm WebGrabPlus_V3.2_install.tar.gz \
|
||||||
|
&& mv .wg++/ /config/tvheadend/wg++ \
|
||||||
|
&& cd /config/tvheadend/wg++ \
|
||||||
|
&& ./install.sh \
|
||||||
|
&& rm -rf siteini.pack/ \
|
||||||
|
&& wget http://webgrabplus.com/sites/default/files/download/ini/SiteIniPack_current.zip \
|
||||||
|
&& unzip SiteIniPack_current.zip \
|
||||||
|
&& rm SiteIniPack_current.zip \
|
||||||
|
&& cp siteini.pack/India/* siteini.user/ \
|
||||||
|
&& wget -O /usr/bin/tv_grab_wg++ http://www.webgrabplus.com/sites/default/files/tv_grab_wg.txt \
|
||||||
|
&& sed -i 's|~/.wg++/guide.xml|/config/tvheadend/wg++/guide.xml|g' /usr/bin/tv_grab_wg++ \
|
||||||
|
&& chmod a+x /usr/bin/tv_grab_wg++
|
||||||
|
else
|
||||||
|
bashio::log.info '[Webgrab+] APK: Critical error. Unable install required packages.'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
bashio::log.info '[Webgrab+] APK: Removing packages no longer required.'
|
||||||
|
apk del --no-cache --purge .build-deps
|
||||||
|
else
|
||||||
|
bashio::log.error '[Webgrab+] APK: Critical error. Unable to update pkg list. Check connectivity.'
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
bashio::log.info '[Webgrab+] Finsihed all APK and PIP3 updates and installs.'
|
||||||
|
}
|
||||||
|
|
||||||
|
# Ensure directory exists
|
||||||
|
if ! bashio::fs.directory_exists '/config/tvheadend/'; then
|
||||||
|
bashio::log.info "Creating default configuration directory at /config/tvheadend/"
|
||||||
|
mkdir -p /config/tvheadend/recordings
|
||||||
|
timeout 20s /usr/bin/tvheadend --firstrun -u root -g root -c /config/tvheadend
|
||||||
|
fi
|
||||||
|
|
||||||
|
if check_webgrabplus; then
|
||||||
|
bashio::log.info "[Webgrab+] Webgrab+ already installed"
|
||||||
|
else
|
||||||
|
bashio::log.info "[Webgrab+] No webgrab+ installation found"
|
||||||
|
if [ $(bashio::config 'webgrabplus') = true ]; then
|
||||||
|
bashio::log.info "[Webgrab+] Installing webgrab+"
|
||||||
|
webgrabplus_install
|
||||||
|
chmod +x /usr/bin/restart_addon
|
||||||
|
exec /usr/bin/restart_addon
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
bashio::log.info '[Webgrab+] Setup completed without errors!!'
|
||||||
1
tvheadend/rootfs/etc/cron.d/webgrabplus
Normal file
1
tvheadend/rootfs/etc/cron.d/webgrabplus
Normal file
@@ -0,0 +1 @@
|
|||||||
|
0 0 * * * /config/tvheadend/wg++/run.sh
|
||||||
9
tvheadend/rootfs/etc/services.d/cron/finish
Normal file
9
tvheadend/rootfs/etc/services.d/cron/finish
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/execlineb -S0
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Take down the S6 supervision tree when crond fails
|
||||||
|
# ==============================================================================
|
||||||
|
if -n { s6-test $# -ne 0 }
|
||||||
|
if -n { s6-test ${1} -eq 256 }
|
||||||
|
|
||||||
|
s6-svscanctl -t /var/run/s6/services
|
||||||
6
tvheadend/rootfs/etc/services.d/cron/run
Normal file
6
tvheadend/rootfs/etc/services.d/cron/run
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Runs the cron daemon
|
||||||
|
# ==============================================================================
|
||||||
|
exec fdmove -c 2 1 /usr/sbin/crond -f -L /var/log/cron -l 0 -c /etc/crontabs
|
||||||
9
tvheadend/rootfs/etc/services.d/tvheadend/finish
Normal file
9
tvheadend/rootfs/etc/services.d/tvheadend/finish
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/execlineb -S0
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Take down the S6 supervision tree when TVHeadend fails
|
||||||
|
# ==============================================================================
|
||||||
|
if -n { s6-test $# -ne 0 }
|
||||||
|
if -n { s6-test ${1} -eq 256 }
|
||||||
|
|
||||||
|
s6-svscanctl -t /var/run/s6/services
|
||||||
15
tvheadend/rootfs/etc/services.d/tvheadend/run
Normal file
15
tvheadend/rootfs/etc/services.d/tvheadend/run
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
#!/usr/bin/with-contenv bashio
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Starts TVHeadend
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
declare satip_xml
|
||||||
|
|
||||||
|
bashio::log.info "Starting TVHeadend..."
|
||||||
|
if bashio::config.has_value 'satip_xml'; then
|
||||||
|
satip_xml="--satip_xml $(bashio::config 'satip_xml')"
|
||||||
|
else
|
||||||
|
satip_xml=""
|
||||||
|
fi
|
||||||
|
exec /usr/bin/tvheadend -u root -g root -c /config/tvheadend $satip_xml
|
||||||
9
tvheadend/rootfs/usr/bin/restart_addon
Normal file
9
tvheadend/rootfs/usr/bin/restart_addon
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
#!/usr/bin/env bashio
|
||||||
|
# ==============================================================================
|
||||||
|
# Home Assistant Community Add-on: TVHeadend
|
||||||
|
# Restarts the add-on
|
||||||
|
# ==============================================================================
|
||||||
|
|
||||||
|
echo "Restarting add-on"
|
||||||
|
|
||||||
|
bashio::addon.restart
|
||||||
55
tvheadend/rootfs/usr/bin/tv_grab_file
Normal file
55
tvheadend/rootfs/usr/bin/tv_grab_file
Normal file
@@ -0,0 +1,55 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
dflag=
|
||||||
|
vflag=
|
||||||
|
cflag=
|
||||||
|
if (( $# < 1 ))
|
||||||
|
then
|
||||||
|
cat /config/data/*.xml
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
delim=""
|
||||||
|
case "$arg" in
|
||||||
|
#translate --gnu-long-options to -g (short options)
|
||||||
|
--description) args="${args}-d ";;
|
||||||
|
--version) args="${args}-v ";;
|
||||||
|
--capabilities) args="${args}-c ";;
|
||||||
|
#pass through anything else
|
||||||
|
*) [[ "${arg:0:1}" == "-" ]] || delim="\""
|
||||||
|
args="${args}${delim}${arg}${delim} ";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
#Reset the positional parameters to the short options
|
||||||
|
eval set -- $args
|
||||||
|
|
||||||
|
while getopts "dvc" option
|
||||||
|
do
|
||||||
|
case $option in
|
||||||
|
d) dflag=1;;
|
||||||
|
v) vflag=1;;
|
||||||
|
c) cflag=1;;
|
||||||
|
\?) printf "unknown option: -%s\n" $OPTARG
|
||||||
|
printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0)
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac >&2
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$dflag" ]
|
||||||
|
then
|
||||||
|
printf "XML file grabber\n"
|
||||||
|
fi
|
||||||
|
if [ "$vflag" ]
|
||||||
|
then
|
||||||
|
printf "0.1\n"
|
||||||
|
fi
|
||||||
|
if [ "$cflag" ]
|
||||||
|
then
|
||||||
|
printf "baseline\n"
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
|
|
||||||
67
tvheadend/rootfs/usr/bin/tv_grab_url
Normal file
67
tvheadend/rootfs/usr/bin/tv_grab_url
Normal file
@@ -0,0 +1,67 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
dflag=
|
||||||
|
vflag=
|
||||||
|
cflag=
|
||||||
|
|
||||||
|
if (( $# < 1 ))
|
||||||
|
then
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
OPTARG=""
|
||||||
|
URL=$1
|
||||||
|
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
delim=""
|
||||||
|
case "$arg" in
|
||||||
|
#translate --gnu-long-options to -g (short options)
|
||||||
|
--description) args="${args}-d ";;
|
||||||
|
--version) args="${args}-v ";;
|
||||||
|
--capabilities) args="${args}-c ";;
|
||||||
|
#pass through anything else
|
||||||
|
*) if [ "${arg:0:1}" == "-" ] || delim="\""
|
||||||
|
then
|
||||||
|
args="${args}${delim}${arg}${delim} "
|
||||||
|
else
|
||||||
|
OPTARG=${arg}
|
||||||
|
fi
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
#Reset the positional parameters to the short options
|
||||||
|
eval set -- $args
|
||||||
|
|
||||||
|
while getopts "dvc" option
|
||||||
|
do
|
||||||
|
case $option in
|
||||||
|
d) dflag=1;;
|
||||||
|
v) vflag=1;;
|
||||||
|
c) cflag=1;;
|
||||||
|
\?) printf "unknown option: -%s\n" $OPTARG
|
||||||
|
printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0)
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac >&2
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$dflag" ]
|
||||||
|
then
|
||||||
|
printf "XMLTV URL grabber\n"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [ "$vflag" ]
|
||||||
|
then
|
||||||
|
printf "0.1\n"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
if [ "$cflag" ]
|
||||||
|
then
|
||||||
|
printf "baseline\n"
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
curl -s "$URL"
|
||||||
|
|
||||||
|
exit 0
|
||||||
62
tvheadend/rootfs/usr/bin/tv_grab_wg
Normal file
62
tvheadend/rootfs/usr/bin/tv_grab_wg
Normal file
@@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
dflag=
|
||||||
|
vflag=
|
||||||
|
cflag=
|
||||||
|
qflag=
|
||||||
|
if (( $# < 1 ))
|
||||||
|
then
|
||||||
|
cat /config/data/*.xml
|
||||||
|
exit 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
for arg
|
||||||
|
do
|
||||||
|
delim=""
|
||||||
|
case "$arg" in
|
||||||
|
#translate --gnu-long-options to -g (short options)
|
||||||
|
--description) args="${args}-d ";;
|
||||||
|
--version) args="${args}-v ";;
|
||||||
|
--capabilities) args="${args}-c ";;
|
||||||
|
--quiet) args="${args}-q ";;
|
||||||
|
|
||||||
|
#pass through anything else
|
||||||
|
*) [[ "${arg:0:1}" == "-" ]] || delim="\""
|
||||||
|
args="${args}${delim}${arg}${delim} ";;
|
||||||
|
esac
|
||||||
|
done
|
||||||
|
|
||||||
|
#Reset the positional parameters to the short options
|
||||||
|
eval set -- $args
|
||||||
|
|
||||||
|
while getopts "dvcq" option
|
||||||
|
do
|
||||||
|
case $option in
|
||||||
|
d) dflag=1;;
|
||||||
|
v) vflag=1;;
|
||||||
|
c) cflag=1;;
|
||||||
|
q) qflag=1;;
|
||||||
|
\?) printf "unknown option: -%s\n" $OPTARG
|
||||||
|
printf "Usage: %s: [--description] [--version] [--capabilities] \n" $(basename $0)
|
||||||
|
exit 2
|
||||||
|
;;
|
||||||
|
esac >&2
|
||||||
|
done
|
||||||
|
|
||||||
|
if [ "$dflag" ]
|
||||||
|
then
|
||||||
|
printf "WebGrab+Plus XML file grabber\n"
|
||||||
|
fi
|
||||||
|
if [ "$vflag" ]
|
||||||
|
then
|
||||||
|
printf "0.2\n"
|
||||||
|
fi
|
||||||
|
if [ "$cflag" ]
|
||||||
|
then
|
||||||
|
printf "baseline\n"
|
||||||
|
fi
|
||||||
|
if [ "$qflag" ]
|
||||||
|
then
|
||||||
|
printf ""
|
||||||
|
fi
|
||||||
|
|
||||||
|
exit 0
|
||||||
Reference in New Issue
Block a user