User Tools

Site Tools


refresh_on_demand

This is an old revision of the document!


HOW TO REFRESH ONLINE FOLDERS ON DEMAND

THE NEED FOR REFRESH ON DEMAND

The Serviio Console and various Remote Device Console implementations offer the ability to force refresh Online Sources On Demand,
however no capability is offered to initiate forced refreshes on demand from the Folder Menu on the client device.

While most Online Sources are relatively static there are some sources that are constantly changing and it is necessary to refresh in order to obtain the currently available set of feed items. One approach is to create a WebResource groovy for the source and initiate refreshes on periodic basis consistent with the known dynamics of the source. The problem with this approach is the continuing use of resources to maintain the current set of feed items even though they may never be used. The better approach is to force refresh the Folder menu just prior to its use.

The Online Source HAHASPORT.COM is an example. This site maintains and provides a list of scheduled events by sport, and provides links to embedded player streams of events as they go live. To maintain currency of a Serviio menu, the list of scheduled events must be reviewed at least hourly since new events can be added or removed at any time; live events must be detected minutes prior to their scheduled start, and if not yet started again at their scheduled start and a few minutes thereafter; and then live events must be removed a few minutes after their scheduled end time. This constant stream of refreshes particularly when multiple sport sources are added is beyond the capacity of most systems and refreshes are constantly backlogged due to insufficient time to access the changing feed items.

The HAHASPORT.GROOVY therefore implements the ability initiate On Demand Refreshes from the Online Menu rather than refresh on a scheduled basis, and may be reviewed as an example of the following methodology.

ON DEMAND METHODOLOGY

The prerequisite is the development of a WebResource groovy for the online source and the identification of a permanently available online source link that may be used to provide a Refresh Menu Item stream.

The WebResource groovy should creates the Refresh item as the first menu item, using an appropriate thumbnail and title and the Refresh Menu item stream.

The WebResource groovy must also generate a value for “expires on” for all items equal to the current time plus 30 days to prevent any automatic Serviio Refreshes from occuring.

The ServiioService.exe.vmoptions file also needs to be edited to cause ffmpeg.exe transcoding requests to be sent to a script which first checks for the link to the Refresh Menu item stream and initiates an Online Library Refresh of the appropriate library id using CURL before calling ffmpeg.exe to transcode the requested stream.

THE HAHASPORT IMPLEMENTATION

The HAHASPORT.GROOVY uses the c- value designating the sport from the ResourceUrl to request different Refresh Menu item streams for each sport. Similarly the script checks for each of these streams to determine the online library id to refresh.

The HAHASPORT.GROOVY uses “https://sites.google.com/site/serviiorss/refresh.jpg” as the thumbnail, “Click to Refresh” as the videotitle and “rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/vn/reflector:53708” (which is the view from the ISS) as the Refresh Menu item stream where the n in vn corresponds to the c- value in the ResourceUrl.

With these changes clicking on the Refresh menu item, initiates a refresh of the corresponding online source while the Refresh Menu Item stream plays. If one waits for at least a minute for the refresh to execute before stopping playback, the refreshed menu will be displayed on return and the desired item selected for playback, else the menu will be unavailable on return and Serviio will exit and require a restart to access the updated menu once available.

The HAHASPORT.GROOVY is dependent upon the attached ffmpeg.bat script with the appropriate online library id's added as determined by using CURL to dump the repository as documented in the script, and the script is similarly dependent upon the change to ServiioService.exe.vmoptions as documented in the script. (Note I am sure more advanced scripts can be created by those conversant with other scripting tools than bats)

After listing the available live streams, the HAHASPORT.GROOVY also generates a final item in each menu, showing either the scheduled start time of the next event or the absence of any more events in the schedule for that sport.

USING THE HAHASPORT GROOVY

To use the HAHASPORT.GROOVY hahasport.groovy.zip just add the following Resource URL's as WebResources in the Serviio Console, together with the appropriate labels.

http://www.hahasport.com/c-1.html FOOTBALL
http://www.hahasport.com/c-3.html HOCKEY
http://www.hahasport.com/c-4.html TENNIS
http://www.hahasport.com/c-6.html BASKETBALL
http://www.hahasport.com/c-7.html BASEBALL
http://www.hahasport.com/c-8.html GOLF
http://www.hahasport.com/c-9.html CYCLING
http://www.hahasport.com/c-10.html MOTORSPORTS
http://www.hahasport.com/c-11.html OTHER

Since each event may have multiple streams available each from a different source, the estreams parameter may be used to cause multiple streams to be displayed for each event if available. estreams may equal 1 thru 9 with 9 signifing that all available streams should be displayed, for example http://www.hahasport.com/c-1.html?estreams=9

Note also that since HAHASPORT.COM sources its streams from many different sources that there may be streams the groovy does not decode for display in the Serviio menu. For details on the stream decoding set the onlinelibrary log to debug mode.

To access the current events for a given sport, open the menu and click on the Refresh menu item which will initiate a refresh of the online source while the Refresh Menu Item stream plays. Wait for at least a minute for the refresh to execute before stopping playback and the refreshed menu will be displayed on return and the desired item selected for playback. If playback of the Refresh Menu Item stream is stopped before the refresh is complete the menu will be unavailable on return and Serviio will exit and require a restart to access the updated menu once available.

