Code Monkey home page Code Monkey logo

sagiadinos / garlic-player Goto Github PK

View Code? Open in Web Editor NEW
75.0 10.0 12.0 131.64 MB

Digital Signage Player based on SMIL

Home Page: https://garlic-player.com

License: GNU Affero General Public License v3.0

QMake 0.13% C++ 4.00% Shell 0.29% PHP 0.01% C 77.85% Batchfile 0.02% JavaScript 0.27% QML 0.01% Roff 0.01% Java 0.11% CMake 0.01% HTML 4.20% CSS 0.09% Objective-C++ 0.01% Perl 12.46% DIGITAL Command Language 0.01% Assembly 0.44% M4 0.11% eC 0.01% Makefile 0.01%
digital-signage digital-signage-player public-display dooh narrowcasting touchscreens smil-player advertising raspberrypi iot

garlic-player's People

Contributors

sagiadinos avatar skinkie avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

garlic-player's Issues

refreshing smil after startime does not trigger playback

Given a seq that looks like this:

<seq repeatCount="indefinite" begin="wallclock(R/2022-03-29T17:16:00/P1D)" end="wallclock(R/2022-03-29T18:00:00/P1D)">

if refreshing index.smil after 17:16:00 (but before 18:00:00) it does not start to play/loop (as the trigger time has passed, I guess?)

Expected behavior is that it starts to play/loop right away as it's within the begin to end period.

Storage permission issues on Android v11+ . " Creating or writing to a non-default top level directory is not allowed!"

" Creating or writing to a non-default top level directory is not allowed!".
Error when running the application on Android 11+ while creating folder for cache & logs when using "QStandardPaths::GenericDataLocation". When changed to "QStandardPaths::AppLocalDataLocation" it seems to work properly, but then the folder location is not accessible.

The stable apk which we can download, somehow works properly. But when creating a new build using QT 5.15.2 it is not working without the above said change.

Smartphone (please complete the following information):

  • Device: [e.g. Samsung A22]
  • OS: [e.g. Android 12]

Additional context
The stable apk works properly on versions 9, 10, 11 & 12. App folder is getting created in Android/Data directory.

Raspberry Pi version planned ?

Iยดam very happy with garlic-player. Are you planned a Raspberry Pi version?

Many libraries here in Mexico have no money to buy a digital signage solution and expensive equipment to implement this kind of technology.

Gracias !!

html or url sintax

Please, help me, how can load a local html page or external html URL. What is the correct sintax if using regions like the sample in my other post?

<layout>
  <root-layout width="1024" height="768" />
  <region regionName="video" top="0" left="0" width="720" height="480"/>
  <region regionName="slideshow" top="481" left="0" width="560" height="400"  />
  <region regionName="overlay" top="50" left="50" width="100" height="110" />
  <region regionName="r" top="481" left="561" width="500" height="300" /> (**HERE**)
</layout>
<par>
  <video src="1.mp4" dur="indefinite" region="video" fit="fill" />
  <img src="lobos.jpg" dur="indefinite"  region="slideshow" fit="fill" />
  <img src="logo.jpg"  dur="indefinite" region="overlay"  />
  <ref src="http://www.biblioteca.iberotijuana.edu.mx/movil/index.html" type="text/html" dur="indefinite" region="r" fit="fill"/> (**HERE**)
  
</par>

Error while building

Attempted to build on Chromebook without success.

Project ERROR: Unknown module(s) in QT: xmlpatterns
make: *** [Makefile:136: sub-garlic-lib-make_first-ordered] Error 3

Could not install
sudo apt install qt5-default
...
E: Package 'qt5-default' has no installation candidate

Installed instead but not sure it is good enough
sudo apt install qtbase5-dev qtchooser qt5-qmake qtbase5-dev-tools

Any idea?

Event triggers (possible feature request)

Iadea SMIL supports network triggers. We can create a SMIL file and then start one or anther seq via http-requests.

