Compare commits
5 Commits
master
...
servermenu
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
7175d7de91 | ||
|
|
94aef85adc | ||
|
|
9b91301d94 | ||
|
|
7347e24123 | ||
|
|
c652e8fa81 |
18
README
18
README
@@ -175,10 +175,16 @@ 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.
|
||||
|
||||
On the server, the main menu entry "Streamdev Connections" gives you a list
|
||||
of currently connected clients. Use the "red" key to terminate a connection.
|
||||
Note that depending on connection type and client, the client might re-connect
|
||||
sooner or later. Depending on the server setup, the "blue" key might be enabled
|
||||
as well. Please read below.
|
||||
|
||||
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
|
||||
primary device (i.e. disrupt live-tv). If set to "Offer suspend mode", you
|
||||
enable the "blue" key in the server's main menu. It 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
|
||||
@@ -190,10 +196,10 @@ 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.
|
||||
is no need to switch transponders on the primary interface, if on of the other
|
||||
cards is idle (i.e. if it is not blocked by a recording). If all 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:
|
||||
----------------------
|
||||
|
||||
@@ -23,7 +23,7 @@ SERVEROBJS = $(PLUGIN).o \
|
||||
componentHTTP.o connectionHTTP.o menuHTTP.o \
|
||||
componentIGMP.o connectionIGMP.o \
|
||||
streamer.o livestreamer.o livefilter.o recplayer.o \
|
||||
suspend.o setup.o
|
||||
menu.o suspend.o setup.o
|
||||
|
||||
### The main target:
|
||||
|
||||
|
||||
@@ -6,6 +6,7 @@
|
||||
|
||||
#include "server/componentIGMP.h"
|
||||
#include "server/connectionIGMP.h"
|
||||
#include "server/server.h"
|
||||
#include "server/setup.h"
|
||||
|
||||
#ifndef IGMP_ALL_HOSTS
|
||||
@@ -37,7 +38,6 @@
|
||||
class cMulticastGroup: public cListObject
|
||||
{
|
||||
public:
|
||||
cConnectionIGMP *connection;
|
||||
in_addr_t group;
|
||||
in_addr_t reporter;
|
||||
struct timeval timeout;
|
||||
@@ -48,7 +48,6 @@ public:
|
||||
};
|
||||
|
||||
cMulticastGroup::cMulticastGroup(in_addr_t Group) :
|
||||
connection(NULL),
|
||||
group(Group),
|
||||
reporter(0)
|
||||
{
|
||||
@@ -235,10 +234,7 @@ cServerConnection* cComponentIGMP::ProcessMessage(struct igmp *Igmp, in_addr_t G
|
||||
group = new cMulticastGroup(Group);
|
||||
m_Groups.Add(group);
|
||||
}
|
||||
if (!group->connection) {
|
||||
IGMPStartMulticast(group);
|
||||
conn = group->connection;
|
||||
}
|
||||
conn = IGMPStartMulticast(group);
|
||||
IGMPStartTimer(group, Sender);
|
||||
if (Igmp->igmp_type == IGMP_V1_MEMBERSHIP_REPORT)
|
||||
IGMPStartV1HostTimer(group);
|
||||
@@ -430,20 +426,36 @@ void cComponentIGMP::IGMPSendGroupQuery(cMulticastGroup* Group)
|
||||
IGMPSendQuery(Group->group, IGMP_LAST_MEMBER_QUERY_INTERVAL_TS);
|
||||
}
|
||||
|
||||
void cComponentIGMP::IGMPStartMulticast(cMulticastGroup* Group)
|
||||
cServerConnection* cComponentIGMP::IGMPStartMulticast(cMulticastGroup* Group)
|
||||
{
|
||||
cServerConnection *conn = NULL;
|
||||
in_addr_t g = ntohl(Group->group);
|
||||
if (g > MULTICAST_PRIV_MIN && g <= MULTICAST_PRIV_MAX) {
|
||||
cThreadLock lock;
|
||||
cChannel *channel = Channels.GetByNumber(g - MULTICAST_PRIV_MIN);
|
||||
Group->connection = (cConnectionIGMP*) NewClient();
|
||||
if (!Group->connection->SetChannel(channel, Group->group)) {
|
||||
DELETENULL(Group->connection);
|
||||
const cList<cServerConnection>& clients = cStreamdevServer::Clients(lock);
|
||||
cServerConnection *s = clients.First();
|
||||
while (s) {
|
||||
if (s->RemoteIpAddr() == Group->group)
|
||||
break;
|
||||
s = clients.Next(s);
|
||||
}
|
||||
if (!s) {
|
||||
conn = NewClient();
|
||||
if (!((cConnectionIGMP *)conn)->SetChannel(channel, Group->group)) {
|
||||
DELETENULL(conn);
|
||||
}
|
||||
}
|
||||
}
|
||||
return conn;
|
||||
}
|
||||
|
||||
void cComponentIGMP::IGMPStopMulticast(cMulticastGroup* Group)
|
||||
{
|
||||
if (Group->connection)
|
||||
Group->connection->Stop();
|
||||
cThreadLock lock;
|
||||
const cList<cServerConnection>& clients = cStreamdevServer::Clients(lock);
|
||||
for (cServerConnection *s = clients.First(); s; s = clients.Next(s)) {
|
||||
if (s->RemoteIpAddr() == Group->group)
|
||||
s->Close();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -10,7 +10,6 @@
|
||||
#include <vdr/thread.h>
|
||||
#include "server/component.h"
|
||||
|
||||
class cConnectionIGMP;
|
||||
class cMulticastGroup;
|
||||
|
||||
class cComponentIGMP: public cServerComponent, public cThread {
|
||||
@@ -42,7 +41,7 @@ private:
|
||||
void IGMPStartRetransmitTimer(cMulticastGroup* Group);
|
||||
void IGMPClearRetransmitTimer(cMulticastGroup* Group);
|
||||
void IGMPSendGroupQuery(cMulticastGroup* Group);
|
||||
void IGMPStartMulticast(cMulticastGroup* Group);
|
||||
cServerConnection* IGMPStartMulticast(cMulticastGroup* Group);
|
||||
void IGMPStopMulticast(cMulticastGroup* Group);
|
||||
|
||||
virtual void Action();
|
||||
|
||||
@@ -237,6 +237,13 @@ bool cServerConnection::Respond(const char *Message, bool Last, ...)
|
||||
return true;
|
||||
}
|
||||
|
||||
bool cServerConnection::Close()
|
||||
{
|
||||
if (IsOpen())
|
||||
isyslog("streamdev-server: closing %s connection to %s:%d", Protocol(), RemoteIp().c_str(), RemotePort());
|
||||
return cTBSocket::Close();
|
||||
}
|
||||
|
||||
#if APIVERSNUM >= 10700
|
||||
static int GetClippedNumProvidedSystems(int AvailableBits, cDevice *Device)
|
||||
{
|
||||
@@ -407,3 +414,6 @@ void cServerConnection::MainThreadHook()
|
||||
{
|
||||
m_SwitchLive->Switch();
|
||||
}
|
||||
|
||||
cString cServerConnection::ToText() const
|
||||
{ return cString::sprintf("%s\t%s:%d", Protocol(), RemoteIp().c_str(), RemotePort()); }
|
||||
|
||||
@@ -103,6 +103,9 @@ public:
|
||||
/* Will make the socket close after sending all queued output data */
|
||||
void DeferClose(void) { m_DeferClose = true; }
|
||||
|
||||
/* Close the socket */
|
||||
virtual bool Close(void);
|
||||
|
||||
/* Will retrieve an unused device for transmitting data. Receivers have
|
||||
already been attached from the device if necessary. Use the returned
|
||||
cDevice in a following call to StartTransfer */
|
||||
@@ -122,6 +125,9 @@ public:
|
||||
/* This connections protocol name */
|
||||
virtual const char* Protocol(void) const { return m_Protocol; }
|
||||
|
||||
/* Representation in menu */
|
||||
virtual cString ToText(void) const;
|
||||
|
||||
/* std::map with additional information */
|
||||
const tStrStrMap& Headers(void) const { return m_Headers; }
|
||||
};
|
||||
|
||||
@@ -359,3 +359,8 @@ bool cConnectionHTTP::ProcessURI(const std::string& PathInfo)
|
||||
return false;
|
||||
}
|
||||
|
||||
cString cConnectionHTTP::ToText() const
|
||||
{
|
||||
cString str = cServerConnection::ToText();
|
||||
return m_LiveStreamer ? cString::sprintf("%s\t%s", *str, *m_LiveStreamer->ToText()) : str;
|
||||
}
|
||||
|
||||
@@ -47,6 +47,8 @@ public:
|
||||
virtual void Attach(void) { if (m_LiveStreamer != NULL) m_LiveStreamer->Attach(); }
|
||||
virtual void Detach(void) { if (m_LiveStreamer != NULL) m_LiveStreamer->Detach(); }
|
||||
|
||||
virtual cString ToText() const;
|
||||
|
||||
virtual bool CanAuthenticate(void);
|
||||
|
||||
virtual bool Command(char *Cmd);
|
||||
@@ -57,7 +59,7 @@ public:
|
||||
|
||||
inline bool cConnectionHTTP::Abort(void) const
|
||||
{
|
||||
return m_LiveStreamer && m_LiveStreamer->Abort();
|
||||
return !IsOpen() || (m_LiveStreamer && m_LiveStreamer->Abort());
|
||||
}
|
||||
|
||||
#endif // VDR_STREAMDEV_SERVERS_CONNECTIONVTP_H
|
||||
|
||||
@@ -64,10 +64,15 @@ void cConnectionIGMP::Welcome()
|
||||
esyslog("streamdev-server IGMP: GetDevice failed");
|
||||
}
|
||||
|
||||
void cConnectionIGMP::Stop()
|
||||
bool cConnectionIGMP::Close()
|
||||
{
|
||||
if (m_LiveStreamer) {
|
||||
if (m_LiveStreamer)
|
||||
m_LiveStreamer->Stop();
|
||||
DELETENULL(m_LiveStreamer);
|
||||
return cServerConnection::Close();
|
||||
}
|
||||
|
||||
cString cConnectionIGMP::ToText() const
|
||||
{
|
||||
cString str = cServerConnection::ToText();
|
||||
return m_LiveStreamer ? cString::sprintf("%s\t%s", *str, *m_LiveStreamer->ToText()) : str;
|
||||
}
|
||||
|
||||
@@ -28,20 +28,21 @@ public:
|
||||
|
||||
bool SetChannel(cChannel *Channel, in_addr_t Dst);
|
||||
virtual void Welcome(void);
|
||||
void Stop();
|
||||
virtual cString ToText() const;
|
||||
|
||||
/* Not used here */
|
||||
virtual bool Command(char *Cmd) { return false; }
|
||||
|
||||
virtual void Attach(void) { if (m_LiveStreamer != NULL) m_LiveStreamer->Attach(); }
|
||||
virtual void Detach(void) { if (m_LiveStreamer != NULL) m_LiveStreamer->Detach(); }
|
||||
virtual bool Close(void);
|
||||
|
||||
virtual bool Abort(void) const;
|
||||
};
|
||||
|
||||
inline bool cConnectionIGMP::Abort(void) const
|
||||
{
|
||||
return !m_LiveStreamer || m_LiveStreamer->Abort();
|
||||
return !IsOpen() || !m_LiveStreamer || m_LiveStreamer->Abort();
|
||||
}
|
||||
|
||||
#endif // VDR_STREAMDEV_SERVERS_CONNECTIONIGMP_H
|
||||
|
||||
@@ -774,7 +774,7 @@ cConnectionVTP::~cConnectionVTP()
|
||||
|
||||
bool cConnectionVTP::Abort(void) const
|
||||
{
|
||||
return (m_LiveStreamer && m_LiveStreamer->Abort()) ||
|
||||
return !IsOpen() || (m_LiveStreamer && m_LiveStreamer->Abort()) ||
|
||||
(m_FilterStreamer && m_FilterStreamer->Abort());
|
||||
}
|
||||
|
||||
@@ -1811,3 +1811,14 @@ bool cConnectionVTP::Respond(int Code, const char *Message, ...)
|
||||
Code < 0 ? -Code : Code,
|
||||
Code < 0 ? '-' : ' ', *str);
|
||||
}
|
||||
|
||||
cString cConnectionVTP::ToText() const
|
||||
{
|
||||
cString str = cServerConnection::ToText();
|
||||
if (m_LiveStreamer)
|
||||
return cString::sprintf("%s\t%s", *str, *m_LiveStreamer->ToText());
|
||||
else if (m_RecPlayer)
|
||||
return cString::sprintf("%s\t%s", *str, m_RecPlayer->getCurrentRecording()->Name());
|
||||
else
|
||||
return str;
|
||||
}
|
||||
|
||||
@@ -53,6 +53,8 @@ public:
|
||||
virtual void Welcome(void);
|
||||
virtual void Reject(void);
|
||||
|
||||
virtual cString ToText() const;
|
||||
|
||||
virtual bool Abort(void) const;
|
||||
virtual void Detach(void);
|
||||
virtual void Attach(void);
|
||||
|
||||
@@ -460,6 +460,14 @@ void cStreamdevLiveStreamer::GetSignal(int *DevNum, int *Strength, int *Quality)
|
||||
}
|
||||
}
|
||||
|
||||
cString cStreamdevLiveStreamer::ToText() const
|
||||
{
|
||||
if (m_Device && m_Channel) {
|
||||
return cString::sprintf("DVB%-2d %3d %s", m_Device->DeviceNumber() + 1, m_Channel->Number(), m_Channel->Name());
|
||||
}
|
||||
return cString("");
|
||||
}
|
||||
|
||||
void cStreamdevLiveStreamer::StartReceiver(void)
|
||||
{
|
||||
if (m_NumPids > 0) {
|
||||
|
||||
@@ -40,6 +40,7 @@ public:
|
||||
bool SetChannel(const cChannel *Channel, eStreamType StreamType, const int* Apid = NULL, const int* Dpid = NULL);
|
||||
void SetPriority(int Priority);
|
||||
void GetSignal(int *DevNum, int *Strength, int *Quality) const;
|
||||
cString ToText() const;
|
||||
|
||||
virtual int Put(const uchar *Data, int Count);
|
||||
virtual uchar *Get(int &Count);
|
||||
|
||||
68
server/menu.c
Normal file
68
server/menu.c
Normal file
@@ -0,0 +1,68 @@
|
||||
/*
|
||||
* $Id: menu.c,v 1.10 2010/07/19 13:49:31 schmirl Exp $
|
||||
*/
|
||||
|
||||
#include <vdr/menuitems.h>
|
||||
#include <vdr/thread.h>
|
||||
#include <vdr/player.h>
|
||||
|
||||
#include "server/menu.h"
|
||||
#include "server/setup.h"
|
||||
#include "server/server.h"
|
||||
#include "server/suspend.h"
|
||||
|
||||
cStreamdevServerMenu::cStreamdevServerMenu(): cOsdMenu(tr("Streamdev Connections"), 4, 20) {
|
||||
cThreadLock lock;
|
||||
const cList<cServerConnection>& clients = cStreamdevServer::Clients(lock);
|
||||
for (cServerConnection *s = clients.First(); s; s = clients.Next(s))
|
||||
Add(new cOsdItem(s->ToText()));
|
||||
SetHelpKeys();
|
||||
Display();
|
||||
}
|
||||
|
||||
cStreamdevServerMenu::~cStreamdevServerMenu() {
|
||||
}
|
||||
|
||||
void cStreamdevServerMenu::SetHelpKeys() {
|
||||
SetHelp(Count() ? tr("Disconnect") : NULL, NULL, NULL, StreamdevServerSetup.SuspendMode == smOffer ? tr("Suspend") : NULL);
|
||||
}
|
||||
|
||||
eOSState cStreamdevServerMenu::Disconnect() {
|
||||
cOsdItem *item = Get(Current());
|
||||
if (item) {
|
||||
cThreadLock lock;
|
||||
const cList<cServerConnection>& clients = cStreamdevServer::Clients(lock);
|
||||
const char *text = item->Text();
|
||||
for (cServerConnection *s = clients.First(); s; s = clients.Next(s)) {
|
||||
if (!strcmp(text, s->ToText())) {
|
||||
s->Close();
|
||||
Del(Current());
|
||||
SetHelpKeys();
|
||||
Display();
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
return osContinue;
|
||||
}
|
||||
|
||||
eOSState cStreamdevServerMenu::Suspend() {
|
||||
if (StreamdevServerSetup.SuspendMode == smOffer && !cSuspendCtl::IsActive()) {
|
||||
cControl::Launch(new cSuspendCtl);
|
||||
return osBack;
|
||||
}
|
||||
return osContinue;
|
||||
}
|
||||
|
||||
eOSState cStreamdevServerMenu::ProcessKey(eKeys Key) {
|
||||
eOSState state = cOsdMenu::ProcessKey(Key);
|
||||
if (state == osUnknown) {
|
||||
switch (Key) {
|
||||
case kRed: return Disconnect();
|
||||
case kBlue: return Suspend();
|
||||
case kOk: return osBack;
|
||||
default: break;
|
||||
}
|
||||
}
|
||||
return state;
|
||||
}
|
||||
24
server/menu.h
Normal file
24
server/menu.h
Normal file
@@ -0,0 +1,24 @@
|
||||
/*
|
||||
* $Id: menu.h,v 1.4 2010/07/19 13:49:31 schmirl Exp $
|
||||
*/
|
||||
|
||||
#ifndef VDR_STREAMDEV_MENU_H
|
||||
#define VDR_STREAMDEV_MENU_H
|
||||
|
||||
#include <vdr/osdbase.h>
|
||||
#include "connection.h"
|
||||
|
||||
class cStreamdevServerMenu: public cOsdMenu {
|
||||
private:
|
||||
void SetHelpKeys();
|
||||
eOSState Disconnect();
|
||||
eOSState Suspend();
|
||||
protected:
|
||||
virtual eOSState ProcessKey(eKeys Key);
|
||||
|
||||
public:
|
||||
cStreamdevServerMenu();
|
||||
virtual ~cStreamdevServerMenu();
|
||||
};
|
||||
|
||||
#endif // VDR_STREAMDEV_MENU_H
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2010-06-14 13:06+0200\n"
|
||||
"POT-Creation-Date: 2011-11-22 01:05+0100\n"
|
||||
"PO-Revision-Date: 2008-03-30 02:11+0200\n"
|
||||
"Last-Translator: Frank Schmirler <vdrdev@schmirler.de>\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@@ -21,8 +21,14 @@ msgstr "VDR Streaming Server"
|
||||
msgid "Streaming active"
|
||||
msgstr "Streamen im Gange"
|
||||
|
||||
msgid "Suspend Live TV"
|
||||
msgstr "Live-TV pausieren"
|
||||
msgid "Streamdev Connections"
|
||||
msgstr "Streamdev Verbindungen"
|
||||
|
||||
msgid "Disconnect"
|
||||
msgstr "Trennen"
|
||||
|
||||
msgid "Suspend"
|
||||
msgstr "Pausieren"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Pausieren anbieten"
|
||||
@@ -80,4 +86,3 @@ msgstr "Port des Multicast Clients"
|
||||
|
||||
msgid "Multicast Streamtype"
|
||||
msgstr "Multicast Streamtyp"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2010-06-14 13:06+0200\n"
|
||||
"POT-Creation-Date: 2011-11-22 01:05+0100\n"
|
||||
"PO-Revision-Date: 2010-06-19 03:58+0100\n"
|
||||
"Last-Translator: Javier Bradineras <jbradi@hotmail.com>\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@@ -21,8 +21,14 @@ msgstr "Servidor de transmisiones del VDR"
|
||||
msgid "Streaming active"
|
||||
msgstr "Trasmisión activa"
|
||||
|
||||
msgid "Suspend Live TV"
|
||||
msgstr "Suspender TV en vivo"
|
||||
msgid "Streamdev Connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disconnect"
|
||||
msgstr ""
|
||||
|
||||
msgid "Suspend"
|
||||
msgstr "Suspender"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Ofrecer modo de suspensión"
|
||||
@@ -80,5 +86,3 @@ msgstr "Puerto del Cliente Multicast"
|
||||
|
||||
msgid "Multicast Streamtype"
|
||||
msgstr "Tipo de flujo Multicast"
|
||||
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2010-06-14 13:06+0200\n"
|
||||
"POT-Creation-Date: 2011-11-22 01:05+0100\n"
|
||||
"PO-Revision-Date: 2008-03-30 02:11+0200\n"
|
||||
"Last-Translator: Rolf Ahrenberg <rahrenbe@cc.hut.fi>\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@@ -21,8 +21,14 @@ msgstr "VDR-suoratoistopalvelin"
|
||||
msgid "Streaming active"
|
||||
msgstr "Suoratoistopalvelin aktiivinen"
|
||||
|
||||
msgid "Suspend Live TV"
|
||||
msgstr "Pysäytä suora TV-lähetys"
|
||||
msgid "Streamdev Connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disconnect"
|
||||
msgstr ""
|
||||
|
||||
msgid "Suspend"
|
||||
msgstr "Pysäytä"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "tyrkytä"
|
||||
@@ -80,4 +86,3 @@ msgstr "Multicast-portti"
|
||||
|
||||
msgid "Multicast Streamtype"
|
||||
msgstr "Multicast-lähetysmuoto"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2010-06-14 13:06+0200\n"
|
||||
"POT-Creation-Date: 2011-11-22 01:05+0100\n"
|
||||
"PO-Revision-Date: 2008-03-30 02:11+0200\n"
|
||||
"Last-Translator: micky979 <micky979@free.fr>\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@@ -21,8 +21,14 @@ msgstr "Serveur de streaming VDR"
|
||||
msgid "Streaming active"
|
||||
msgstr "Streaming actif"
|
||||
|
||||
msgid "Suspend Live TV"
|
||||
msgstr "Suspendre Live TV"
|
||||
msgid "Streamdev Connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disconnect"
|
||||
msgstr ""
|
||||
|
||||
msgid "Suspend"
|
||||
msgstr "Suspendre"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Offrir le mode suspendre"
|
||||
@@ -80,4 +86,3 @@ msgstr ""
|
||||
|
||||
msgid "Multicast Streamtype"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -9,7 +9,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2010-06-14 13:06+0200\n"
|
||||
"POT-Creation-Date: 2011-11-22 01:05+0100\n"
|
||||
"PO-Revision-Date: 2010-06-19 03:58+0100\n"
|
||||
"Last-Translator: Diego Pierotto <vdr-italian@tiscali.it>\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@@ -23,8 +23,14 @@ msgstr "Server trasmissione VDR"
|
||||
msgid "Streaming active"
|
||||
msgstr "Trasmissione attiva"
|
||||
|
||||
msgid "Suspend Live TV"
|
||||
msgstr "Sospendi TV dal vivo"
|
||||
msgid "Streamdev Connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disconnect"
|
||||
msgstr ""
|
||||
|
||||
msgid "Suspend"
|
||||
msgstr "Sospendi"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Offri mod. sospensione"
|
||||
@@ -82,4 +88,3 @@ msgstr "Porta Client Multicast"
|
||||
|
||||
msgid "Multicast Streamtype"
|
||||
msgstr "Tipo flusso Multicast"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2010-06-14 13:06+0200\n"
|
||||
"POT-Creation-Date: 2011-11-22 01:05+0100\n"
|
||||
"PO-Revision-Date: 2009-11-26 21:57+0200\n"
|
||||
"Last-Translator: Valdemaras Pipiras <varas@ambernet.lt>\n"
|
||||
"Language-Team: Lietuvių\n"
|
||||
@@ -21,8 +21,14 @@ msgstr "VDR transliavimo serveris"
|
||||
msgid "Streaming active"
|
||||
msgstr "Transliavimas vyksta"
|
||||
|
||||
msgid "Suspend Live TV"
|
||||
msgstr "Pristabdyti Live TV"
|
||||
msgid "Streamdev Connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disconnect"
|
||||
msgstr ""
|
||||
|
||||
msgid "Suspend"
|
||||
msgstr "Pristabdyti"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Klausti dėl sustabdymo"
|
||||
@@ -80,4 +86,3 @@ msgstr "Multicast kliento portas"
|
||||
|
||||
msgid "Multicast Streamtype"
|
||||
msgstr "Multicast transliavimo tipas"
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev 0.5.0\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2010-06-14 13:06+0200\n"
|
||||
"POT-Creation-Date: 2011-11-22 01:05+0100\n"
|
||||
"PO-Revision-Date: 2008-06-26 15:36+0100\n"
|
||||
"Last-Translator: Oleg Roitburd <oleg@roitburd.de>\n"
|
||||
"Language-Team: <vdr@linuxtv.org>\n"
|
||||
@@ -21,8 +21,14 @@ msgstr "VDR Streaming
|
||||
msgid "Streaming active"
|
||||
msgstr "ÁâàØÜØÝÓ ÐÚâØÒÕÝ"
|
||||
|
||||
msgid "Suspend Live TV"
|
||||
msgstr "¾áâÐÝÞÒÚÐ Live TV"
|
||||
msgid "Streamdev Connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disconnect"
|
||||
msgstr ""
|
||||
|
||||
msgid "Suspend"
|
||||
msgstr "¾áâÐÝÞÒÚÐ"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "¿àÕÔÛÐÓÐâì ÞáâÐÝÞÒÚã"
|
||||
@@ -80,4 +86,3 @@ msgstr ""
|
||||
|
||||
msgid "Multicast Streamtype"
|
||||
msgstr ""
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: streamdev_SK\n"
|
||||
"Report-Msgid-Bugs-To: <http://www.vdr-developer.org/mantisbt/>\n"
|
||||
"POT-Creation-Date: 2010-06-14 13:06+0200\n"
|
||||
"POT-Creation-Date: 2011-11-22 01:05+0100\n"
|
||||
"PO-Revision-Date: \n"
|
||||
"Last-Translator: Milan Hrala <hrala.milan@gmail.com>\n"
|
||||
"Language-Team: Slovak <hrala.milan@gmail.com>\n"
|
||||
@@ -23,8 +23,14 @@ msgstr "VDR pr
|
||||
msgid "Streaming active"
|
||||
msgstr "streamovanie aktivne"
|
||||
|
||||
msgid "Suspend Live TV"
|
||||
msgstr "Pozastavenie ¾ivého vysielania"
|
||||
msgid "Streamdev Connections"
|
||||
msgstr ""
|
||||
|
||||
msgid "Disconnect"
|
||||
msgstr ""
|
||||
|
||||
msgid "Suspend"
|
||||
msgstr "Pozastavenie"
|
||||
|
||||
msgid "Offer suspend mode"
|
||||
msgstr "Výber re¾ímu pozastavenia"
|
||||
@@ -82,4 +88,3 @@ msgstr "Port klienta Multicast"
|
||||
|
||||
msgid "Multicast Streamtype"
|
||||
msgstr "Multicast typ streamu"
|
||||
|
||||
|
||||
@@ -152,8 +152,7 @@ void cStreamdevServer::Action(void)
|
||||
|
||||
cServerConnection *next = m_Clients.Next(s);
|
||||
if (!result) {
|
||||
isyslog("streamdev: closing streamdev connection to %s:%d",
|
||||
s->RemoteIp().c_str(), s->RemotePort());
|
||||
if (s->IsOpen())
|
||||
s->Close();
|
||||
Lock();
|
||||
m_Clients.Del(s);
|
||||
@@ -178,9 +177,8 @@ void cStreamdevServer::Action(void)
|
||||
}
|
||||
}
|
||||
|
||||
void cStreamdevServer::MainThreadHook(void)
|
||||
const cList<cServerConnection>& cStreamdevServer::Clients(cThreadLock& Lock)
|
||||
{
|
||||
cThreadLock lock(m_Instance);
|
||||
for (cServerConnection *s = m_Clients.First(); s; s = m_Clients.Next(s))
|
||||
s->MainThreadHook();
|
||||
Lock.Lock(m_Instance);
|
||||
return m_Clients;
|
||||
}
|
||||
|
||||
@@ -36,7 +36,8 @@ public:
|
||||
static void Initialize(void);
|
||||
static void Destruct(void);
|
||||
static bool Active(void);
|
||||
static void MainThreadHook(void);
|
||||
|
||||
static const cList<cServerConnection>& Clients(cThreadLock& Lock);
|
||||
};
|
||||
|
||||
inline bool cStreamdevServer::Active(void)
|
||||
|
||||
@@ -9,9 +9,9 @@
|
||||
#include <getopt.h>
|
||||
#include <vdr/tools.h>
|
||||
#include "streamdev-server.h"
|
||||
#include "server/menu.h"
|
||||
#include "server/setup.h"
|
||||
#include "server/server.h"
|
||||
#include "server/suspend.h"
|
||||
|
||||
#if !defined(APIVERSNUM) || APIVERSNUM < 10516
|
||||
#error "VDR-1.5.16 API version or greater is required!"
|
||||
@@ -119,20 +119,20 @@ cString cPluginStreamdevServer::Active(void)
|
||||
|
||||
const char *cPluginStreamdevServer::MainMenuEntry(void)
|
||||
{
|
||||
if (StreamdevServerSetup.SuspendMode == smOffer && !cSuspendCtl::IsActive())
|
||||
return tr("Suspend Live TV");
|
||||
return NULL;
|
||||
return tr("Streamdev Connections");
|
||||
}
|
||||
|
||||
cOsdObject *cPluginStreamdevServer::MainMenuAction(void)
|
||||
{
|
||||
cControl::Launch(new cSuspendCtl);
|
||||
return NULL;
|
||||
return new cStreamdevServerMenu();
|
||||
}
|
||||
|
||||
void cPluginStreamdevServer::MainThreadHook(void)
|
||||
{
|
||||
cStreamdevServer::MainThreadHook();
|
||||
cThreadLock lock;
|
||||
const cList<cServerConnection>& clients = cStreamdevServer::Clients(lock);
|
||||
for (cServerConnection *s = clients.First(); s; s = clients.Next(s))
|
||||
s->MainThreadHook();
|
||||
}
|
||||
|
||||
cMenuSetupPage *cPluginStreamdevServer::SetupMenu(void)
|
||||
|
||||
Reference in New Issue
Block a user