mirror of
				https://projects.vdr-developer.org/git/vdr-plugin-streamdev.git
				synced 2023-10-10 17:16:51 +00:00 
			
		
		
		
	Modified Files: HISTORY README client/device.h Added Files: patches/vdr-1.6.0-intcamdevices.patch
		
			
				
	
	
		
			353 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			353 lines
		
	
	
		
			16 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
This is a "plugin" for the Video Disk Recorder (VDR).
 | 
						|
 | 
						|
Written by:                  Sascha Volkenandt <sascha@akv-soft.de>
 | 
						|
Current maintainer:          Frank Schmirler <vdrdev@schmirler.de>
 | 
						|
 | 
						|
Project's homepage:          http://streamdev.vdr-developer.org/
 | 
						|
Former project homepage:     http://linux.kompiliert.net/
 | 
						|
 | 
						|
Latest version available at: http://streamdev.vdr-developer.org/
 | 
						|
 | 
						|
See the file COPYING for license information.
 | 
						|
 | 
						|
Contents:
 | 
						|
---------
 | 
						|
 | 
						|
1.   Description
 | 
						|
2.   Installation
 | 
						|
2.1  VDR 1.4.x and older
 | 
						|
2.2  VDR 1.6.0 and above
 | 
						|
2.3  Updating from streamdev 0.3.x
 | 
						|
3.   Usage
 | 
						|
3.1  Usage HTTP server
 | 
						|
3.2  Usage VDR-to-VDR server
 | 
						|
3.3  Usage VDR-to-VDR client
 | 
						|
4.   Other useful Plugins
 | 
						|
4.1  Plugins for VDR-to-VDR clients
 | 
						|
4.2  Plugins for Server
 | 
						|
4.3  Alternatives
 | 
						|
5.   Known Problems
 | 
						|
 | 
						|
 | 
						|
1. Description:
 | 
						|
---------------
 | 
						|
 | 
						|
This PlugIn is a VDR implementation of the VTP (Video Transfer Protocol) 
 | 
						|
Version 0.0.3 (see file PROTOCOL) and a basic HTTP Streaming Protocol.
 | 
						|
 | 
						|
It consists of a server and a client part, but both parts are compiled together
 | 
						|
with the PlugIn source, but appear as separate PlugIns to VDR. 
 | 
						|
 | 
						|
The client part acts as a full Input Device, so it can be used in conjunction 
 | 
						|
with a DXR3-Card, XINE, SoftDevice or others to act as a working VDR 
 | 
						|
installation without any DVB-Hardware including EPG-Handling.
 | 
						|
 | 
						|
The server part acts as a Receiver-Device and works transparently in the 
 | 
						|
background within your running VDR. It can serve multiple clients and it can
 | 
						|
distribute multiple input streams (i.e. from multiple DVB-cards) to multiple 
 | 
						|
clients using the native VTP protocol (for VDR-clients), or using the HTTP 
 | 
						|
protocol supporting clients such as XINE, MPlayer and so on. With XMMS or
 | 
						|
WinAMP, you can also listen to radio channels over a HTTP connection.
 | 
						|
 | 
						|
It is possible to attach as many clients as the bus and network can handle, as
 | 
						|
long as there is a device which can receive a specific channel. Multiple
 | 
						|