what is usually needed:

  • start a video over net
  • stop video
  • pause/resume
  • control volume of playback

Would it be possible to do or to add something like this to garlic-player?

Error when playing videos: has an unknown content-type or file type: binary/octet-stream extension: mp4

Hi -- I'm seeing these errors when trying to play videos from AWS S3, why would that be? (s3 address below has been redacted):

has an unknown content-type or file type: binary/octet-stream extension: mp4

Example of an error:

<event><eventType>error</eventType><eventTime>2021-12-23T08:59:17-05:00</eventTime><eventSource>ContentManager</eventSource><eventName>FETCH_FAILED</eventName><metadata><meta name="resourceURI" content="https://xxxx.s3.amazonaws.com/xxxx/sample_1920x1080.mp4"/><meta name="errorMessage" content="has an unknown content-type or file type: binary/octet-stream extension: mp4"/><meta name="lastCachedLength" content="0"/><meta name="lastCachedModifiedTime" content=""/></metadata></event>

Using this smil with prefetch from examples (URLs redacted). (btw, also wondering if there's a way to put an image or text on the screen if there was an error like above)

<?xml version="1.0" encoding="UTF-8"?>
<smil>
    <head>
        <meta http-equiv="Refresh" content="30"/>
        <layout>
            <root-layout width="3840" height="2160"/>
            <region xml:id="fullScreen" width="3840px" height="2160px" left="0px" top="0px" z-index="0" backgroundColor="#000" />
        </layout>
    </head>
    <body systemComponent="http://www.w3.org/1999/xhtml">
        <par>
            <seq end="__prefetchEnd.endEvent">
              <seq repeatCount="indefinite">
                <!-- Play waiting prompt or media files that are already in the cache -->
                <img src="https://xxxx.s3.amazonaws.com/xxxx/splash.jpg" />
              </seq>
            </seq>

            <seq>
              <!-- Load files while first loop plays -->
              <prefetch src="https://xxxx.s3.amazonaws.com/xxxx/sample_1920x1080.mp4" type="video/mp4" />

              <!-- Special item that sends out the __prefetchEnd.endEvent event when it ends -->
              <seq id="__prefetchEnd" dur="1s"/>
            </seq>

            <seq begin="__prefetchEnd.endEvent" repeatCount="indefinite">
              <!-- Play loaded files -->
              <video src="https://xxxx.s3.amazonaws.com/xxxx/sample_1920x1080.mp4" type="video/mp4" />
            </seq>
      </par>
    </body>
</smil>

Retry to reconnect when there's no connection at first

Is there a away to keep retrying to connect every 5 seconds when there's no internet? Unless I'm not right, currently when garlic-player starts up it attempts once (with the white screen). The only way to re-try is to press control+s and hit ok.

At the white screen can we put a message in the center of the screen saying "connecting to index server" and a nice circle spinner below?

Thank you!

Incorrect parsing of content paths

If I insert a link to the video stream, it is glued to the path along which the smil playlist is located

The playlist is located at the URL:
http://smil.test.local/smil/data/smil/body/simple.smil

The video stream is located at:
rtsp://172.29.30.131:554/

I insert the playback of the stream:
<video src="rtsp://172.29.30.131:554/" dur="30s" />

In event_log.xml I see the line:
<event><eventType>error</eventType><eventTime>2023-03-03T10:15:34+07:00</eventTime><eventSource>ContentManager</eventSource><eventName>FETCH_FAILED</eventName><metadata><meta name="resourceURI" content="http://smil.test.local/smil/data/smil/body/**rtsp://172.29.30.131:554/**"/><meta name="errorMessage" content="Error transferring http://smil.test.local/smil/data/smil/body/rtsp://172.29.30.131:554/ - server replied: Not Found"/><meta name="transferLength" content="0"/></metadata></event>

meetbest and SVG gives a scaled bitmap image

Describe the bug
A SVG file can be displayed in a IMG tag. This seems to work gracefully. A quality issue appears when using meetbest. This stretches (and keeps the aspect ratio) as would expected from image.cpp:63, but is not what should happen.

To Reproduce
Steps to reproduce the behavior:
1.

<par><img region="logo1" xml:id="l1" src="/path/to/logo.svg" dur="100s" fit="meetbest"  /><img region="logo2" xml:id="l2" src="/path/to/logo.svg" dur="100s"  /></par>

Expected behavior
I would expect the SVG to be rendered at the w, h of the element.
I notice this is not a new question, more people are figthing with it.
https://forum.qt.io/topic/76343/render-svg-to-qpixmap-with-unknow-target-size-and-without-loss-of-quality
https://falsinsoft.blogspot.com/2016/04/qt-snippet-render-svg-to-qpixmap-for.html
https://stackoverflow.com/questions/10079011/qpixmap-and-svg

Segmentation fault in head_multizone.smil

Describe the bug
Segmentation fault in head_multizone.smil

To Reproduce
Steps to reproduce the behavior:

  1. Try to play garlic-player/tests/data/smil/head_multizone.smil

Additional context

(gdb) bt
#0  0x00007ffff7aaa50f in QLayout::addChildWidget(QWidget*) () at /usr/lib64/libQt5Widgets.so.5
#1  0x00007ffff7aa4296 in QStackedLayout::insertWidget(int, QWidget*) () at /usr/lib64/libQt5Widgets.so.5
#2  0x000000000041e0e1 in TRegion::startShowMedia(BaseMedia*) (this=0x7cdc40, media=0x9fbbd0) at region.cpp:51
#3  0x000000000041c346 in MainWindow::startShowMedia(BaseMedia*) (this=0x7fffffffdb40, media=0x9fbbd0) at mainwindow.cpp:251
#4  0x00000000004208f8 in MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x7fffffffdb40, _c=QMetaObject::InvokeMetaMethod, _id=1, _a=0x7fffffffc9b0) at moc_mainwindow.cpp:82
#5  0x00007fffee3eb970 in  () at /usr/lib64/libQt5Core.so.5
#6  0x00007ffff7db8f32 in LibFacade::startShowMedia(BaseMedia*) (this=0x7ccae0, _t1=0x9fbbd0) at moc_lib_facade.cpp:242
#7  0x00007ffff7d99c58 in LibFacade::emitStartShowMedia(BaseMedia*) (this=0x7ccae0, media=0x9fbbd0) at lib_facade.cpp:178
#8  0x00007ffff7db8a11 in LibFacade::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x7ccae0, _c=QMetaObject::InvokeMetaMethod, _id=9, _a=0x7fffffffcbd0) at moc_lib_facade.cpp:122
#9  0x00007fffee3eb970 in  () at /usr/lib64/libQt5Core.so.5
#10 0x00007ffff7db08f6 in BodyParser::startShowMedia(BaseMedia*) (this=0x92e9f0, _t1=0x9fbbd0) at moc_body_parser.cpp:263
#11 0x00007ffff7d76f90 in BodyParser::emitStartShowMedia(BaseMedia*) (this=0x92e9f0, media=0x9fbbd0) at smilparser/body_parser.cpp:276
#12 0x00007ffff7d7620b in BodyParser::startElement(TContainer*, BaseTimings*) (this=0x92e9f0, parent_container=0x9f9c50, element=0x9fbbd0) at smilparser/body_parser.cpp:117
#13 0x00007ffff7db035a in BodyParser::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x92e9f0, _c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x7fffffffcde0) at moc_body_parser.cpp:121
#14 0x00007fffee3eb970 in  () at /usr/lib64/libQt5Core.so.5
#15 0x00007ffff7db2c62 in BaseMedia::startedMedia(TContainer*, BaseTimings*) (this=0x9fbbd0, _t1=0x9f9c50, _t2=0x9fbbd0) at moc_base_media.cpp:197
#16 0x00007ffff7d877a5 in TImage::setDurationTimerBeforePlay() (this=0x9fbbd0) at smilparser/media/image.cpp:37
#17 0x00007ffff7d769aa in BodyParser::determineElements(TContainer*, QDomElement) (this=0x92e9f0, parent_container=0x9f9c50, dom_element=...) at smilparser/body_parser.cpp:215
#18 0x00007ffff7d75f7e in BodyParser::foundElement(TContainer*, QDomElement) (this=0x92e9f0, parent_container=0x9f9c50, dom_element=...) at smilparser/body_parser.cpp:77
#19 0x00007ffff7db02d2 in BodyParser::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x92e9f0, _c=QMetaObject::InvokeMetaMethod, _id=2, _a=0x7fffffffd080) at moc_body_parser.cpp:119
#20 0x00007fffee3eb970 in  () at /usr/lib64/libQt5Core.so.5
#21 0x00007ffff7db51d0 in TContainer::foundElement(TContainer*, QDomElement) (this=0x9f9c50, _t1=0x9f9c50, _t2=...) at moc_container.cpp:215
#22 0x00007ffff7d8db5b in TContainer::emitFoundElement() (this=0x9f9c50) at smilparser/container/container.cpp:92
#23 0x00007ffff7d91b19 in TPar::play() (this=0x9f9c50) at smilparser/container/par.cpp:110
#24 0x00007ffff7d761a8 in BodyParser::startElement(TContainer*, BaseTimings*) (this=0x92e9f0, parent_container=0x9fc010, element=0x9f9c50) at smilparser/body_parser.cpp:115
#25 0x00007ffff7db035a in BodyParser::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x92e9f0, _c=QMetaObject::InvokeMetaMethod, _id=4, _a=0x7fffffffd2e0) at moc_body_parser.cpp:121
#26 0x00007fffee3eb970 in  () at /usr/lib64/libQt5Core.so.5
#27 0x00007ffff7db5262 in TContainer::startedContainer(TContainer*, BaseTimings*) (this=0x9f9c50, _t1=0x9fc010, _t2=0x9f9c50) at moc_container.cpp:222
#28 0x00007ffff7d9186f in TPar::setDurationTimerBeforePlay() (this=0x9f9c50) at smilparser/container/par.cpp:58
#29 0x00007ffff7d769aa in BodyParser::determineElements(TContainer*, QDomElement) (this=0x92e9f0, parent_container=0x9fc010, dom_element=...) at smilparser/body_parser.cpp:215
#30 0x00007ffff7d75f7e in BodyParser::foundElement(TContainer*, QDomElement) (this=0x92e9f0, parent_container=0x9fc010, dom_element=...) at smilparser/body_parser.cpp:77
#31 0x00007ffff7db02d2 in BodyParser::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x92e9f0, _c=QMetaObject::InvokeMetaMethod, _id=2, _a=0x7fffffffd580) at moc_body_parser.cpp:119
#32 0x00007fffee3eb970 in  () at /usr/lib64/libQt5Core.so.5
#33 0x00007ffff7db51d0 in TContainer::foundElement(TContainer*, QDomElement) (this=0x9fc010, _t1=0x9fc010, _t2=...) at moc_container.cpp:215
#34 0x00007ffff7d8db5b in TContainer::emitFoundElement() (this=0x9fc010) at smilparser/container/container.cpp:92
#35 0x00007ffff7d8cd04 in TBody::setDurationTimerBeforePlay() (this=0x9fc010) at smilparser/container/body.cpp:76
#36 0x00007ffff7d8ccbf in TBody::prepareTimingsBeforePlaying() (this=0x9fc010) at smilparser/container/body.cpp:65
#37 0x00007ffff7d763ea in BodyParser::finishedPreload() (this=0x92e9f0) at smilparser/body_parser.cpp:144
#38 0x00007ffff7db039b in BodyParser::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x92e9f0, _c=QMetaObject::InvokeMetaMethod, _id=6, _a=0x7fffffffd740) at moc_body_parser.cpp:123
#39 0x00007fffee3eb970 in  () at /usr/lib64/libQt5Core.so.5
#40 0x00007ffff7db45ef in TBody::finishPreload() (this=0x9fc010) at moc_body.cpp:139
#41 0x00007ffff7d8cc83 in TBody::preload() (this=0x9fc010) at smilparser/container/body.cpp:60
#42 0x00007ffff7d75e92 in BodyParser::beginSmilParsing(QDomElement) (this=0x92e9f0, body=...) at smilparser/body_parser.cpp:57
#43 0x00007ffff7d9904a in LibFacade::beginSmilBodyParsing() (this=0x7ccae0) at lib_facade.cpp:83
#44 0x000000000041c2a4 in MainWindow::prepareParsing() (this=0x7fffffffdb40) at mainwindow.cpp:242
#45 0x00000000004208d6 in MainWindow::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) (_o=0x7fffffffdb40, _c=QMetaObject::InvokeMetaMethod, _id=0, _a=0x7fffffffd980) at moc_mainwindow.cpp:81
#46 0x00007fffee3eb970 in  () at /usr/lib64/libQt5Core.so.5
#47 0x00007ffff7db8fe9 in LibFacade::newIndexLoaded() (this=0x7ccae0) at moc_lib_facade.cpp:255
#48 0x00007ffff7d9941a in LibFacade::loadIndex() (this=0x7ccae0) at lib_facade.cpp:130
#49 0x00007ffff7d98cca in LibFacade::initParser() (this=0x7ccae0) at lib_facade.cpp:49
#50 0x000000000041aba7 in main(int, char**) (argc=2, argv=0x7fffffffdcb8) at main.cpp:83

Player crashes if video not found in SMIL

I created the following SMIL file:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<smil>
  <head />
  <body>
    <seq repeatCount="indefinite">
      <video src="vid.mp4" />
    </seq>
  </body>
</smil>

It works. If I change vid.mp4 => vid1.mp4 and video file is not found then player crashes.
v.0.3.0412

How are the settings used?

Hi, I'm playing around with garlic-player.app (on mac). If I delete the .app file and then download a new one it seems to keep track of the settings. Where are the settings stored for garlic-player.app?

iCal -> Wallclock repeat implementation

Hi --

I like this project and interested in its extensive use. Curious, is there a way to implement rrule for easy datetime interpretation of repeating of slides, etc?

Thank you!

JF

Help / Launch player fullscreen and second screen

How can I start Garlic-Player in a screen 2 or 3 ?
This is the desktop shortcut. The " -m fullscreen " work fine but if add " -s2 " to launch the player in screen 2 it has no effect.

Windows 10 64
"C:\Program Files (x86)\garlic-player\start_garlic.bat" -m fullscreen -s 2

Also, Garlic-Player support Atom processor?

Gracias.

garlic crashes on keypress when smil hasn't downloaded yet

Describe the bug
When I run freshly compiled master it crashes with Segmentation fault at Enter keypress

To Reproduce
Steps to reproduce the behavior:
Followed instructions on the how to build garlic on wiki.
Everything compiled.
I ran the following bash script (without any params), I specified a random URL for testing (see below in config).
After the white screen came up (which I thought would be black) I pressed any key and get the segmentation fault:

xxx@ubuntu:~/.config/SmilControl$ ~/garlic-player/build/bin/garlic.sh
/home/xxx/garlic-player/build/bin/garlic.sh: line 4: 125622 Segmentation fault      (core dumped) /home/xxx/garlic-player/build/bin/garlic-player $1 $2

garlic.sh

#!/bin/bash

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/xxx/garlic-player/build/lib
/home/xxx/garlic-player/build/bin/garlic-player $1 $2
#comment out for more debug informations
export QT_LOGGING_RULES="*.debug=false"

exit 0; 

Expected behavior
Black screen, no actions

config/log files:

garlic-player.ini:

[General]
cleanupInterval=60000
index_uri=http://someone.something.com
last_played_index_path=/home/xxx/.cache/garlic-player/index.smil
maxMultiPartSize=10000000
maxRequestSize=16000
maxThreads=4
minThreads=1
player_name=momma
port=8080
readTimeout=60000
uuid=74319e09-7683-49f2-b389-a2c6c549422f

debug.log:

2022-06-22 12:54:55,388 informational default (0)"garlic-player: v0.5.0.567"  Operating System: "linux"
2022-06-22 12:54:55,388 informational Screen (0)Monitor:  "" "Virtual-1"  Geometry: QRect(72,27 1728x919)
2022-06-22 12:54:55,388 informational Screen (0) DisplayGeometrie x: 72 y: 27 width: 1728 height: 919

event_log.xml:

2022-06-22 12:54:55,388 informational default (0)"garlic-player: v0.5.0.567"  Operating System: "linux"
2022-06-22 12:54:55,388 informational Screen (0)Monitor:  "" "Virtual-1"  Geometry: QRect(72,27 1728x919)
2022-06-22 12:54:55,388 informational Screen (0) DisplayGeometrie x: 72 y: 27 width: 1728 height: 919

mediaAlign not working

Hi -- just curious if mediaAlign was implemented as its not working for me? Or stated another way, how would I be able to align content according to smil spec here: https://www.w3.org/TR/SMIL2/layout.html#adef-mediaAlign

Use case: I have an image (or a video) that I want to align to the right middle of the screen. How would I be able to accomplish that?

If it's implemented, would it be possible to provide a working example?

Thanks so much!
JF

Question on permissions

My APK scanner got a few additional checks implemented in January, and on today's release of Garlic reported:

! repo/com.sagiadinos.garlic.player_687.apk declares sensitive permission(s):
 android.permission.CAMERA android.permission.RECORD_AUDIO android.permission.ACCESS_FINE_LOCATION
 android.permission.READ_EXTERNAL_STORAGE*

Could you please clarify what they are needed for? I must admit I still do not fully understand what exactly the app is doing, so that might be the reason I cannot answer this question myself ๐Ÿ™ˆ

PS: READ_EXTERNAL_STORAGE* โ€“ here the trailing * indicates Android granted it implicitly because WRITE_EXTERNAL_STORAGE was granted.

Thanks in advance!

Installation error

I am trying to install garlic-player on Windows 10 home and got error during installation that reads (translated into English):

Error during installation
(com.microsoft.vcredist.x64): Failed to execute (unexpected termination code: 1638): "C:\Program Files (x86)\garlic-player/vcredist_x64.exe /quiet /norestart"

Playback of streaming audio content

Describe the bug
The player does not play streaming audio content

To Reproduce
Add an audio stream to the playlist:

This is link to server icecast with codec MPEG Audio layer 1/2 (mpga)

The player skips the task

In event_log.xml I see an entry:
error2023-03-02T17:18:19+07:00ContentManagerFETCH_FAILED

This link plays in vlc player and in any browser

Additional context
An additional question concerns the playback of a video stream. Can garlic-player play a video stream, and if so, which one?

Unable to compile for Android-x86_64

Describe the bug
Garlic-Launcher is compiled as a universal APK, and I was expecting an x86 or x86_64 version of Garlic-Player to be available for download, but it was not.

So I went to the source, and found out why...

Following the instructions from the build scripts lead to many missing assets required by the build scripts, like the src/player-c2qml/android/AndroidManifest.xml for example.

To Reproduce
Steps to reproduce the behavior:

  1. update environment variables for local user in the 2.1_buildAndroid.sh
  2. try and build
  3. See error

Expected behavior
directions we can follow or some kind of feedback from the scripts.

Mac player not presenting content

Describe the bug
Launched player
Control+S
Saw SMIL index url
Pressed Enter
No response

Desktop (please complete the following information):

  • OS: MacOS 10.15.7
    Player ver: v0.5.0.566

Terminal showing upon exit
Segmentation fault: 11

linux.pro compilation fails while trying to link to -lzlib

Describe the bug
Compilation fails while trying to link to -lzlib

To Reproduce
Steps to reproduce the behavior:

  1. cd src
  2. qmake linux.pro
  3. make

Expected behavior
Linked binary.

Desktop (please complete the following information):

  • OS: Gentoo Linux

Additional context

/usr/lib/gcc/x86_64-pc-linux-gnu/9.2.0/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lzlib
collect2: error: ld returned 1 exit status
make[1]: *** [Makefile:600: ../lib/libgarlic.so.1.0.0] Error 1
make[1]: Leaving directory '/mnt/storage/home/skinkie/Sources/garlic-player/src/garlic-lib'

The complete.pro compilation works without issues.

Transition support?

Does Garlic Player support transitions?
I've tried putting a <transition id="xfade" type="fade" subtype="crossfade" dur="1s" /> in my <head> and then adding fill="transition" transIn="xfade" to my <img> definitions but I'm still getting hard cuts.

iCalendar rule support

Hi -- wondering if it's possible to include iCalendar timing/repeat support? Especially RRULE implementation..

How is repeat implemented? & Answered

Describe the bug
I am trying to repeat a sequence of images. I notice that the screen goes black after the last item. What is the garlic-player way of supporting such repeat?

Additional context

<?xml version="1.0"?>
<!DOCTYPE smil PUBLIC "-//W3C//DTD SMIL 2.0//EN" "http://www.w3.org/2001/SMIL20/SMIL20.dtd">
<smil xmlns="http://www.w3.org/2001/SMIL20/Language" xmlns:rn="http://features.real.com/2001/SMIL20/Extensions">
  <head>
    <layout>
      <root-layout width="1920" height="1080" />
      <region id="content" top="0" left="0" width="1920" height="1080" />
    </layout>
  </head>
  <body>
    <seq repeat="indefinite" fillDefault="remove">
      <img src="broadcast/cache/c60cd22ecd898062a2cd61e190f00e93.png" alt="Roosterwijzigingen (1/4)" dur="2s" region="content" fill="remove" erase="whenDone" />
      <img src="broadcast/cache/3573ad9a1d39eba9a63da6d5b3bef1aa.png" alt="Roosterwijzigingen (2/4)" dur="2s" region="content" fill="remove" erase="whenDone" />
    </seq>
  </body>
</smil>

Garlic doesn't support the deprecated repeat, instead repeatCount should be used.

Fullscreen and screen number not work

Hi, testing Garlic player parameters. -s 0 or 1 or 2 works fine but if combined with another like "-m fullscreen" only works the first:
"C:\Program Files (x86)\garlic-player\start_garlic.bat" -s 1 -m fullscreen
Launch the player in screen 1 as indicated but not fullscreen.

If change order:
"C:\Program Files (x86)\garlic-player\start_garlic.bat" -m fullscreen -s 1
Launch the player in the whole screen but not in the desired monitor. The launcher shows in default screen.

This is the version:
| garlic-player-win64-v0.3.0.422.exe | 2020-03-02 02:00 | 87M |

Start without network connection and cache ends up in error

If you try to run garlic player without network connectivity and if there is no cached smil index, you will end up with white screen forever.

There should be some kind of retry mechanism so it will eventually download the index once the connectivity is available.

It is of course possible to first somehow wait for network and after that start the player, but this should not be needed, as there can already exist cached content so we can display content event the network is not yet available.

Also somehow connected to this is refresh after load - garlic player supports http-equiv="Refresh" and that is great, but if you by accident distribute smil index without this directive, the player will never try to load any content again and is stuck with the current cache until restarted. Maybe there can be some parameter for the player to periodically reload index file even without http-equiv="Refresh" directive present?

invalid seq begin/end causes player to hang

Specifying invalid seq tag causes player to hang:

example is using this:

<seq begin="wallclock(R/2022-03-29T07:00:00/P0H)" end="wallclock(R/2022-03-29T22:00:00/P0H)">

The expected behavior, I would think, would be to display nothing and continue to poll for smil as usual.
Also something should be logged to event_log.xml saying there's an error loading smil with a meaningful message.

In general, the player should never hang but continue to poll. I can imagine a nighmare scenario if a bug in creating SMIL comes about it could freeze all players.

Install error

Testing the latest CI-Build on Windows 7 and Windows 10 the installer show an error installing the libraries ...vcredist_x64 :

error

Gracias.

Android multiscreen / bigscreen multimonitor

I'am testing and learning. The Android version support bigscreen (when multi monitor) parameter with HDMI hub and 2 or more screens like Windows 10?

X96 Android TV Box
Android 5 or 7

Gracias !!!

The use of a text field (TWeb) requires another element prior to it

Describe the bug
When trying to fetch information remotely for a text field, this information will only get loaded if another element runs before it.

To Reproduce
Steps to reproduce the behavior:

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<smil>
        <head>
                <meta name="title" content="Simple SMIL for testing images in par and multizone" />
                <layout>
                        <root-layout id="display:0" width="400" height="300" backgroundColor="#00b140"/>
                        <region regionName="screen" top="0" left="0" width="400" height="300" z-index="1" />
                </layout>
        </head>
        <body>
                <!-- <img region="screen" xml:id="start" src="http://stefan.konink.de/i/oog.jpg" dur="4s" fit="meetbest" /> -->
                <text region="screen" xml:id="text" src="http://stefan.konink.de/test.html" dur="100s" fit="meetbest" />
        </body>
 </smil>

Expected behavior
I would expect to have the text region loaded, this only occurs if an element is in before it.

The text element does not load files from the file system, nor does it load a data url

Describe the bug
A clear and concise description of what the bug is.

To Reproduce
Steps to reproduce the behavior:
1.

<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<smil>
        <head>
                <meta name="title" content="Simple SMIL for testing images in par and multizone" />
                <layout>
                        <root-layout id="display:0" width="400" height="300" backgroundColor="#00b140"/>
                        <region regionName="screen" top="0" left="0" width="400" height="300" z-index="1" />
                </layout>
        </head>
        <body>
                <img region="screen" xml:id="start" src="http://stefan.konink.de/i/oog.jpg" dur="4s" fit="meetbest" />
                <text region="screen" xml:id="text1" src="data:,Willemijn's%2011th%20Birthday%20Party" dur="2s" fit="meetbest" />
                <text region="screen" xml:id="text2" src="file:///etc/hosts" dur="2s" fit="meetbest" />
                <text region="screen" xml:id="text3" src="/etc/hosts" dur="2s" fit="meetbest" />
        </body>
 </smil>

Expected behavior
I would expect that a text is rendered "Willemijn's 11th Birthday Party" after two seconds, the /etc/hosts file is shown on screen. Since this does work for images it does not make sense it does not for text. For convience prior to solving #7 the extra tag has been added.

update chromium

Hi -- would it be possible to update chromium? Sites are complaining it's outdated. Example: bloomberg.com. Looks like garlic player is using 69.0.3497.128 which is from Oct 2018

Thank you!

APK size / per-ABI builds?

I've just noticed APK size increased quite a lot, and meanwhile exceeds 80 MB. My repo has a limit of 30 MB per app, so this app no longer fits. Currently, APKs are pulled from https://garlic-player.com/downloads/ci-builds/latest_android_player.apk โ€“ which are "fat builds". Are there per-ABI builds available? I've just checked, and removing all native libs except for arm64 would bring the APK size below 30 MB again โ€“ which would open the possibility to keep e.g. the arm64 build in my repo.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.