mirror of
				https://github.com/rofafor/vdr-plugin-iptv.git
				synced 2023-10-10 11:37:03 +00: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.
 |