channels homed on the same transponder (which is determined by it's frequency)
 | 
						|
can be broadcasted with a single device.
 | 
						|
 | 
						|
Additional clients can be programmed using the Protocol Instructions inside
 | 
						|
the PROTOCOL file.
 | 
						|
 | 
						|
 | 
						|
2. Installation:
 | 
						|
----------------
 | 
						|
 | 
						|
Let's say streamdev's version is 0.4.0 and vdr's version is 1.X.X. If you 
 | 
						|
use anything else please exchange the version numbers appropriately (this
 | 
						|
way I don't have to update this section all the times;) ).
 | 
						|
 | 
						|
After compiling the PlugIn as stated below, start either (or both) parts of it
 | 
						|
by specifying "-P streamdev-client" and/or "-P streamdev-server" on the VDR
 | 
						|
command line.
 | 
						|
 | 
						|
What's important is that the client requests a channel using its Unique Channel
 | 
						|
ID. So, in order to find the channel at the server, it must have the same ID
 | 
						|
that is used on the client. You can achieve this by putting the server's 
 | 
						|
channels.conf on the client, preferably after scanning.
 | 
						|
 | 
						|
If you want to drive additional Input-Devices (with different sources) on the 
 | 
						|
client, you can merge the channels.conf files. VDR will detect if the local 
 | 
						|
device or the network device can receive the channels.
 | 
						|
 | 
						|
Last, but not least you have to copy the streamdev folder into the
 | 
						|
"plugins/streamdev" subfolder of VDR's config-directory (which is equal to your
 | 
						|
video-directory if not specified otherwise). For example, if you didn't specify
 | 
						|
a separate config-directory, and specified your video directory as "/video0",
 | 
						|
the directory has to be copied to /video0/plugins/streamdev.
 | 
						|
 | 
						|
The directory contains a file named streamdevhosts.conf which you must adjust
 | 
						|
to your needs. The syntax is the same as for svdrphosts.conf, so please consult
 | 
						|
VDR's documentation on how to fill that file, if you can't do it on-the-fly.
 | 
						|
 | 
						|
There's also a sample externremux.sh script in this directory. It is used by
 | 
						|
streamdev's external remux feature. The sample script uses mencoder. Please
 | 
						|
check the script for further information. You can specify a different script
 | 
						|
location with the -r parameter. The VDR commandline would then include a
 | 
						|
"-P 'streamdev-server -r /usr/local/bin/remux.sh'". Note the additional quotes,
 | 
						|
as otherwise -r will be passed to VDR and not to streamdev.
 | 
						|
 | 
						|
 | 
						|
2.1 VDR 1.4.x and older:
 | 
						|
------------------------
 | 
						|
 | 
						|
This version is not compatible to VDR releases older than 1.5.9. Take one of
 | 
						|
the streamdev-0.4.x releases if you are running at least VDR 1.4.x. For older
 | 
						|
VDRs you will probably need one of the streamdev-0.3.x releases.
 | 
						|
 | 
						|
2.2 VDR 1.6.0 and above:
 | 
						|
------------------------
 | 
						|
 | 
						|
cd vdr-1.X.X/PLUGINS/src
 | 
						|
tar xvfz vdr-streamdev-0.4.0.tgz
 | 
						|
ln -s streamdev-0.4.0 streamdev
 | 
						|
cp -r streamdev/streamdev VDRCONFDIR/plugins/
 | 
						|
cd ../..
 | 
						|
make [options, if necessary] vdr
 | 
						|
make [options, if necessary] plugins
 | 
						|
 | 
						|
2.3  Updating from streamdev 0.3.x
 | 
						|
----------------------------------
 | 
						|
 | 
						|
Starting with streamdev 0.4.0, all additional files are kept in a directory
 | 
						|
called "streamdev" inside VDR's plugin config directory. This affects in
 | 
						|
particular the file "streamdevhosts.conf". You will have to move it to its
 | 
						|
new location:
 | 
						|
 | 
						|
mv VDRCONFDIR/plugins/streamdevhosts.conf VDRCONFDIR/plugins/streamdev/
 | 
						|
 | 
						|
(Directory VDRCONFDIR/plugins/streamdev already exists, as you copied the
 | 
						|
whole folder from the sources directory as suggested above, right?)
 | 
						|
 | 
						|
The new default location for externremux.sh is also in this directory.
 | 
						|
 | 
						|
 | 
						|
3. Usage:
 | 
						|
---------
 | 
						|
 | 
						|
Start the server core itself by specifying -Pstreamdev-server on your VDR 
 | 
						|
commandline. To use the client core, specify -Pstreamdev-client. Both parts
 | 
						|
can run in one VDR instance, if necessary.
 | 
						|
 | 
						|
The parameter "Suspend behaviour" allows you to specify how the server should 
 | 
						|
react in case the client requests a channel that would require switching the
 | 
						|
primary device (i.e. disrupt live-tv). If set to "Offer suspend mode", you will
 | 
						|
have a new entry in the main menu. Activating that will put the server into
 | 
						|
"Suspend Mode" (a picture is displayed on TV). Then, a client may switch the
 | 
						|
primary card to wherever it likes to. While watching TV (Suspend deactivated),
 | 
						|
the client may not switch the transponder on the primary device.  If you set
 | 
						|
the behaviour to "Always suspended" (the default), there will be normal live-tv
 | 
						|
on the server, but whenever a client decides to switch the transponder, the 
 | 
						|
server will lose it's live-tv. Set to "Never suspended", the server always 
 | 
						|
prevents the client from switching transponders. If you set "Client may 
 | 
						|
suspend" to yes, the client can suspend the server remotely (this only applies
 | 
						|
if "Offer suspend mode" is selected).
 | 
						|
 | 
						|
