- changed location of streamdevhosts.conf to VDRCONFDIR/plugins/streamdev

- changed externremux.sh's default location to VDRCONFDIR/plugins/streamdev
- added sample externremux.sh from http://www.vdr-wiki.de/
- stop providing channels after client has been disabled at runtime
- added logging of the client device's card index
- changed default suspend mode to "Always suspended"
- added "Hide Mainmenu Entry" setup option on client
This commit is contained in:
schmirl 2008-04-07 14:50:32 +00:00
parent 89735cbd95
commit 9c60fb4e42
14 changed files with 887 additions and 550 deletions

View File

@ -24,6 +24,7 @@ Rolf Ahrenberg
for suggesting a fix of the Makefile's default target for suggesting a fix of the Makefile's default target
for a TS PAT repacker based on Petri Laine's VDR TS recording patch for a TS PAT repacker based on Petri Laine's VDR TS recording patch
for making it possible to pass parameters to externremux.sh for making it possible to pass parameters to externremux.sh
for removing pre VDR 1.4 legacy code
Rantanen Teemu Rantanen Teemu
for providing vdr-incompletesections.diff for providing vdr-incompletesections.diff
@ -70,3 +71,6 @@ Olli Lammi
Joerg Pulz Joerg Pulz
for his FreeBSD compatibility patch for his FreeBSD compatibility patch
tobi
for pointing to unused files in the libdvbmpeg directory

16
HISTORY
View File

