From 2cdf160648b9666bb870e5b3157619920476d76d Mon Sep 17 00:00:00 2001 From: Frank Schmirler Date: Sun, 18 May 2014 15:24:24 +0200 Subject: [PATCH] Configurable buffer for live TV --- HISTORY | 2 ++ README | 4 ++++ server/livestreamer.c | 16 ++++++++++++++++ server/livestreamer.h | 1 + server/po/de_DE.po | 6 ++++-- server/po/es_ES.po | 16 +++++++++++----- server/po/fi_FI.po | 11 +++++++---- server/po/fr_FR.po | 16 +++++++++++----- server/po/it_IT.po | 18 ++++++++++++------ server/po/lt_LT.po | 16 +++++++++++----- server/po/ru_RU.po | 16 +++++++++++----- server/po/sk_SK.po | 6 ++++-- server/setup.c | 4 ++++ server/setup.h | 1 + server/streamer.c | 1 - 15 files changed, 99 insertions(+), 35 deletions(-) diff --git a/HISTORY b/HISTORY index 028e1a7..0f48ff1 100644 --- a/HISTORY +++ b/HISTORY @@ -1,6 +1,8 @@ VDR Plugin 'streamdev' Revision History --------------------------------------- +- New option for server side live TV buffer to prevent buffer underruns + 2013-11-28: Version 0.6.1 - Updated Slovak translation (thanks to Milan Hrala) diff --git a/README b/README index 9d6a775..250f027 100644 --- a/README +++ b/README @@ -228,6 +228,10 @@ 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. +If your client suffers from buffer underruns while watching live TV, you can +configure buffering on the server side. Enter a reasonable value (e.g. 300ms) +as "Live TV buffer delay (ms)" in the server setup. + 3.1 Usage HTTP server: ---------------------- diff --git a/server/livestreamer.c b/server/livestreamer.c index 07f7273..c06710a 100644 --- a/server/livestreamer.c +++ b/server/livestreamer.c @@ -11,6 +11,7 @@ #include #include "server/livestreamer.h" +#include "server/setup.h" #include "common.h" using namespace Streamdev; @@ -534,6 +535,21 @@ void cStreamdevLiveStreamer::Receive(uchar *Data, int Length) m_ReceiveBuffer->ReportOverflow(Length - p); } +void cStreamdevLiveStreamer::Action(void) +{ + if (StreamdevServerSetup.LiveBufferMs) { + // wait for first data block + int count = 0; + while (Running()) { + if (m_ReceiveBuffer->Get(count) != NULL) { + cCondWait::SleepMs(StreamdevServerSetup.LiveBufferMs); + break; + } + } + } + cStreamdevStreamer::Action(); +} + int cStreamdevLiveStreamer::Put(const uchar *Data, int Count) { // insert si data diff --git a/server/livestreamer.h b/server/livestreamer.h index db546ec..b83bb99 100644 --- a/server/livestreamer.h +++ b/server/livestreamer.h @@ -38,6 +38,7 @@ protected: virtual void DelFromReceiver(int Count) { m_ReceiveBuffer->Del(Count); } virtual int Put(const uchar *Data, int Count); + virtual void Action(void); public: cStreamdevLiveStreamer(int Priority, const cServerConnection *Connection); diff --git a/server/po/de_DE.po b/server/po/de_DE.po index 0c9387c..770886a 100644 --- a/server/po/de_DE.po +++ b/server/po/de_DE.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: streamdev\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-02 16:55+0100\n" +"POT-Creation-Date: 2014-05-05 22:46+0200\n" "PO-Revision-Date: 2008-03-30 02:11+0200\n" "Last-Translator: Frank Schmirler \n" "Language-Team: German \n" @@ -40,6 +40,9 @@ msgstr "Live-TV beim Start pausieren" msgid "Maximum Number of Clients" msgstr "Maximalanzahl an Clients" +msgid "Live TV buffer delay (ms)" +msgstr "Live-TV Pufferdauer (ms)" + msgid "VDR-to-VDR Server" msgstr "VDR-zu-VDR Server" @@ -90,4 +93,3 @@ msgstr "Multicast Streamtyp" msgid "VDR Streaming Server" msgstr "VDR Streaming Server" - diff --git a/server/po/es_ES.po b/server/po/es_ES.po index 28842c6..fe84242 100644 --- a/server/po/es_ES.po +++ b/server/po/es_ES.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: streamdev 0.5.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-31 15:06+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-05-05 22:46+0200\n" "PO-Revision-Date: 2010-06-19 03:58+0100\n" "Last-Translator: Javier Bradineras \n" "Language-Team: Spanish \n" @@ -16,9 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -msgid "VDR Streaming Server" -msgstr "Servidor de transmisiones del VDR" - msgid "Streaming active" msgstr "Trasmisin activa" @@ -37,9 +34,15 @@ msgstr "Configuraci msgid "Hide Mainmenu Entry" msgstr "" +msgid "Start with Live TV suspended" +msgstr "" + msgid "Maximum Number of Clients" msgstr "Numero mximo de clientes" +msgid "Live TV buffer delay (ms)" +msgstr "" + msgid "VDR-to-VDR Server" msgstr "Servidor VDR-a-VDR" @@ -87,3 +90,6 @@ msgstr "Puerto del Cliente Multicast" msgid "Multicast Streamtype" msgstr "Tipo de flujo Multicast" + +msgid "VDR Streaming Server" +msgstr "Servidor de transmisiones del VDR" diff --git a/server/po/fi_FI.po b/server/po/fi_FI.po index 697f8a0..0607967 100644 --- a/server/po/fi_FI.po +++ b/server/po/fi_FI.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: streamdev 0.5.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-31 15:06+0200\n" +"POT-Creation-Date: 2014-05-05 22:46+0200\n" "PO-Revision-Date: 2008-03-30 02:11+0200\n" "Last-Translator: Rolf Ahrenberg\n" "Language-Team: Finnish \n" @@ -16,9 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "VDR Streaming Server" -msgstr "VDR-suoratoistopalvelin" - msgid "Streaming active" msgstr "Suoratoistopalvelin aktiivinen" @@ -43,6 +40,9 @@ msgstr "Käynnistä Live-katselu pysäytettynä" msgid "Maximum Number of Clients" msgstr "Suurin sallittu asiakkaiden määrä" +msgid "Live TV buffer delay (ms)" +msgstr "" + msgid "VDR-to-VDR Server" msgstr "VDR-palvelin" @@ -90,3 +90,6 @@ msgstr "Multicast-portti" msgid "Multicast Streamtype" msgstr "Multicast-lähetysmuoto" + +msgid "VDR Streaming Server" +msgstr "VDR-suoratoistopalvelin" diff --git a/server/po/fr_FR.po b/server/po/fr_FR.po index 7d9128b..20e58bd 100644 --- a/server/po/fr_FR.po +++ b/server/po/fr_FR.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: streamdev 0.5.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-31 15:06+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-05-05 22:46+0200\n" "PO-Revision-Date: 2008-03-30 02:11+0200\n" "Last-Translator: micky979 \n" "Language-Team: French \n" @@ -16,9 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-15\n" "Content-Transfer-Encoding: 8bit\n" -msgid "VDR Streaming Server" -msgstr "Serveur de streaming VDR" - msgid "Streaming active" msgstr "Streaming actif" @@ -37,9 +34,15 @@ msgstr "Param msgid "Hide Mainmenu Entry" msgstr "" +msgid "Start with Live TV suspended" +msgstr "" + msgid "Maximum Number of Clients" msgstr "Nombre maximun de clients" +msgid "Live TV buffer delay (ms)" +msgstr "" + msgid "VDR-to-VDR Server" msgstr "VDR-to-VDR Serveur" @@ -87,3 +90,6 @@ msgstr "" msgid "Multicast Streamtype" msgstr "" + +msgid "VDR Streaming Server" +msgstr "Serveur de streaming VDR" diff --git a/server/po/it_IT.po b/server/po/it_IT.po index dc68082..b6447a1 100644 --- a/server/po/it_IT.po +++ b/server/po/it_IT.po @@ -8,18 +8,15 @@ msgid "" msgstr "" "Project-Id-Version: streamdev 0.5.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-06-13 08:51+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-05-05 22:46+0200\n" "PO-Revision-Date: 2012-06-12 19:57+0100\n" "Last-Translator: Diego Pierotto \n" "Language-Team: Italian \n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" -"Language: it\n" - -msgid "VDR Streaming Server" -msgstr "Server trasmissione VDR" msgid "Streaming active" msgstr "Trasmissione attiva" @@ -39,9 +36,15 @@ msgstr "Impostazioni comuni" msgid "Hide Mainmenu Entry" msgstr "Nascondi voce menu principale" +msgid "Start with Live TV suspended" +msgstr "" + msgid "Maximum Number of Clients" msgstr "Numero massimo di Client" +msgid "Live TV buffer delay (ms)" +msgstr "" + msgid "VDR-to-VDR Server" msgstr "Server VDR-a-VDR" @@ -89,3 +92,6 @@ msgstr "Porta Client Multicast" msgid "Multicast Streamtype" msgstr "Tipo flusso Multicast" + +msgid "VDR Streaming Server" +msgstr "Server trasmissione VDR" diff --git a/server/po/lt_LT.po b/server/po/lt_LT.po index 1af7c75..7ff021e 100644 --- a/server/po/lt_LT.po +++ b/server/po/lt_LT.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: streamdev 0.5.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-31 15:06+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-05-05 22:46+0200\n" "PO-Revision-Date: 2009-11-26 21:57+0200\n" "Last-Translator: Valdemaras Pipiras \n" "Language-Team: Lithuanian \n" @@ -16,9 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -msgid "VDR Streaming Server" -msgstr "VDR transliavimo serveris" - msgid "Streaming active" msgstr "Transliavimas vyksta" @@ -37,9 +34,15 @@ msgstr "Bendri nustatymai" msgid "Hide Mainmenu Entry" msgstr "" +msgid "Start with Live TV suspended" +msgstr "" + msgid "Maximum Number of Clients" msgstr "Maksimalus klientų skaičius" +msgid "Live TV buffer delay (ms)" +msgstr "" + msgid "VDR-to-VDR Server" msgstr "VDR-su-VDR Serveris" @@ -87,3 +90,6 @@ msgstr "Multicast kliento portas" msgid "Multicast Streamtype" msgstr "Multicast transliavimo tipas" + +msgid "VDR Streaming Server" +msgstr "VDR transliavimo serveris" diff --git a/server/po/ru_RU.po b/server/po/ru_RU.po index 3fdf5c7..a1e710c 100644 --- a/server/po/ru_RU.po +++ b/server/po/ru_RU.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: streamdev 0.5.0\n" -"Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2012-03-31 15:06+0200\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-05-05 22:46+0200\n" "PO-Revision-Date: 2008-06-26 15:36+0100\n" "Last-Translator: Oleg Roitburd \n" "Language-Team: Russian \n" @@ -16,9 +16,6 @@ msgstr "" "Content-Type: text/plain; charset=ISO-8859-5\n" "Content-Transfer-Encoding: 8bit\n" -msgid "VDR Streaming Server" -msgstr "VDR Streaming " - msgid "Streaming active" msgstr " " @@ -37,9 +34,15 @@ msgstr " msgid "Hide Mainmenu Entry" msgstr "" +msgid "Start with Live TV suspended" +msgstr "" + msgid "Maximum Number of Clients" msgstr ". " +msgid "Live TV buffer delay (ms)" +msgstr "" + msgid "VDR-to-VDR Server" msgstr "VDR-to-VDR " @@ -87,3 +90,6 @@ msgstr "" msgid "Multicast Streamtype" msgstr "" + +msgid "VDR Streaming Server" +msgstr "VDR Streaming " diff --git a/server/po/sk_SK.po b/server/po/sk_SK.po index 7fb8ba8..24a7cf1 100755 --- a/server/po/sk_SK.po +++ b/server/po/sk_SK.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: streamdev_SK\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2013-11-22 23:07+0100\n" +"POT-Creation-Date: 2014-05-05 22:46+0200\n" "PO-Revision-Date: 2013-11-22 23:39+0100\n" "Last-Translator: Milan Hrala \n" "Language-Team: Slovak \n" @@ -42,6 +42,9 @@ msgstr "Pozastavi msgid "Maximum Number of Clients" msgstr "Maximly poet klientov" +msgid "Live TV buffer delay (ms)" +msgstr "" + msgid "VDR-to-VDR Server" msgstr "Prenos z VDR do VDR" @@ -92,4 +95,3 @@ msgstr "Typ Multicast streamu" msgid "VDR Streaming Server" msgstr "VDR server streamovania" - diff --git a/server/setup.c b/server/setup.c index b3d23d4..37d1b45 100644 --- a/server/setup.c +++ b/server/setup.c @@ -13,6 +13,7 @@ cStreamdevServerSetup::cStreamdevServerSetup(void) { HideMenuEntry = false; MaxClients = 5; StartSuspended = ssAuto; + LiveBufferMs = 0; StartVTPServer = true; VTPServerPort = 2004; VTPPriority = 0; @@ -35,6 +36,7 @@ bool cStreamdevServerSetup::SetupParse(const char *Name, const char *Value) { if (strcmp(Name, "HideMenuEntry") == 0) HideMenuEntry = atoi(Value); else if (strcmp(Name, "MaxClients") == 0) MaxClients = atoi(Value); else if (strcmp(Name, "StartSuspended") == 0) StartSuspended = atoi(Value); + else if (strcmp(Name, "LiveBufferMs") == 0) LiveBufferMs = atoi(Value); else if (strcmp(Name, "StartServer") == 0) StartVTPServer = atoi(Value); else if (strcmp(Name, "ServerPort") == 0) VTPServerPort = atoi(Value); else if (strcmp(Name, "VTPPriority") == 0) VTPPriority = atoi(Value); @@ -86,6 +88,7 @@ void cStreamdevServerMenuSetupPage::Set(void) { Add(new cMenuEditBoolItem(tr("Hide Mainmenu Entry"), &m_NewSetup.HideMenuEntry)); Add(new cMenuEditStraItem(tr("Start with Live TV suspended"), &m_NewSetup.StartSuspended, ss_Count, StartSuspendedItems)); Add(new cMenuEditIntItem (tr("Maximum Number of Clients"), &m_NewSetup.MaxClients, 0, 100)); + Add(new cMenuEditIntItem (tr("Live TV buffer delay (ms)"), &m_NewSetup.LiveBufferMs, 0, 1500)); AddCategory (tr("VDR-to-VDR Server")); @@ -142,6 +145,7 @@ void cStreamdevServerMenuSetupPage::Store(void) { SetupStore("HideMenuEntry", m_NewSetup.HideMenuEntry); SetupStore("MaxClients", m_NewSetup.MaxClients); SetupStore("StartSuspended", m_NewSetup.StartSuspended); + SetupStore("LiveBufferMs", m_NewSetup.LiveBufferMs); SetupStore("StartServer", m_NewSetup.StartVTPServer); SetupStore("ServerPort", m_NewSetup.VTPServerPort); SetupStore("VTPBindIP", m_NewSetup.VTPBindIP); diff --git a/server/setup.h b/server/setup.h index 8358a4f..f464137 100644 --- a/server/setup.h +++ b/server/setup.h @@ -22,6 +22,7 @@ struct cStreamdevServerSetup { int HideMenuEntry; int MaxClients; int StartSuspended; + int LiveBufferMs; int StartVTPServer; int VTPServerPort; char VTPBindIP[20]; diff --git a/server/streamer.c b/server/streamer.c index ad4dcc5..16411ed 100644 --- a/server/streamer.c +++ b/server/streamer.c @@ -9,7 +9,6 @@ #include "server/streamer.h" #include "server/suspend.h" -#include "server/setup.h" #include "tools/socket.h" #include "tools/select.h" #include "common.h"