markuseh / vdr-plugin-live Goto Github PK
View Code? Open in Web Editor NEWWe continue here, what started at https://projects.vdr-developer.org/git/vdr-plugin-live.git
License: GNU General Public License v2.0
We continue here, what started at https://projects.vdr-developer.org/git/vdr-plugin-live.git
License: GNU General Public License v2.0
I just tried to build the latest version but the recent release 3.1.11 seems to be missing now.
Have I missed a settings toggle somewhere or is streaming of a stored record not supporting jump back/forward so far?
Can this be related to how the stream is accessed?
vdradmin.m3u8 (using streamserver port directly, jump back/forward working well in vlc):
http://192.168.x.x:3000/20**:216929****.rec
playlist.m3u8 (vlc is not able to jump forward/back)
http://192.168.x.x:8008/recstream.html?recid=recording_********52139A68D
77B23BD********
Thank you for any hints.
Hi,
compiling vdr-live-1.3.7 with vdr-2.4.7 on fedora 35 fails with this error message:
ar: creating libjavascript.a
g++ -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -std=gnu++11 -fPIC -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"live"' -DTNTVERSION=30000 -DCXXTOOLVER=30000 -DDISABLE_TEMPLATES_COLLIDING_WITH_STL -DHAVE_PCRE2 i18n.cpp
g++ -O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -m64 -mtune=generic -fasynchronous-unwind-tables -fstack-clash-protection -fcf-protection -std=gnu++11 -fPIC -c -D_GNU_SOURCE -DPLUGIN_NAME_I18N='"live"' -DTNTVERSION=30000 -DCXXTOOLVER=30000 -DDISABLE_TEMPLATES_COLLIDING_WITH_STL -DHAVE_PCRE2 recman.cpp
recman.cpp: In member function 'vdrlive::RecordingsItemPtr vdrlive::RecordingsItem::addDirIfNotExists(const string&)':
recman.cpp:453:59: error: no matching function for call to 'std::set<std::shared_ptr<vdrlive::RecordingsItem>, vdrlive::cmpRecordingsItemPtr>::find(const string&)'
453 | RecordingDirsMap::iterator iter = m_subdirs.find(dirName);
| ~~~~~~~~~~~~~~^~~~~~~~~
In file included from /usr/include/c++/11/set:61,
from /usr/include/cxxtools/serializationinfo.h:34,
from tools.h:15,
from recman.h:6,
from recman.cpp:2:
/usr/include/c++/11/bits/stl_set.h:794:7: note: candidate: 'std::set<_Key, _Compare, _Alloc>::iterator std::set<_Key, _Compare, _Alloc>::find(const key_type&) [with _Key = std::shared_ptr<vdrlive::RecordingsItem>; _Compare = vdrlive::cmpRecordingsItemPtr; _Alloc = std::allocator<std::shared_ptr<vdrlive::RecordingsItem> >; std::set<_Key, _Compare, _Alloc>::iterator = std::_Rb_tree<std::shared_ptr<vdrlive::RecordingsItem>, std::shared_ptr<vdrlive::RecordingsItem>, std::_Identity<std::shared_ptr<vdrlive::RecordingsItem> >, vdrlive::cmpRecordingsItemPtr, std::allocator<std::shared_ptr<vdrlive::RecordingsItem> > >::const_iterator; std::set<_Key, _Compare, _Alloc>::key_type = std::shared_ptr<vdrlive::RecordingsItem>]'
794 | find(const key_type& __x)
| ^~~~
/usr/include/c++/11/bits/stl_set.h:794:28: note: no known conversion for argument 1 from 'const string' {aka 'const std::__cxx11::basic_string<char>'} to 'const key_type&' {aka 'const std::shared_ptr<vdrlive::RecordingsItem>&'}
794 | find(const key_type& __x)
| ~~~~~~~~~~~~~~~~^~~
The current repository description is
Mirror of https://projects.vdr-developer.org/git/vdr-plugin-live.git and a Collection of Patches from https://www.vdr-portal.de/
which is misleading, because https://projects.vdr-developer.org does not exist any more.
Please edit to something meaningful.
Would it be possible to add an input field somewhere in live for executing SVDRP commands (such as hitk Power or mesg "hello")?
vdradmin has this functionality and it is really usefull if you don't have access to a shell console but can access the live web page.
Can you add support for tvscraper (https://github.com/vdr-projects/vdr-plugin-tvscraper) to provide artwork for EPG and recordings?
I opend this issue only for documentation.
Details of the impact of copy timers: https://www.vdr-portal.de/forum/index.php?thread/134646-svdrpsend-clre-doesn-t-clear-epg-completely-if-there-s-active-timers/&postID=1342938#post1342938
I will try to fix that. But I can already see this will need same redesign of timer handling.
Hello,
I get an syntax error if I try to build the latest version of vdr-plugin-live on Ubuntu 20.04 with GNU Make 4.2.1:
$ git clone https://github.com/MarkusEh/vdr-plugin-live
Klone nach 'vdr-plugin-live' …
remote: Enumerating objects: 9096, done.
remote: Counting objects: 100% (1389/1389), done.
remote: Compressing objects: 100% (364/364), done.
remote: Total 9096 (delta 1021), reused 1348 (delta 1016), pack-reused 7707
Empfange Objekte: 100% (9096/9096), 5.89 MiB | 2.97 MiB/s, fertig.
Löse Unterschiede auf: 100% (6735/6735), fertig.
$ cd vdr-plugin-live
$ make
Makefile:11: *** Nicht beendeter Aufruf der Funktion „shell“: „)“ fehlt. Schluss.
According to https://stackoverflow.com/a/53837400 the hashtag needs to be escaped (which works with Make 4.2.1), but this doesn't work with GNU Make 4.3 because the escaped hashtag is forwarded to awk:
$ make
awk: cmd. line:1: warning: regexp escape sequence `\#' is not a known regexp operator
When a validation error occurs while crating a new timer all input fields are cleared to their default value.
If the title field is empty (likely for channels w/o EPG) and save is pressed an error occurs (correctly), but at the same time all (other?) input fields are reset to their default value when creating a new timer. The latter is unexpected and error prone. The user might not notice the change and create a timer that records some arbitrary channel immediately.
A similar issue applies to existing timers. When editing causes a validation error (less likely, of course), all possibly changed fields are reset to the last saved value.
I will try to provide a fix in the next week.
It would nice to have the option to get the Timeline horizontially as in VDRAdmin
The whole "channels.conf" concept was and is something I never liked about VDR.
What VDR really is missing is some kind of user friendly way to edit the channel list. And I would prefer being able to do it in a web browser. So at least for me it seems like integrating one inside the live plugin would be a perfect fit.
Hi,
vdr-plugin-live stop building and due to make getting stuck in loop
and complaining with:
`server1:/usr/local/src/vdr/PLUGINS/src/live # make -d
GNU Make 4.4
Built for x86_64-suse-linux-gnu
Copyright (C) 1988-2022 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later https://gnu.org/licenses/gpl.html
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Reading makefiles...
Reading makefile 'Makefile'...
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Reading makefile 'global.mk' (search path) (no ~ expansion)...
Makefile:27: not recursively expanding CFLAGS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:28: not recursively expanding CXXFLAGS to export to shell function
Makefile:27: not recursively expanding CFLAGS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:27: not recursively expanding CFLAGS to export to shell function
Makefile:44: not recursively expanding CXXFLAGS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:44: not recursively expanding CXXFLAGS to export to shell function
Makefile:27: not recursively expanding CFLAGS to export to shell function
Makefile:44: not recursively expanding CXXFLAGS to export to shell function
Makefile:44: not recursively expanding CXXFLAGS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:66: not recursively expanding CXXFLAGS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:66: not recursively expanding CXXFLAGS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:66: not recursively expanding CXXFLAGS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:66: not recursively expanding CXXFLAGS to export to shell function
Reading makefile '.dependencies' (search path) (don't care) (no ~ expansion)...
Updating makefiles....
Considering target file 'Makefile'.
Looking for an implicit rule for 'Makefile'.
Trying pattern rule '%: %.o' with stem 'Makefile'.
Directory . cache invalidated (count 1 != command 19)
Trying implicit prerequisite 'Makefile.o'.
Not found 'Makefile.o'.
Trying pattern rule '%: %.c' with stem 'Makefile'.
Trying implicit prerequisite 'Makefile.c'.
...
No need to remake target 'global.mk'.
Considering target file '.dependencies'.
Pruning file 'Makefile'.
Finished prerequisites of target file '.dependencies'.
Prerequisite 'Makefile' is newer than target '.dependencies'.
Must remake target '.dependencies'.
Makefile:14: not recursively expanding HAVE_PCRE2 to export to shell function
Makefile:14: not recursively expanding HAVE_PCRE2 to export to shell function
Makefile:62: not recursively expanding LIBS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:14: not recursively expanding HAVE_PCRE2 to export to shell function
Makefile:62: not recursively expanding LIBS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:54: not recursively expanding CXXTOOLVER to export to shell function
Makefile:14: not recursively expanding HAVE_PCRE2 to export to shell function
Makefile:62: not recursively expanding LIBS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:54: not recursively expanding CXXTOOLVER to export to shell function
Makefile:86: not recursively expanding DEFINES to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:43: not recursively expanding TNTVERSION to export to shell function
Makefile:66: not recursively expanding CXXFLAGS to export to shell function
Makefile:54: not recursively expanding CXXTOOLVER to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Directory pages cache invalidated (count 19 != command 20)
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:14: not recursively expanding HAVE_PCRE2 to export to shell function
Makefile:62: not recursively expanding LIBS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:54: not recursively expanding CXXTOOLVER to export to shell function
Makefile:43: not recursively expanding TNTVERSION to export to shell function
Makefile:54: not recursively expanding CXXTOOLVER to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:43: not recursively expanding TNTVERSION to export to shell function
Makefile:66: not recursively expanding CXXFLAGS to export to shell function
Makefile:66: not recursively expanding CXXFLAGS to export to shell function
Makefile:14: not recursively expanding HAVE_PCRE2 to export to shell function
Makefile:62: not recursively expanding LIBS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
Makefile:14: not recursively expanding HAVE_PCRE2 to export to shell function
Makefile:62: not recursively expanding LIBS to export to shell function
Makefile:18: not recursively expanding PKGCFG to export to shell function
...`
Hints:
https://lists.gnu.org/archive/html/info-gnu/2022-10/msg00008.html
https://lists.opensuse.org/archives/list/[email protected]/thread/FPNDORIL6NDJD3HFQ76LQBIRBCWVG6TV/
In most views (like whats_on) the main elements and tables contain both start and end times, but the tooltip (reached by clicking the more link on whats_on or the title on most others) only shows the start time. In the timers view this can be more than a bit annoying if you want to know the time frame the program is supposed to run vs. the time frame currently set for recording.
I have the following PoC diff implementing this for me, but that doesn't handle date switches (neither does whats_on; perhaps that is a feature), whats_on has similar code, doesn't handle empty times (can they be?), it doesn't rename the variable, manual std::string building, … the list of imperfections goes on, hence not a PR.
diff --git a/pages/epginfo.ecpp b/pages/epginfo.ecpp
index 6c5c505..8bcd4c4 100644
--- a/pages/epginfo.ecpp
+++ b/pages/epginfo.ecpp
@@ -133,7 +133,8 @@ using namespace vdrlive;
if (epgEvent) {
std::string start(epgEvent->StartTime("%a,") + std::string(" ")
+ epgEvent->StartTime(tr("%b %d %y")) + std::string(" ")
- + epgEvent->StartTime(tr("%I:%M %p")));
+ + epgEvent->StartTime(tr("%I:%M %p")) + std::string(" - ")
+ + epgEvent->EndTime(tr("%I:%M %p")));
std::string tools_component;
if (recordings) {
tools_component = epgEvent->Archived().empty() ? "recordings.rec_tools" : "recordings.archived_disc" ;
"Live" has several buttons which only make sense if you are remote controlling a VDR system which also has some kind of output plugin installed. This includes stuff like playback of a recording in the recording list or tuning to a channel.
I think it would be useful to allow disabling/hiding all this either by a setup parameter or probably even (if possible) by auto detecting that the VDR system does not have any output available.
In file included from tools.h:24,
from live.cpp:10:
stringhelpers.h: In member function ‘cToSv::operator std::string_view() const’:
stringhelpers.h:640:54: error: call of overloaded ‘cSv(const cToSv&)’ is ambiguous
operator std::string_view() const { return (cSv)*this; }
The problem is caused by the redundant conversion operator in the last line:
class cToSv {
public:
cToSv() {}
// not intended for copy
// you can copy the cSv of this class (from operator cSv() )
cToSv(const cToSv&) = delete;
cToSv &operator= (const cToSv &) = delete;
virtual ~cToSv() {}
virtual operator cSv() const = 0;
operator std::string_view() const { return (cSv)*this; } // <--- HERE
};
cSv is std::string_view, so the second conversion operator is superfluous.
Removing the last operator fixes the issue.
With this commit b0459ff the EPG subwindow position is broken.
Opening EPG Info at the top of the channel or timer list works, With each line down of the list, the EPG windows opens more on the buttom of the screen or do no longer open.
The plugin crashes VDR if the locale VDR is started with is not installed on the Linux system.
Reproduce:
en_US.utf8
selectedLANG=de_DE.UTF-8
VDR_LANG=de_DE.UTF-8
LC_ALL=de_DE.UTF-8
[40535] loading plugin: /usr/local/lib/vdr/libvdr-live.so.2.6.3
terminate called after throwing an instance of 'std::runtime_error'
what(): locale::facet::_S_create_c_locale name not valid
The crash does not occur any more if de_DE.utf8
is installed via dpkg-reconfigure locales
.
Would be great if the plugin would fallback to English if the locale is not installed.
I have a minor issue of the recording details info box for very long recording names.
You can reproduce it if you name a recording "Rückkehr in die Antarktis Doku-Reihe, USA 2019 Altersfreigabe: ab 12 (WH vom Dienstag, 15.06.2021, 20:15 Uhr)" and click on the recording for details. The info box opens with a two lines header and no "x" to close the window. Please excuse: html is not my core competence, so only a issue and no PR.
With tntnet-3 the plugin fails to show records.
console message:
"WARN tntnet.worker - http-Error: 500 character conversion failed"
Solution, add in pages/recordings.ecpp:308
#if TNTVERSION >= 30000
++ shortDescr = CorrectNonUTF8(&shortDescr); // cleanup invalid UTF-8 characters
description = CorrectNonUTF8(&description); // cleanup invalid UTF-8 characters
// Tntnet30 throw: tntnet.worker - http-Error: 500 character conversion failed
#endif
Hi,
when compiling vdr-plugin-live-3.0.4 on Fedora 33 with the new version of tntnet-3.0.0 and cxxtools-3.0.0
i get the following error messages:
recordings.ecpp: In member function 'virtual unsigned int {anonymous}::_component_::operator()(tnt::HttpRequest&, tnt::HttpReply&, tnt::QueryParams&)':
recordings.ecpp:76:6: error: 'deletions_type' has not been declared
76 | for (deletions_type::const_iterator it = deletions.begin(); it != deletions.end(); ++it) {
| ^~~~~~~~~~~~~~
recordings.ecpp:76:61: error: 'it' was not declared in this scope; did you mean 'int'?
76 | for (deletions_type::const_iterator it = deletions.begin(); it != deletions.end(); ++it) {
| ^~
| int
recordings.ecpp: In member function 'virtual unsigned int {anonymous}::_component_::recordings_item_type::operator()(tnt::HttpRequest&, tnt::HttpReply&, tnt::QueryParams&)':
recordings.ecpp:250:8: error: 'path_type' has not been declared
250 | for (path_type::const_iterator i = path.begin(); i != path.end(); ++i) {
| ^~~~~~~~~
recordings.ecpp:250:52: error: 'i' was not declared in this scope
250 | for (path_type::const_iterator i = path.begin(); i != path.end(); ++i) {
| ^
make[1]: *** [Makefile:34: recordings.o] Error 1
make: *** [Makefile:191: pages] Error 2
so that vdr-live recognizes the new version tntnet-3, i use the attached patch.
vdr-live-tntnet3-Makefile.patch.txt
cxxtools-3.0-1.fc33.src.rpm
tntnet-3.0-1.fc33.src.rpm
I asked about this bug on the Fedora development mailing list and received the following response:
firstly "ecppc" program (in tntnet) converts *.ecpp file to
*.cpp file, then converted .cpp file is compiled by g++. recordings.cpp
generated with ecppc (in tntnet 2.2.1) actually contains the definition fortype "deletions_type" .
I guess in *.ecpp file, "deletions_type" means the type of "deletions" variable,
so "ecppc" 2.2.1 defines "deletions_type" as such in generated cxx source.So I guess ecppc in tntnet 3 is somehow broken. I guess you can check the actually generated
"recordings.cpp" file. (Note that generated "recordings.cpp" contains something like...
#line 1 "recordings.ecpp"so while g++ actually compiles recordings.cpp, the error messages looks like errors
happened on the original .ecpp file.)
[root@fc33 built_with_tntnet2]# grep deletions_type *
recordings.cpp:typedef std::vector<string> deletions_type; recordings.cpp:deletions_type deletions; recordings.cpp:for (deletions_type::const_iterator it = deletions.begin(); it != deletions.end(); ++it) { recordings.ecpp:for (deletions_type::const_iterator it = deletions.begin(); it != deletions.end(); ++it) {
[root@fc33 built_with_tntnet3]# grep deletions_type *
recordings.cpp:for (deletions_type::const_iterator it = deletions.begin(); it != deletions.end(); ++it) { recordings.ecpp:for (deletions_type::const_iterator it = deletions.begin(); it != deletions.end(); ++it) {
it would be nice if vdr-live could also compile with the new versions of cxxtools / tntnet-3.
Hello,
I get an compiler error with vdr-2.,4.7:
*** Plugin live:
ECPP pages/ menu.cpp
ecppc: symbol lookup error: ecppc: undefined symbol: _ZNSt8numpunctIN8cxxtools4CharEE2idE
make[2]: *** Keine Regel vorhanden, um das Ziel „menu.cpp“,
benötigt von „menu.o“, zu erstellen. Schluss.
make[1]: *** [Makefile:203: pages] Fehler 2
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.