This is an IPTV plugin for the Video Disk Recorder (VDR).
Written by: Rolf Ahrenberg < R o l f . A h r e n b e r g @ s c i . f i >
Antti Seppälä
< a . s e p p a l a @ g m a i l . c o m >
Project's homepage: http://www.saunalahti.fi/~rahrenbe/vdr/iptv/
Latest version available at: http://www.saunalahti.fi/~rahrenbe/vdr/iptv/
This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License version 2 as published by the Free Software Foundation. See the file COPYING for more information.
Requirements:
Description:
This plugin integrates multicast IPTV transport streams seamlessly into VDR. You can use any IPTV channel like any other normal DVB channel for live viewing, recording, etc. The plugin also features full section filtering capabilities which allow for example EIT information to be extracted from the incoming stream.
Currently the IPTV plugin has direct support for both multicast UDP/RTP and unicast HTTP MPEG1/2, H.264 and H.265 transport streams. Also a file input method is supported, but a file delay must be selected individually to prevent VDR's transfer buffer over/underflow. Therefore the file input should be considered as a testing feature only.
IPTV plugin also features a support for external streaming applications. With proper helper applications and configuration IPTV plugin is able to display not only MPEG1/2, H.264 and H.265 transport streams but also other formats like MP3 radio streams, mms video streams and so on.
Installation:
tar -xzf /put/your/path/here/vdr-iptv-X.Y.Z.tgz make -C iptv-X.Y.Z install
Setup menu:
Information menu:
Configuration:
channels.conf
TV6;IPTV:60:S=1|P=0|F=EXT|U=iptvstream.sh|A=0:I:0:0:680:0:0:6:0:0:0
TV5;IPTV:50:S=0|P=1|F=FILE|U=/video/stream.ts|A=5:I:0:514:670:2321:0:5:0:0:0
TV4;IPTV:40:S=0|P=1|F=HTTP|U=127.0.0.1/TS/2|A=3000:I:0:513:660:2321:0:4:0:0:0
TV3;IPTV:30:S=1|P=0|F=CURL|U=http%3A//foo%3Abar@127.0.0.1%3A3000/TS/2|A=0:I:0:512:650:2321:0:3:0:0:0
TV2;IPTV:20:S=1|P=0|F=UDP|U=127.0.0.1@127.0.0.1|A=1234:I:0:512:650:2321:0:2:0:0:0
TV1;IPTV:10:S=1|P=0|F=UDP|U=127.0.0.1|A=1234:I:0:512:650:2321:0:1:0:0:0
^ ^ ^ ^ ^ ^ ^
| | | | | | Source type ("I")
| | | | | Stream parameter
| | | | | UDP: multicast port
| | | | | CURL: <
UDP multicast rules for iptables firewall
iptables -A INPUT -i eth0 -p udp -d 224.0.0.0/4 --dport 1234 -j ACCEPT
iptables -A INPUT -i eth0 -p igmp -d 224.0.0.0/4 -j ACCEPT
route add -net 224.0.0.0 netmask 224.0.0.0 eth0
External streaming:
To watch an externally received channel add an EXT entry to channels.conf and specify a script name and parameter. The specified script is executed from plugin resource directory when VDR tunes to the channel. The specified script parameter is passed to the script and it can be used to select for example between different URLs.
When an EXT or CURL/RTSP channel is opened the IPTV plugin opens an UDP listening port on the localhost. The external script is responsible for supplying IPTV plugin with MPEG2 TS data in UDP/RTP format to the listening port. The data will be processed in VDR like a normal DVB broadcast. The listening base port can be specified in the plugin configuration menu.
Each IPTV device has different listen port. The port number is specified as a base port number plus IPTV device index minus one. Maximum of 8 IPTV devices can be used simultaneously.
IPTV plugin includes an example script which uses VLC media player for receiving streams, transcoding and handing the result to IPTV plugin.
Notes:
Working EIT requires correct Nid/Tid/Sid values as the NIT filter cannot determine the type (satellite/cable/terrestrial) of the IPTV transport stream.
The following section filters are recommended to be disabled: "NIT (0x40)", "SDT (0x42)", "TDT (0x70)"
The IPTV devices look for a "/tmp/vdr-iptv
Multiple channels with identical service id should have frequency difference of 4 or greater. It's recommended to use frequencies in decades (10, 20, 30, 40, ...) for all IPTV channel entries.
VLC processes won't get killed on some setups with the provided iptvstream.sh script and the iptvstream-notrap.sh script should be used instead in these cases.
If received MPEG-2 TS streams carry CA descriptors, you'll have to apply "disable_ca_updates" patch to the VDR in order to get rid of "Channel not available" messages.
EIT scanning functionality is disabled by default.
Section id and pid scanners should be disabled after the correct data is found. This can be made via VDR's channel editor.
Source-specific multicast (SSM) can be enabled by defining both the source
address and the group address separated by a '@' character. This will use
IGMP v3 protocol:
"U=
The CURL implementation supports only RTSP/HTTP/HTTPS protocols and an optional netrc configuration file for authentication: $(CONFDIR)/iptv/netrc
You can quite easily figure out correct DVB triplet values by using the multicat and dvbsnoop tools: $ multicat -u -d 1620000000 @127.0.0.1:1234 /tmp/video.ts $ dvbsnoop -s ts -if /tmp/video.ts -tssubdecode -hexdumpbuffer 0x12 | \ grep -m1 -A8 Service_ID | grep _ID
Acknowledgements:
The IPTV section filtering code is derived from Linux kernel.
The pid scanning code is derived from Udo Richter's streamplayer plugin.