Note that if you do not to implement changes required to support the Refresh On Demand menu item, you must use the Serviio console or a remote console to force the refresh of each sport in order to obtain the current live stream event menu.

THE SCRIPT

@echo off
:
: To intercept Serviio FFmpeg Calls install this bat as "C:\Program Files\Serviio\lib\ffmpeg.bat"
: then Edit "C:\Program Files\Serviio\bin\ServiioService.exe.vmoptions" 
: and change the Dffmpeg.location variable to
: -Xmx384m
: -Dffmpeg.location="C:\Program Files\Serviio\lib\ffmpeg.bat"
:
: Finally install Curl as required in C:\windows\system32 and use
: Curl -X GET "http://localhost:23423/rest/repository"  > C:\temp\repository.txt
: to get the repostitory ids for each c value in http://www.hahasport.com/c-n.html and enter the ids below
: eg: set C1=54

set C1= 
set C2=
set C3= 
set C4= 
set C5=
set C6= 
set C7=
set C8= 
set C9=
set C10=
set C11= 

: The following code will then be executed before passing control back to Serviio's ffmpeg.

set A=%1
shift
set B=%1
shift
set C=%1
shift
set D=%1
shift
set E=%1
shift
set F=%1
shift
set G=%1
shift
set H=%1
shift
set I=%1
shift
set J=%1
shift
set K=%1
shift
set L=%1
shift
set M=%1
shift
set N=%1
shift
set O=%1
shift
set P=%1
shift
set Q=%1
shift
set R=%1
shift
set S=%1
shift
set T=%1
shift
set U=%1
shift
set V=%1
shift
set W=%1
shift
set X=%1
shift
set Y=%1
shift
set Z=%1
shift
set AA=%1
shift
set BB=%1
shift
set CC=%1
shift
set DD=%1
shift
set EE=%1
shift
set FF=%1
shift
set GG=%1
shift
set HH=%1
shift
set II=%1
shift
set JJ=%1
shift
set KK=%1
shift
set LL=%1
shift
set MM=%1
shift
set NN=%1
shift
set OO=%1
shift
set PP=%1
shift
set QQ=%1
shift
set RR=%1
shift
set SS=%1
shift
set TT=%1
shift
set UU=%1
shift
set VV=%1
shift
set WW=%1
shift
set XXY=%1
set CODE=NONE
echo %A% %B% %C% %D% %E% %F% %G% %H% %I% %J% %K% %L% %M% %N% %O% %P% %Q% %R% %S% %T% %U% %V% %W% %X% %Y% %Z% %AA% %BB% %CC% %DD% %EE% %FF% %GG% %HH% %II% %JJ% %KK% %LL% %MM% %NN% %OO% %PP% %QQ% %RR% %SS% %TT% %UU% %VV% %WW% %XX% %YY% %ZZ% >> "C:\Program Files\Serviio\log\ffmpeg.log"
:COM Note Serviio appends ?tcp to rtsp links.
if .%B% == .rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/v1/reflector:53708?tcp set CODE=%C1%
if .%B% == .rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/v2/reflector:53708?tcp set CODE=%C2%
if .%B% == .rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/v3/reflector:53708?tcp set CODE=%C3%
if .%B% == .rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/v4/reflector:53708?tcp set CODE=%C4%
if .%B% == .rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/v6/reflector:53708?tcp set CODE=%C6%
if .%B% == .rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/v7/reflector:53708?tcp set CODE=%C7%
if .%B% == .rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/v8/reflector:53708?tcp set CODE=%C8%
if .%B% == .rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/v9/reflector:53708?tcp set CODE=%C9%
if .%B% == .rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/v10/reflector:53708?tcp set CODE=%C10%
if .%B% == .rtsp://a1709.l1856953708.c18569.g.lm.akamaistream.net:554/D/1709/18569/v11/reflector:53708?tcp set CODE=%C11%
::if .%CODE%==.NONE "C:\Program Files\Serviio\lib\ffmpeg.exe" %A% %B% %C% %D% %E% %F% %G% %H% %I% %J% %K% %L% %M% %N% %O% %P% %Q% %R% %S% %T% %U% %V% %W% %X% %Y% %Z% %AA% %BB% %CC% %DD% %EE% %FF% %GG% %HH% %II% %JJ% %KK% %LL% %MM% %NN% %OO% %PP% %QQ% %RR% %SS% %TT% %UU% %VV% %WW% %XX% %YY% %ZZ%
if NOT .%CODE%==.NONE echo REFRESH %CODE% >> "C:\Program Files\Serviio\log\ffmpeg.log"
if NOT .%CODE%==.NONE curl -X POST "http://localhost:23423/rest/action" -H "Content-Type: text/xml" -d "<action><name>forceOnlineResourceRefresh</name><parameter>%CODE%</parameter></action>"
"C:\Program Files\Serviio\lib\ffmpeg.exe" %A% %B% %C% %D% %E% %F% %G% %H% %I% %J% %K% %L% %M% %N% %O% %P% %Q% %R% %S% %T% %U% %V% %W% %X% %Y% %Z% %AA% %BB% %CC% %DD% %EE% %FF% %GG% %HH% %II% %JJ% %KK% %LL% %MM% %NN% %OO% %PP% %QQ% %RR% %SS% %TT% %UU% %VV% %WW% %XX% %YY% %ZZ%
exit
refresh_on_demand.1333241512.txt.gz · Last modified: 2012/04/01 00:51 by jhb50