@ -1,6 +1,22 @@
VDR Plugin 'streamdev' Revision History VDR Plugin 'streamdev' Revision History
--------------------------------------- ---------------------------------------
2008-04-07: Branched v0_4
- changed location of streamdevhosts.conf to VDRCONFDIR/plugins/streamdev
- changed externremux.sh's default location to VDRCONFDIR/plugins/streamdev
- added sample externremux.sh from http://www.vdr-wiki.de/
- stop providing channels after client has been disabled at runtime
- added logging of the client device's card index
- changed default suspend mode to "Always suspended"
- added "Hide Mainmenu Entry" setup option on client
- resurrected clients "Suspend Server" menu item as its mainmenu entry
- dropped unused code for remote timers/recordings on client side
- dropped unused files client/{assembler,menu,remote}.[hc]
- dropped unused files in libdvbmpeg (reported by tobi)
- dropped patches for pre VDR 1.4
- removed legacy code for pre VDR 1.4 (thanks to Rolf Ahrenberg)
2008-03-31: Version 0.3.4 2008-03-31: Version 0.3.4
- added possibility to pass parameter to externremux.sh (thanks to Rolf - added possibility to pass parameter to externremux.sh (thanks to Rolf

View File

@ -1,7 +1,7 @@
# #
# Makefile for a Video Disk Recorder plugin # Makefile for a Video Disk Recorder plugin
# #
# $Id: Makefile,v 1.14 2008/04/07 14:40:39 schmirl Exp $ # $Id: Makefile,v 1.15 2008/04/07 14:50:32 schmirl Exp $
# The official name of this plugin. # The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin. # This name will be used in the '-P...' option of VDR to load the plugin.
@ -41,7 +41,7 @@ PACKAGE = vdr-$(ARCHIVE)
INCLUDES += -I$(VDRDIR)/include -I. INCLUDES += -I$(VDRDIR)/include -I.
DEFINES += -D_GNU_SOURCE DEFINES += -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here): ### The object files (add further files here):

98
README
View File

@ -15,13 +15,17 @@ Contents:
1. Description 1. Description
2. Installation 2. Installation
2.1 VDR 1.2.X 2.1 VDR 1.3.X and older
2.2 VDR 1.3.X and above 2.2 VDR 1.4.X and above
2.3 Updating from streamdev 0.3.x
3. Usage 3. Usage
3.1 Usage HTTP server 3.1 Usage HTTP server
3.2 Usage VDR-to-VDR server 3.2 Usage VDR-to-VDR server
3.3 Usage VDR-to-VDR client 3.3 Usage VDR-to-VDR client
4. Other useful Plugins 4. Other useful Plugins
4.1 Plugins for VDR-to-VDR clients
4.2 Plugins for Server
4.3 Alternatives
5. Known Problems 5. Known Problems
@ -57,7 +61,7 @@ the PROTOCOL file.
2. Installation: 2. Installation:
---------------- ----------------
Let's say streamdev's version is 0.3.1 and vdr's version is 1.X.X. If you 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 use anything else please exchange the version numbers appropriately (this
way I don't have to update this section all the times;) ). way I don't have to update this section all the times;) ).
@ -68,48 +72,62 @@ command line.
What's important is that the client requests a channel using its Unique Channel 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 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 that is used on the client. You can achieve this by putting the server's
channels.conf on the client, preferably after scanning (in case you use 1.2.X channels.conf on the client, preferably after scanning.
with AutoPID or 1.3.X).
If you want to drive additional Input-Devices (with different sources) on the 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 client, you can merge the channels.conf files. VDR will detect if the local
device or the network device can receive the channels. device or the network device can receive the channels.
Last, but not least you have to put the provided streamdevhosts.conf.example Last, but not least you have to copy the streamdev folder into the
into the "plugins" subfolder of your config-directory (which is equal to your "plugins/streamdev" subfolder of VDR's config-directory (which is equal to your
video-directory if not specified otherwise), rename it to streamdevhosts.conf video-directory if not specified otherwise). For example, if you didn't specify
and adjust it to your needs. The syntax is the same as for svdrphosts.conf, so a separate config-directory, and specified your video directory as "/video0",
please consult VDR's documentation on how to fill that file, if you can't do the directory has to be copied to /video0/plugins/streamdev.
it on-the-fly. For example, if you didn't specify a separate config-directory,
and specified your video directory as "/video0", the file has to be put to The directory contains a file named streamdevhosts.conf which you must adjust
/video0/plugins/streamdevhosts.conf. 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.2.X: 2.1 VDR 1.3.X and older:
-------------- ------------------------
It is recommended that you apply a patch to VDR that improves thread This version is not compatible to VDR releases older than 1.4.0. You will
cancellation. You can work without it, but you _might_ have delays in switching probably need one of the streamdev-0.3.x releases.
(especially when using VDR-to-VDR streaming) that are around three seconds.
cd vdr-1.X.X/PLUGINS/src 2.2 VDR 1.4.X and above:
tar xvfz vdr-streamdev-0.3.1.tgz
ln -s streamdev-0.3.1 streamdev
cd ../..
patch -p1 <PLUGINS/src/streamdev/patches/thread.c.diff
make [options, if necessary] vdr
make [options, if necessary] plugins
2.2 VDR 1.3.X and above:
------------------------ ------------------------
cd vdr-1.X.X/PLUGINS/src cd vdr-1.X.X/PLUGINS/src
tar xvfz vdr-streamdev-0.3.1.tgz tar xvfz vdr-streamdev-0.4.0.tgz
ln -s streamdev-0.3.1 streamdev ln -s streamdev-0.4.0 streamdev
cp -r streamdev/streamdev VDRCONFDIR/plugins/
cd ../.. cd ../..
make [options, if necessary] vdr make [options, if necessary] vdr
make [options, if necessary] plugins 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: 3. Usage:
--------- ---------
@ -120,12 +138,12 @@ can run in one VDR instance, if necessary.
The parameter "Suspend behaviour" allows you to specify how the server should 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 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" (the primary device (i.e. disrupt live-tv). If set to "Offer suspend mode", you will
default), you will have a new entry in the main menu. Activating that will put have a new entry in the main menu. Activating that will put the server into
the server into "Suspend Mode" (a picture is displayed on TV). Then, a client "Suspend Mode" (a picture is displayed on TV). Then, a client may switch the
may switch the primary card to wherever it likes to. While watching TV (Suspend primary card to wherever it likes to. While watching TV (Suspend deactivated),
deactivated), the client may not switch the transponder on the primary device. the client may not switch the transponder on the primary device. If you set
If you set the behaviour to "Always suspended", there will be normal live-tv 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 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 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 prevents the client from switching transponders. If you set "Client may
@ -198,6 +216,11 @@ no need to restart VDR.
3.3 Usage VDR-to-VDR client: 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 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 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 the next digit would result in an invalid IP adress, or if the first digit is
@ -214,8 +237,9 @@ 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 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 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 VDR. Deactivation on-the-fly is not possible, so in order to deactivate the
client, you will have to restart VDR. All other settings can be changed without client, you will have to restart VDR. However requests to switch channels will
restarting VDR. 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 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 a remote channel is requested. Just activate the client and switch to a