NOTE: This mainly applies to One-Card-Systems, since with multiple cards there
 | 
						|
is no need to switch transponders on the primary interface, if the secondary
 | 
						|
can stream a given channel (i.e. if it is not blocked by a recording). If both
 | 
						|
cards are in use (i.e. when something is recorded, or by multiple clients), 
 | 
						|
this applies to Multiple-Card-Systems as well.
 | 
						|
 | 
						|
3.1 Usage HTTP server:
 | 
						|
----------------------
 | 
						|
 | 
						|
You can use the HTTP part by accessing the server with a HTTP-capable media
 | 
						|
player (such as XINE, MPlayer, and so on, if you have appropriate MPEG2-codecs
 | 
						|
installed). In the PlugIn's Setup, you can specify the port the server will
 | 
						|
listen to with the parameter "HTTP Server Port". The parameter "HTTP Streamtype"
 | 
						|
allows you to specify a default stream type, which is used if no specific type
 | 
						|
has been requested in the URL (see below). The supported stream types are:
 | 
						|
 | 
						|
TS     Transport Stream (i.e. a dump from the device)
 | 
						|
PES    Packetized Elemetary Stream (VDR's native recording format)
 | 
						|
PS     Program Stream (SVCD, DVD like stream)
 | 
						|
ES     Elementary Stream (only Video, if available, otherwise only Audio)
 | 
						|
EXTERN Pass stream through external script (e.g. for converting with mencoder)
 | 
						|
 | 
						|
Assuming that you leave the default port (3000), point your web browser to
 | 
						|
 | 
						|
http://hostname:3000/
 | 
						|
 | 
						|
You will be presented a menu with links to various channel lists, including M3U
 | 
						|
playlist formats.
 | 
						|
 | 
						|
If you don't want to use the HTML menu or the M3U playlists, you can access the
 | 
						|
streams directly like this:
 | 
						|
 | 
						|
http://hostname:3000/3
 | 
						|
http://hostname:3000/S19.2E-0-12480-898
 | 
						|
 | 
						|
The first one will deliver a channel by number on the server, the second one
 | 
						|
will request the channel by unique channel id. In addition, you can specify 
 | 
						|
the desired stream type as a path to the channel.
 | 
						|
 | 
						|
http://hostname:3000/TS/3
 | 
						|
http://hostname:3000/PES/S19.2E-0-12480-898
 | 
						|
 | 
						|
The first one would deliver the stream in TS, the second one in PES format. 
 | 
						|
Possible values are 'PES', 'TS', 'PS', 'ES' and 'EXTERN'. You need to specify
 | 
						|
the ES format explicitly if you want to listen to radio channels. Play them
 | 
						|
back i.e. with mpg123.
 | 
						|
 | 
						|
mpg123 http://hostname:3000/ES/200
 | 
						|
 | 
						|
With 'EXTERN' you can also add a parameter which is passed as argument to the
 | 
						|
externremux script.
 | 
						|
 | 
						|
http://hostname:3000/EXTERN;some_parameter/3
 | 
						|
 | 
						|
3.2 Usage VDR-to-VDR server:
 | 
						|
----------------------------
 | 
						|
 | 
						|
You can activate the VDR-to-VDR server part in the PlugIn's Setup Menu. It is
 | 
						|
deactivated by default. The Parameter "VDR-to-VDR Server Port" specifies the 
 | 
						|
port where you want the server to listen for incoming connections. The server
 | 
						|
will be activated when you push the OK button inside the setup menu, so there's
 | 
						|
no need to restart VDR.
 | 
						|
 | 
						|
3.3 Usage VDR-to-VDR client:
 | 
						|
----------------------------
 | 
						|
 | 
						|
Streamdev-client adds a "Suspend Server" item to VDR's mainmenu. With the
 | 
						|
setup parameter "Hide Mainmenu Entry" you can hide this menu item if you don't
 | 
						|
need it. "Suspend Server" is only useful if the server runs in "Offer suspend
 | 
						|
mode" with "Client may suspend" enabled.
 | 
						|
 | 
						|
The parameter "Remote IP" uses an IP-Adress-Editor, where you can just enter
 | 
						|
the IP number with the number keys on your remote. After three digits (or if 
 | 
						|
the next digit would result in an invalid IP adress, or if the first digit is
 | 
						|
0), the current position jumps to the next one. You can change positions with 
 | 
						|
the left and right buttons, and you can cycle the current position using up 
 | 
						|
and down. To confirm the entered address, press OK. So, if you want to enter 
 | 
						|
the IP address "127.0.0.1", just mark the corresponding entry as active and 
 | 
						|
type "127001<OK>" on your remote. If you want to enter "192.168.1.12", type 
 | 
						|
"1921681<Right>12<OK>". 
 | 
						|
 | 
						|
The parameters "Remote IP" and "Remote Port" in the client's setup specify the 
 | 
						|
address of the remote VDR-to-VDR server to connect to. Activate the client by
 | 
						|
setting "Start Client" to yes. It is disabled by default, because it wouldn't
 | 
						|
make much sense to start the client without specifying a server anyway. The 
 | 
						|
client is activated after you push the OK button, so there's no need to restart
 | 
						|
VDR. Deactivation on-the-fly is not possible, so in order to deactivate the 
 | 
						|
client, you will have to restart VDR. However requests to switch channels will
 | 
						|
be refused by streamdev-client once it has been deactivated. All other settings
 | 
						|
can be changed without restarting VDR.
 | 
						|
 | 
						|
The client will try to connect to the server (in case it isn't yet) whenever 
 | 
						|
a remote channel is requested. Just activate the client and switch to a 
 | 
						|
channel that's not available by local devices. If anything goes wrong with the 
 | 
						|
connection between the two, you will see it in the logfile instantly. If you 
 | 
						|
now switch the client to a channel which isn't covered by it's own local
 | 
						|
devices, it will ask the server for it. If the server can (currently) receive
 | 
						|
that channel, the client will show it until you switch again, or until the 
 | 
						|
server needs that card (if no other is free) for a recording on a different 
 | 
						|
transponder.
 | 
						|
 | 
						|
Only the needed PIDs are transferred, and additional PIDs can be turned on
 | 
						|
during an active transfer. This makes it possible to switch languages, receive
 | 
						|
additional channels (for recording on the client) and use plugins that use
 | 
						|
receivers themselves (like osdteletext).
 | 
						|
 | 
						|
With "Filter Streaming" enabled, the client will receive meta information like
 | 
						|
EPG data and service information, just as if the client had its own DVB card.
 | 
						|
Link channels and even a client-side EPG scan have been reported to work.
 | 
						|
 | 
						|
The last parameter, "Synchronize EPG", will have the client synchronize it's 
 | 
						|
program table with the server every now and then, but not regularly. This 
 | 
						|
happens when starting the client, and everytime VDR does its housekeeping 
 | 
						|
tasks. The only thing that's guaranteed is, that there will be a minimum 
 | 
						|
interval of ten seconds between each EPG synchronization. With "Filter
 | 
						|
Streaming" this option has been obsoleted. If you still need to synchronize
 | 
						|
EPG as additional information is available from the server, you should use the
 | 
						|
epgsync-plugin instead (http://vdr.schmirler.de).
 | 
						|
 | 
						|
4. Other useful Plugins:
 | 
						|
------------------------
 | 
						|
 | 
						|
4.1 Plugins for VDR-to-VDR clients:
 | 
						|
-----------------------------------
 | 
						|
 | 
						|
The following plugins are useful for VDR-to-VDR clients (i.e. VDRs running the
 | 
						|
streamdev-client):
 | 
						|
 | 
						|
* remotetimers (http://vdr.schmirler.de/)
 | 
						|
Add, edit, delete timers on client and server
 | 
						|
 | 
						|
* timersync (http://phivdr.dyndns.org/vdr/vdr-timersync/)
 | 
						|
Automatically syncronizes timer lists of client and server. All recordings will
 | 
						|
be made on the server
 | 
						|
 | 
						|
* remoteosd (http://vdr.schmirler.de/)
 | 
						|
Provides access to the server's OSD menu
 | 
						|
  
 | 
						|
* epgsync (http://vdr.schmirler.de/)
 | 
						|
Import EPG from server VDR
 | 
						|
 | 
						|
* femon (http://www.saunalahti.fi/~rahrenbe/vdr/femon/)
 | 
						|
Display signal information from server's DVB card. SVDRP support must be enabled
 | 
						|
in femon's setup
 | 
						|
 | 
						|
4.2 Plugins for Server:
 | 
						|
-----------------------
 | 
						|
 | 
						|
* dummydevice (http://phivdr.dyndns.org/vdr/vdr-dummydevice/)
 | 
						|
Recommended on a headless server (i.e. a server with no real output device).
 | 
						|
Without this plugin, a budget DVB card could become VDR's primary device. This
 | 
						|
causes unwanted sideeffects in certain situations.
 | 
						|
 | 
						|
4.3 Alternatives:
 | 
						|
-----------------
 | 
						|
 | 
						|
* xineliboutput (http://phivdr.dyndns.org/vdr/vdr-xineliboutput/)
 | 
						|
With its networking option, xineliboutput provides an alternative to streamdev.
 | 
						|
You will get the picture of the server VDR, including its OSD. However you
 | 
						|
won't get independent clients, as they all share the same output.
 | 
						|
 | 
						|
5. Known Problems:
 | 
						|
------------------
 | 
						|
 | 
						|
* In VDR-to-VDR setup, the availability of a channel is checked with a different
 | 
						|
priority than the actual channel switch. The later always uses priority 0.
 | 
						|
Usually a channel switch for live TV has priority 0 anyway, so it is not a
 | 
						|
problem here. However timers usually have a higher priority. Either avoid
 | 
						|
client side recordings or set the priority of client side timers to 0.
 | 
						|
 | 
						|
* There have been reports that channel switching with VDR 1.5.x/1.6.x clients
 | 
						|
sometimes fails. Current version includes a workaround which seems to work, but
 | 
						|
YMMV ;)
 | 
						|
 | 
						|
* Viewing encrypted channels became an issue with VDR's new CAM handling code.
 | 
						|
Streamdev doesn't provide a (dummy) CAM, so out of the box, VDR won't ever try
 | 
						|
to receive encrypted channels from streamdev. Pick one of the following
 | 
						|
solutions to work around the problem:
 | 
						|
 | 
						|
1. Force VDR to use streamdev. Open the channels menu on the client (or edit its
 | 
						|
channels.conf if you know how to do this) and set the CA field of all channels
 | 
						|
that only the server can decrypt to streamdev's device index. Usually streamdev
 | 
						|
will get number 9 or 10. Streamdev logs the actual device number when starting
 | 
						|
up. So please consider the logs for the correct value. Remember to fill in
 | 
						|
hexadecimal values if you are using an editor to modify your channels.conf
 | 
						|
(number 10 becomes an "a", number 11 a "b", ...).
 | 
						|
 | 
						|
2. Turn encrypted channels into Free-to-Air channels on the client. Again,
 | 
						|
either enter the channels menu or edit the client's channels.conf. You will
 | 
						|
also have to disable automatic channel updates on the client or (if streamdev
 | 
						|
is the only DVB source) disable streamdev's filter streaming feature. Otherwise
 | 
						|
VDR will revert the channel into an encrypted one.
 | 
						|
 | 
						|
3. Apply either patch "patches/vdr-1.6.0-intcamdevices.patch" or patch
 | 
						|
"patches/vdr-1.6.0-ignore_missing_cam.diff" to your client VDR. Intcamdevices
 | 
						|
is the clean solution. But as it modifies the VDR API, so you will need to
 | 
						|
recompile all of your plugins. The ignore_missing_cam patch is trivial, no need
 | 
						|
to recompile other plugins. However it is not suitable for clients with a DVB
 | 
						|
card of their own.
 |