You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
Rolf Ahrenberg 0d2f32dc6a Use 2MB ringbuffer per device. 6 years ago
iptv Changed translation bug address and tweaked an example script. 12 years ago
po Updated for vdr-2.3.1. 6 years ago
.gitignore Added .gitignore. 13 years ago
COPYING Initial revision 14 years ago
HISTORY Updated for vdr-2.3.1. 6 years ago
Makefile Got rid of IPTV_DEBUG. 7 years ago
README Update README. 6 years ago
common.c Updated the section filtering options. 8 years ago
common.h Use 2MB ringbuffer per device. 6 years ago
config.c Added support for tracing modes. 7 years ago
config.h Added support for tracing modes. 7 years ago
device.c Updated for vdr-2.3.1. 6 years ago
device.h Removed unnecessary TS buffer settings. 8 years ago
deviceif.h Fixed and refactored the section filtering code, fixed a possible crash in the file protocol, and updated Makefile's install target. 9 years ago
iptv.c Updated for vdr-2.3.1. 6 years ago
iptvservice.h Added support for a service interface. 10 years ago
log.h Got rid of IPTV_DEBUG. 7 years ago
pidscanner.c Updated for vdr-2.3.1. 6 years ago
pidscanner.h Added support for tracing modes. 7 years ago
protocolcurl.c Got rid of IPTV_DEBUG. 7 years ago
protocolcurl.h Got rid of IPTV_DEBUG. 7 years ago
protocolext.c Added support for tracing modes. 7 years ago
protocolext.h Added SetPid() into cIptvProtocolIf(). 8 years ago
protocolfile.c Added support for tracing modes. 7 years ago
protocolfile.h Added SetPid() into cIptvProtocolIf(). 8 years ago
protocolhttp.c Added support for tracing modes. 7 years ago
protocolhttp.h Added SetPid() into cIptvProtocolIf(). 8 years ago
protocolif.h Added SetPid() into cIptvProtocolIf(). 8 years ago
protocoludp.c Added support for tracing modes. 7 years ago
protocoludp.h Added SetPid() into cIptvProtocolIf(). 8 years ago
sectionfilter.c Added support for tracing modes. 7 years ago
sectionfilter.h Refactored the section filtering. 8 years ago
setup.c Added support for tracing modes. 7 years ago
setup.h Removed unnecessary TS buffer settings. 8 years ago
sidscanner.c Updated for vdr-2.3.1. 6 years ago
sidscanner.h Added support for tracing modes. 7 years ago
socket.c Added support for tracing modes. 7 years ago
socket.h Added RTP packet error detection. 8 years ago
source.c Updated for vdr-2.3.1. 6 years ago
source.h Updated for vdr-2.1.6. 8 years ago
statistics.c Added support for tracing modes. 7 years ago
statistics.h Added missing RTSP/UDP support. 8 years ago
streamer.c Added support for tracing modes. 7 years ago
streamer.h Added SetPid() into cIptvProtocolIf(). 8 years ago

README

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:

- Protocol base port = 4321 Defines base port used in CURL/EXT
protocol. Two ports are defined for
each device.
The port range is defined by the number
of IPTV devices times two (max. 32).
Valid range: 0...65503
- 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 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<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 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.