View File

@ -1,5 +1,5 @@
/* /*
* $Id: device.c,v 1.17 2008/04/07 14:40:39 schmirl Exp $ * $Id: device.c,v 1.18 2008/04/07 14:50:32 schmirl Exp $
*/ */
#include "client/device.h" #include "client/device.h"
@ -28,6 +28,7 @@ cStreamdevDevice::cStreamdevDevice(void) {
m_Filters = new cStreamdevFilters; m_Filters = new cStreamdevFilters;
StartSectionHandler(); StartSectionHandler();
isyslog("streamdev-client: got device number %d", CardIndex() + 1);
m_Device = this; m_Device = this;
m_Pids = 0; m_Pids = 0;
@ -78,6 +79,10 @@ bool cStreamdevDevice::ProvidesChannel(const cChannel *Channel, int Priority,
bool res = false; bool res = false;
bool prio = Priority < 0 || Priority > this->Priority(); bool prio = Priority < 0 || Priority > this->Priority();
bool ndr = false; bool ndr = false;
if (!StreamdevClientSetup.StartClient)
return false;
Dprintf("ProvidesChannel, Channel=%s, Prio=%d\n", Channel->Name(), Priority); Dprintf("ProvidesChannel, Channel=%s, Prio=%d\n", Channel->Name(), Priority);
if (ClientSocket.DataSocket(siLive) != NULL if (ClientSocket.DataSocket(siLive) != NULL

View File

@ -1,5 +1,5 @@
/* /*
* $Id: setup.c,v 1.4 2008/04/07 14:40:40 schmirl Exp $ * $Id: setup.c,v 1.5 2008/04/07 14:50:32 schmirl Exp $
*/ */
#include <vdr/menuitems.h> #include <vdr/menuitems.h>
@ -15,6 +15,7 @@ cStreamdevClientSetup::cStreamdevClientSetup(void) {
RemotePort = 2004; RemotePort = 2004;
StreamFilters = false; StreamFilters = false;
SyncEPG = false; SyncEPG = false;
HideMenuEntry = false;
strcpy(RemoteIp, ""); strcpy(RemoteIp, "");
} }
@ -29,6 +30,7 @@ bool cStreamdevClientSetup::SetupParse(const char *Name, const char *Value) {
else if (strcmp(Name, "RemotePort") == 0) RemotePort = atoi(Value); else if (strcmp(Name, "RemotePort") == 0) RemotePort = atoi(Value);
else if (strcmp(Name, "StreamFilters") == 0) StreamFilters = atoi(Value); else if (strcmp(Name, "StreamFilters") == 0) StreamFilters = atoi(Value);
else if (strcmp(Name, "SyncEPG") == 0) SyncEPG = atoi(Value); else if (strcmp(Name, "SyncEPG") == 0) SyncEPG = atoi(Value);
else if (strcmp(Name, "HideMenuEntry") == 0) HideMenuEntry = atoi(Value);
else return false; else return false;
return true; return true;
} }
@ -36,6 +38,7 @@ bool cStreamdevClientSetup::SetupParse(const char *Name, const char *Value) {
cStreamdevClientMenuSetupPage::cStreamdevClientMenuSetupPage(void) { cStreamdevClientMenuSetupPage::cStreamdevClientMenuSetupPage(void) {
m_NewSetup = StreamdevClientSetup; m_NewSetup = StreamdevClientSetup;
AddBoolEdit (tr("Hide Mainmenu Entry"),m_NewSetup.HideMenuEntry);
AddBoolEdit (tr("Start Client"), m_NewSetup.StartClient); AddBoolEdit (tr("Start Client"), m_NewSetup.StartClient);
AddIpEdit (tr("Remote IP"), m_NewSetup.RemoteIp); AddIpEdit (tr("Remote IP"), m_NewSetup.RemoteIp);
AddShortEdit(tr("Remote Port"), m_NewSetup.RemotePort); AddShortEdit(tr("Remote Port"), m_NewSetup.RemotePort);
@ -51,8 +54,6 @@ void cStreamdevClientMenuSetupPage::Store(void) {
if (m_NewSetup.StartClient != StreamdevClientSetup.StartClient) { if (m_NewSetup.StartClient != StreamdevClientSetup.StartClient) {
if (m_NewSetup.StartClient) if (m_NewSetup.StartClient)
cStreamdevDevice::Init(); cStreamdevDevice::Init();
else
Skins.Message(mtInfo, tr("Please restart VDR to activate changes"));
} }
SetupStore("StartClient", m_NewSetup.StartClient); SetupStore("StartClient", m_NewSetup.StartClient);
@ -63,6 +64,7 @@ void cStreamdevClientMenuSetupPage::Store(void) {
SetupStore("RemotePort", m_NewSetup.RemotePort); SetupStore("RemotePort", m_NewSetup.RemotePort);
SetupStore("StreamFilters", m_NewSetup.StreamFilters); SetupStore("StreamFilters", m_NewSetup.StreamFilters);
SetupStore("SyncEPG", m_NewSetup.SyncEPG); SetupStore("SyncEPG", m_NewSetup.SyncEPG);
SetupStore("HideMenuEntry", m_NewSetup.HideMenuEntry);
StreamdevClientSetup = m_NewSetup; StreamdevClientSetup = m_NewSetup;

View File

@ -1,5 +1,5 @@
/* /*
* $Id: setup.h,v 1.3 2008/04/07 14:27:28 schmirl Exp $ * $Id: setup.h,v 1.4 2008/04/07 14:50:32 schmirl Exp $
*/ */
#ifndef VDR_STREAMDEV_SETUPCLIENT_H #ifndef VDR_STREAMDEV_SETUPCLIENT_H
@ -17,6 +17,7 @@ struct cStreamdevClientSetup {
int RemotePort; int RemotePort;
int StreamFilters; int StreamFilters;
int SyncEPG; int SyncEPG;
int HideMenuEntry;
}; };
extern cStreamdevClientSetup StreamdevClientSetup; extern cStreamdevClientSetup StreamdevClientSetup;

297
i18n.c
View File

@ -1,5 +1,5 @@
/* /*
* $Id: i18n.c,v 1.7 2008/04/07 14:40:39 schmirl Exp $ * $Id: i18n.c,v 1.8 2008/04/07 14:50:32 schmirl Exp $
*/ */
#include "i18n.h" #include "i18n.h"
@ -23,7 +23,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "VTP Streaming Client", // English { "VTP Streaming Client", // English
"VTP Streaming Client", // Deutsch "VTP Streaming Client", // Deutsch
@ -41,7 +48,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Start VDR-to-VDR Server", // English { "Start VDR-to-VDR Server", // English
"VDR-zu-VDR Server starten", // Deutsch "VDR-zu-VDR Server starten", // Deutsch
@ -59,7 +73,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Start HTTP Server", // English { "Start HTTP Server", // English
"HTTP Server starten", // Deutsch "HTTP Server starten", // Deutsch
@ -77,7 +98,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "HTTP Streamtype", // English { "HTTP Streamtype", // English
"HTTP Streamtyp", // Deutsch "HTTP Streamtyp", // Deutsch
@ -95,7 +123,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Start Client", // English { "Start Client", // English
"Client starten", // Deutsch "Client starten", // Deutsch
@ -113,7 +148,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "VDR-to-VDR Server Port", // English { "VDR-to-VDR Server Port", // English
"Port des VDR-zu-VDR Servers", // Deutsch "Port des VDR-zu-VDR Servers", // Deutsch
@ -131,7 +173,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "HTTP Server Port", // English { "HTTP Server Port", // English
"Port des HTTP Servers", // Deutsch "Port des HTTP Servers", // Deutsch
@ -149,7 +198,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Maximum Number of Clients", // English { "Maximum Number of Clients", // English
"Maximalanzahl an Clients", // Deutsch "Maximalanzahl an Clients", // Deutsch
@ -167,7 +223,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Remote IP", // English { "Remote IP", // English
"IP der Gegenseite", // Deutsch "IP der Gegenseite", // Deutsch
@ -185,7 +248,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Remote Port", // English { "Remote Port", // English
"Port der Gegenseite", // Deutsch "Port der Gegenseite", // Deutsch
@ -203,7 +273,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Remote Streamtype", // English { "Remote Streamtype", // English
"Streamtyp von Gegenseite", // Deutsch "Streamtyp von Gegenseite", // Deutsch
@ -221,7 +298,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Common Settings", // English { "Common Settings", // English
"Allgemeines", // Deutsch "Allgemeines", // Deutsch
@ -239,7 +323,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "VDR-to-VDR Server", // English { "VDR-to-VDR Server", // English
"VDR-zu-VDR Server", // Deutsch "VDR-zu-VDR Server", // Deutsch
@ -257,7 +348,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "HTTP Server", // English { "HTTP Server", // English
"HTTP Server", // Deutsch "HTTP Server", // Deutsch
@ -275,7 +373,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "VDR-to-VDR Client", // English { "VDR-to-VDR Client", // English
"VDR-zu-VDR Client", // Deutsch "VDR-zu-VDR Client", // Deutsch
@ -293,7 +398,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Please restart VDR to activate changes", // English { "Please restart VDR to activate changes", // English
"Bitte starten Sie für die Änderungen VDR neu", // Deutsch "Bitte starten Sie für die Änderungen VDR neu", // Deutsch
@ -311,7 +423,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Synchronize EPG", // English { "Synchronize EPG", // English
"EPG synchronisieren", // Deutsch "EPG synchronisieren", // Deutsch
@ -329,7 +448,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Suspend Live TV", // English { "Suspend Live TV", // English
"Live-TV pausieren", // Deutsch "Live-TV pausieren", // Deutsch
@ -347,7 +473,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Suspend behaviour", // English { "Suspend behaviour", // English
"Pausierverhalten", // Deutsch "Pausierverhalten", // Deutsch
@ -365,7 +498,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Offer suspend mode", // English { "Offer suspend mode", // English
"Pausieren anbieten", // Deutsch "Pausieren anbieten", // Deutsch
@ -383,7 +523,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Always suspended", // English { "Always suspended", // English
"Immer pausiert", // Deutsch "Immer pausiert", // Deutsch
@ -401,7 +548,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Never suspended", // English { "Never suspended", // English
"Nie pausiert", // Deutsch "Nie pausiert", // Deutsch
@ -419,7 +573,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Suspend Server", // English { "Suspend Server", // English
"Server pausieren", // Deutsch "Server pausieren", // Deutsch
@ -437,7 +598,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Server is suspended", // English { "Server is suspended", // English
"Server ist pausiert", // Deutsch "Server ist pausiert", // Deutsch
@ -455,7 +623,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Couldn't suspend Server!", // English { "Couldn't suspend Server!", // English
"Konnte Server nicht pausieren!", // Deutsch "Konnte Server nicht pausieren!", // Deutsch
@ -473,7 +648,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Client may suspend", // English { "Client may suspend", // English
"Client darf pausieren", // Deutsch "Client darf pausieren", // Deutsch
@ -491,7 +673,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Bind to IP", // English { "Bind to IP", // English
"", // Deutsch "", // Deutsch
@ -509,7 +698,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Filter Streaming", // English { "Filter Streaming", // English
"", // Deutsch "", // Deutsch
@ -527,7 +723,14 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ "Streaming active", // English { "Streaming active", // English
"Streamen im Gange", // Deutsch "Streamen im Gange", // Deutsch
@ -545,7 +748,39 @@ const tI18nPhrase Phrases[] = {
"", // Romaneste "", // Romaneste
"", // Magyar "", // Magyar
"", // Catala "", // Catala
"" // Russian "", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
},
{ "Hide Mainmenu Entry", // English
"Hauptmenüeintrag verstecken", // Deutsch
"", // Slovenski
"", // Italiano
"", // Nederlands
"", // Português
"", // Français
"", // Norsk
"Piilota valinta päävalikosta", // suomi
"", // Polski
"", // Español
"", // Ellinika
"", // Svenska
"", // Romaneste
"", // Magyar
"", // Catala
"", // Russian
"", // Hrvatski
"", // Eesti
"", // Dansk
"", // Czech
#if VDRVERSNUM >= 10502
"", // Türkçe
#endif
}, },
{ NULL } { NULL }
}; };

View File

@ -1,4 +1,5 @@
#include "remux/extern.h" #include "remux/extern.h"
#include "server/server.h"
#include "server/streamer.h" #include "server/streamer.h"
#include <vdr/tools.h> #include <vdr/tools.h>
#include <sys/types.h> #include <sys/types.h>
@ -6,7 +7,7 @@
#include <signal.h> #include <signal.h>
#include <unistd.h> #include <unistd.h>
const char *g_ExternRemux = "/root/externremux.sh"; const char *g_ExternRemux = EXTERNREMUXPATH;
class cTSExt: public cThread { class cTSExt: public cThread {
private: private:

View File

@ -1,5 +1,5 @@
/* /*
* $Id: server.h,v 1.2 2005/05/09 20:22:29 lordjaxom Exp $ * $Id: server.h,v 1.3 2008/04/07 14:50:33 schmirl Exp $
*/ */
#ifndef VDR_STREAMDEV_SERVER_H #ifndef VDR_STREAMDEV_SERVER_H
@ -10,7 +10,8 @@
#include "server/component.h" #include "server/component.h"
#include "server/connection.h" #include "server/connection.h"
#define STREAMDEVHOSTSPATH (*AddDirectory(cPlugin::ConfigDirectory(), "streamdevhosts.conf")) #define EXTERNREMUXPATH (*AddDirectory(cPlugin::ConfigDirectory(PLUGIN_NAME_I18N), "externremux.sh"))
#define STREAMDEVHOSTSPATH (*AddDirectory(cPlugin::ConfigDirectory(PLUGIN_NAME_I18N), "streamdevhosts.conf"))
class cStreamdevServer: public cThread { class cStreamdevServer: public cThread {
private: private:

View File

@ -1,5 +1,5 @@
/* /*
* $Id: setup.c,v 1.2 2005/05/09 20:22:29 lordjaxom Exp $ * $Id: setup.c,v 1.3 2008/04/07 14:50:33 schmirl Exp $
*/ */
#include <vdr/menuitems.h> #include <vdr/menuitems.h>
@ -17,7 +17,7 @@ cStreamdevServerSetup::cStreamdevServerSetup(void) {
StartHTTPServer = true; StartHTTPServer = true;
HTTPServerPort = 3000; HTTPServerPort = 3000;
HTTPStreamType = stPES; HTTPStreamType = stPES;
SuspendMode = smOffer; SuspendMode = smAlways;
AllowSuspend = false; AllowSuspend = false;
strcpy(VTPBindIP, "0.0.0.0"); strcpy(VTPBindIP, "0.0.0.0");
strcpy(HTTPBindIP, "0.0.0.0"); strcpy(HTTPBindIP, "0.0.0.0");

View File

@ -3,7 +3,7 @@
* *
* See the README file for copyright information and how to reach the author. * See the README file for copyright information and how to reach the author.
* *
* $Id: streamdev-client.c,v 1.4 2008/04/07 14:40:39 schmirl Exp $ * $Id: streamdev-client.c,v 1.5 2008/04/07 14:50:32 schmirl Exp $
*/ */
#include "streamdev-client.h" #include "streamdev-client.h"
@ -42,7 +42,7 @@ void cPluginStreamdevClient::Housekeeping(void) {
} }
const char *cPluginStreamdevClient::MainMenuEntry(void) { const char *cPluginStreamdevClient::MainMenuEntry(void) {
return StreamdevClientSetup.StartClient ? tr("Suspend Server") : NULL; return StreamdevClientSetup.StartClient && !StreamdevClientSetup.HideMenuEntry ? tr("Suspend Server") : NULL;
} }
cOsdObject *cPluginStreamdevClient::MainMenuAction(void) { cOsdObject *cPluginStreamdevClient::MainMenuAction(void) {

48
streamdev/externremux.sh Executable file
View File

@ -0,0 +1,48 @@
#!/bin/sh
#
# externremux.sh - sample remux script using mencoder for remuxing.
#
# Install this script as VDRCONFDIR/plugins/streamdev/externremux.sh
#
# The parameter STREAMQUALITY selects the default remux parameters. Adjust
# to your needs and point your web browser to http://servername:3000/extern/
# To select different remux parameters on the fly, insert a semicolon and
# the name of the requested quality: http://servername:3000/extern;WLAN11/
# CONFIG START
STREAMQUALITY="DSL6000" # DSL{1,2,3,6}000, LAN10, WLAN{11,54}, IPAQ
TMP=/tmp/externremux-${RANDOM:-$$}
MENCODER=mencoder
# CONFIG END
mkdir -p $TMP
mkfifo $TMP/out.avi
(trap "rm -rf $TMP" EXIT HUP INT TERM ABRT; cat $TMP/out.avi) &
case ${1:-$STREAMQUALITY} in
DSL1000) exec $MENCODER -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=100 \
-oac mp3lame -lameopts preset=15:mode=3 -vf scale=160:104 \
-o $TMP/out.avi -- - &>$TMP/out.log ;;
DSL2000) exec $MENCODER -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=128 \
-oac mp3lame -lameopts preset=15:mode=3 -vf scale=160:104 \
-o $TMP/out.avi -- - &>$TMP/out.log ;;
DSL3000) exec $MENCODER -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=250 \
-oac mp3lame -lameopts preset=15:mode=3 -vf scale=320:208 \
-o $TMP/out.avi -- - &>$TMP/out.log ;;
DSL6000) exec $MENCODER -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=350 \
-oac mp3lame -lameopts preset=15:mode=3 -vf scale=320:208 \
-o $TMP/out.avi -- - &>$TMP/out.log ;;
LAN10) exec $MENCODER -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=4096 \
-oac mp3lame -lameopts preset=standard \
-o $TMP/out.avi -- - &>$TMP/out.log ;;
WLAN11) exec $MENCODER -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=768 \
-oac mp3lame -lameopts preset=standard -vf scale=640:408 \
-o $TMP/out.avi -- - &>$TMP/out.log ;;
WLAN54) exec $MENCODER -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=2048 \
-oac mp3lame -lameopts preset=standard \
-o $TMP/out.avi -- - &>$TMP/out.log ;;
IPAQ) exec $MENCODER -ovc lavc -lavcopts vcodec=mpeg4:vbitrate=350 \
-oac mp3lame -lameopts preset=15:mode=3 -vf scale=320:208 \
-o $TMP/out.avi -- - &>$TMP/out.log ;;
*) touch $TMP/out.avi ;;
esac