mirror of
https://github.com/rofafor/vdr-plugin-iptv.git
synced 2023-10-10 13:37:03 +02:00
193 lines
8.6 KiB
Plaintext
193 lines
8.6 KiB
Plaintext
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:
|
|
|
|
- Libcurl - the multiprotocol file transfer library
|
|
http://curl.haxx.se/libcurl/
|
|
|
|
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 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 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:
|
|
|
|
- TS buffer size [MB] = 2 Defines ringbuffer size for transport
|
|
stream in MB.
|
|
Valid range: 1...4
|
|
- TS buffer prefill ratio [%] = 0 Defines prefill ratio for transport
|
|
stream ringbuffer before data is
|
|
transferred to VDR.
|
|
Valid range: 0...40
|
|
- EXT protocol base port = 4321 Defines base port used in EXT protocol.
|
|
The port range is defined by the number
|
|
of IPTV devices (max. 8).
|
|
Valid range: 0...65527
|
|
- Use section filtering = 1 Defines whether section filtering shall
|
|
be used.
|
|
Valid range: 0...1
|
|
- Disable filters = 0 Certain section filters might cause some
|
|
unwanted behaviour to VDR such as time
|
|
being falsely synchronized etc. This
|
|
option allows creation of blacklists of
|
|
ill-behaving filters. If this option is
|
|
set to a non-zero value, the menu page
|
|
will contain that many "Disable filter"
|
|
options which allow you to disable the
|
|
individual section filters.
|
|
Valid range: 0...7
|
|
- [Blue:Info] Opens IPTV information/statistics menu.
|
|
|
|
Information menu:
|
|
|
|
- [Red:General] Opens the general information page.
|
|
- [Green:Pids] Opens the pid statistics page.
|
|
- [Yellow:Filters] Opens the section filter statistics page.
|
|
- [Blue:Bits/bytes] Toggles between bits and bytes mode.
|
|
|
|
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: <<to be defined>>
|
|
| | | | | HTTP: HTTP port number
|
|
| | | | | FILE: file delay (ms)
|
|
| | | | | EXT: script parameter
|
|
| | | | Stream address
|
|
| | | | UDP: multicast [source@]group address
|
|
| | | | CURL: HTTP/HTTPS URL; colons (%3A) and pipes (%7C) shall be URL encoded
|
|
| | | | HTTP: URL; missing the scheme name part and possible port declaration
|
|
| | | | FILE: file location
|
|
| | | | EXT: script location
|
|
| | | Stream protocol ("UDP", "CURL", "HTTP", "FILE", "EXT")
|
|
| | Pid scanner ("0" disable, "1" enable)
|
|
| Section id (Sid/Nid/Tid) scanner ("0" disable, "1" enable)
|
|
Unique enumeration
|
|
|
|
- UDP multicast rules for iptables firewall
|
|
|
|
# Multicast UDP packets
|
|
iptables -A INPUT -i eth0 -p udp -d 224.0.0.0/4 --dport 1234 -j ACCEPT
|
|
|
|
# IGMP required by multicasts
|
|
iptables -A INPUT -i eth0 -p igmp -d 224.0.0.0/4 -j ACCEPT
|
|
|
|
# Default routing for multicast
|
|
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 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<devicenumber>.dvr" fifo at
|
|
startup. If the fifo is found and succesfully opened, the device writes
|
|
the current data stream into it. This can be used for debugging purposes.
|
|
|
|
- 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=<source address>@<group address>"
|
|
|
|
- The CURL implementation supports only 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.
|