This version (2025/08/23 14:13) is a draft.Approvals: 0/1The Previously approved version (2025/08/23 13:49) is available.

Dies ist eine alte Version des Dokuments!
Inhaltsverzeichnis
Docker: TVHeadend
Very good community- Project to watch tv over network. Supports IPTV and DVB-S, like my Astra 19.2 Satellite Dash.
Forum/Docs: https://tvheadend.org/
IPTV- Channels Worldwide: https://github.com/iptv-org/iptv
or Kodinerds: https://github.com/jnk22/kodinerds-iptv
Satellite Dash Astra 19.2
Server- Web GUI TvHeadend (HTTP-Port 8891 and Stream 9982)
Clients can connect with E.g. Kodi and HTS- Addon on Port 9982 using the User, which can be created at first setup.
Hardware
I bought the PCIe/Twin-/ DVB-S- Card „Cine V7“ of Digital Devices, which i consider best choice for Linux.
Check with lspci „03:00.0 Multimedia controller: Digital Devices GmbH Cine V7“, it should be autoloaded with Kernel-Module STV0910.
Access to DVB- Inputs
Install linux- drivers video4linux:
- v4l-conf
- v4l-tools
- v4l-utils
- w_scan
If you have your DVB- Card in /dev/dvb, check if the settings allow user access like this:
docker@pcserver2023:~/docker_compose/tvheadend> ls -l /dev/dvb drwxrwxrwx 2 root root 120 23. Aug 11:03 adapter0 drwxrwxrwx 2 root root 120 23. Aug 11:03 adapter1
If not, change it like:
docker@pcserver2023:~/docker_compose/tvheadend> chmod -R go=rwX /dev/dvb
Oterhwise noone else that root will be able to use the DVB- Card.
Adjusting Dash to Sattelite
In my setup, i am using Astra 19.3E as sattelite. For signal- checking, you can use simple linux- tools like this:
First, check if your Hardware and drivers are working by using w_scan:
docker@pcserver2023:~/docker_compose> w_scan -fs -s S19E2 -cDE -X> ~/channels.conf
This should at least try to find signals. Stop with CRTL+C if scanning basically works (but will not find anything when your dish is not adjusted right).
Now, create only one Channel in your channel-list (you need to now one working channel).
docker@pcserver2023:~/docker_compose> echo "RTL Television(CBC):12187:h:0:27500:163:106:12003"> ~/channels.conf
Start some application, to try to watch that channel - e.g. VLC - of course frist, no Signal will be found.
You now can try to find the sattelite while leaving VLC running and moving your dish around.
When you found the Channel and your signal seems ok, turn on Signal metering with:
docker@pcserver2023:~/docker_compose> dvb-fe-tool -m
Check out the Value of S/R (or C/N in English) in your output and try to find the largest Value for it:
Sperre (0x1f) Signal= -33,56dBm S/R= 11,70dB preBER= 0
Mind, that the dish maybe tilted to get the best results.
The Value should be somewhere from 11-13. Values under 10 are not good.
Now you have the best alignment to your sattelite.
Docker Compose
This is WIP !
You need
- Docker rootless as described in XXX
- Caddy as described in
As docker-user:
Create a Folder in docker_compose named tvheadend and a Folder for Records:
docker@pcserver2023:~/docker_compose> mkdir -p /home/docker/docker_compose/tvheadend docker@pcserver2023:~/docker_compose> mkdir -p /home/docker/videorecords
Create the file docker-compose.yml in docker_compose/tvheadend folder.
Currently the content looks like that:
services:
tvheadend:
# Bug in current image (20250823): https://github.com/tvheadend/tvheadend/issues/1901
# After resolve, the latest Tag should be used!
# image: ghcr.io/tvheadend/tvheadend:latest
image: ghcr.io/tvheadend/tvheadend:master-debian
cap_drop:
- all
ulimits:
nproc: 256
nofile:
soft: 8192
hard: 65535
devices:
- /dev/dvb/
# See Volumes/localtime
# environment:
# TZ: Europe/Berlin
volumes:
- tvheadend:/var/lib/tvheadend:rw
- /home/docker/videorecords:/var/lib/tvheadend/recordings:rw
- /etc/localtime:/etc/localtime:ro
networks:
- default
ports:
- "9981-9982:9981-9982/tcp"
command: --config '/var/lib/tvheadend' --nosatip --firstrun
restart: unless-stopped
#Not working on master-debian:
# healthcheck:
# test: wget -O - -q 'http://dockerstack-tvheadend-1:9981/ping' | grep -q 'PONG'
# Still needs to be defined while without it won't enable ipv6
networks:
default:
driver: bridge
enable_ipv6: true
volumes:
tvheadend:
You can now statup that container with docker compose up -d and navigate to http://localhost:9981 to set up TVheadend for the first start.
Caddy Service
After getting an Domainname and setting up DyDNS, add the Service to you Caddyfile ( https://obel1x.de/dokuwiki/doku.php?id=content:serverbasics:docker-caddy#caddy_configuration )
Add to Caddyfile:
# TVHeadend
https://tvheadend.domain.tld:443 {
header Strict-Transport-Security max-age=31536000;
reverse_proxy pcserver2023-tvheadend-1:9981
}
