SageTV is a cross-platform networked DVR and media management system
Java C C++ Shell Makefile PowerShell
Latest commit a6b6219 Jan 9, 2018
Narflex Byte based seeking support for MPEG files
This helps to resolve a long standing issue where files that have bad PTS timelines
cause the playback time to jump wildly and infuriate you when you try
to skip around them. :)

What it does is detect when the parser's calculated duration for a file that is
being played back (extender only, no transcoding) is different by a decent amount (25%)
from that of what SageTV thinks the recorded duration should be. Then it uses the read
file position to estimate the current playback time and then for seeking, it guesses
the proper file position as if the file were constant bitrate. This works WAY better
than being stuck without the ability to seek or even know what time you are at in the file.

This feature is off by default, and it can be enabled by setting this in your file:

This does NOT work on files that are currently recording.
This does NOT allow you to fast forward or rewind properly in files like this, only seek.
You CAN force this to work for currently recording files by setting this property in the
properties file for the extender you want it to work on:
(this is so if you're recording something you really want to watch right now that has
this issue, you can turn off the extender, edit the properties file and then it'll make it
happen...don't forget to reset that property later).
This is somewhat inaccurate, but that's what you get with byte-based time estimation.
Failed to load latest commit information.
build Updates for 9.1.7 including changelog [ci release] Sep 24, 2017
buildwin Added SageTV and Studio manual Word doc files and updated Studio manu… Dec 8, 2015
gradle/wrapper minor update gradle properties Dec 31, 2015
i18n Added a more roles. Jan 14, 2017
images Added better V9 images Jan 13, 2016
install/config Updated DVB-S frequencies for New Zealand Aug 20, 2017
installer Fixed an issue in the powershell script. Nov 13, 2017
java Byte based seeking support for MPEG files Jan 10, 2018
native Release of version 9.1.8 for windows Nov 13, 2017
stvs Fix STV issues Aug 14, 2017
test Refactored to removed Sage.EMBEDDED Jun 25, 2017
third_party Updates for 9.1.7 including changelog [ci release] Sep 24, 2017
.editorconfig Unit Test Changes Sep 6, 2016
.gitignore Released v9.0.14 Mar 18, 2017
.travis.yml added deploy script for auto-deployment to Bintray Jun 17, 2017
AUTHORS Fix STV issues Aug 14, 2017 Added support for building MiniClient jar in Linux/Window/Mac Aug 16, 2015 Release of version 9.1.8 for windows Nov 13, 2017
CONTRIBUTING initial commit Jun 18, 2015
CONTRIBUTORS Add myself to contributors. Jun 21, 2016
HOWTO-BuildWindowsNativeCode.txt 1. Migrate build environment from vs2005 to vs2015 Oct 13, 2015
LICENSE initial commit Jun 18, 2015
README noted that native\Build is created dynamically Oct 13, 2015 Added a README for the new Plugin Repositories Jan 10, 2016 Enable SageTV to load plugins from a SageTVPluginsDev.d directory in … Sep 2, 2016
build.gradle Cleaned up some more comments. Apr 24, 2017
gradlew Added gradle to support cross platform building the Sage.jar (eventually Aug 13, 2015
gradlew.bat Added gradle to support cross platform building the Sage.jar (eventually Aug 13, 2015
plugin-uploader.gradle Added scripts to package and deploy the legacy SageTV UIs so they can… Jan 7, 2017


This file outlines the overall directory layout for the SageTV codebase,
 what all the various components in it and what you need to build it on
 different platforms.

Directory Layout

build - build files/scripts for Linux
buildwin - misc. files for Windows & Linux installs, and build scripts for
	 non-MS dev built files on Windows
i18n - internationalization files
images - graphics that are included in the Sage.jar file
install - default config files for installs
java - java source code
native - C/C++ source code, top-level MSDEV projects for Windows native code
native/ax - Windows DirectShow filter C++ source code
native/Build/ - Windows binaries; created dynamically by building Native code
native/common - shared common source/header files
native/crosslibs - cross platform native code
native/dll - Windows DLL C++ source code
native/elf - native executable linux source code
native/exe - Windows executable C++ source code
native/include - includes files (both platforms)
native/so - Linux native library C/C++ code
stvs - STV XML, resource and image files
third_party - Third party source code is located here. 

Various components in SageTV rely on code that is in the third_party directory
and utilize it directly in some cases. Some other third party components stand
on their own and are just part of the overall distribution.

For building on Linux you should set JDK_HOME to be the directory where the JDK
is installed (it should have an include and an include/linux folder at that path).

Extra Linux packages required to build (not exhaustive): lib1394raw-dev,
libavc1394-dev, libiec61883-dev, libfreetype6-dev, yasm

jhead is NOT included in the open source distribution due to it being under the
ambiguous Public Domain license. It can be acquired separately and is needed for
fixing the EXIF JPEG header after rotating pictures.

You can use the build/ script on Linux to build the entire platform and
have it packaged into tarballs and debian installers.

The Windows components need to be built with Visual Studio 2005, mingw/msys and javac.
There is no script for doing this included.

Release Notes for V9

1. Java compliance level is now 1.5
2. Read/write locking support in the database (previously, it only had generic rw locks... now there are explicit locks for read and write on each table)
3. If on a menu w/out full screen video, but video is playing, switch to the full screen video menu when the screen saver timeout expires
4. Lucene support for search (search API calls are now executed on the server and utilize the Lucene index for performance)
5. Loads of various bug fixes and performance enhancements :)
6. New Airing API calls: GetParentalLimitsExceeded, GetPlayableAiring
7. New Channel API calls: GetChannelLogoURL
8. New Configuration API calls: SetCurrentlyAiringProgramsStartLive, GetCurrentlyAiringProgramsStartLive
9. New Database API calls(NTE methods support numeric text input, such as using 228 would match ‘cat’ or ‘bat’, more details in the code): SearchForPeopleNTE, SearchForTitlesNTE, SearchSelectedFieldsNTE, GetMediaMask, HasMediaMask, SearchForChannel
10. Various filtering, sorting and grouping methods in the Database API are now optimized and don’t go back through the API interpreter for filter/sort/group method execution
11. Following Database API calls now support extra args to pass to filter/sort/group methods: FilterByBoolMethod, FilterByMethod, GroupByMethod
12. New Favorite API calls: GetFavoritePresentationName, GetFavoritePresentationPrefix, GetFavoritesForAiring
13. New Global API calls: SageCommand (with payload), IsTransitioningToMenus, IsTransitioningFromMenus, GetUIComponentPositionXf, GetUIComponentPositionYf, GetUIComponentWidthf, GetUIComponentHeightf, IsClientDisconnected, GetClientServerConnectionProgress, GetEPGUpdateState, SwitchEmbeddedModeTo/AreScreenshotsSupported/SaveScreenshotToFile (these 3 are only useful on embedded)
14. New MediaPlayer API calls: GetRecentChannels, ClearRecentChannels
15. New SeriesInfo API calls: GetSeriesImage(bool), GetSeriesImageURL, GetSeriesImageCount, GetSeriesImageAtIndex, GetSeriesImageURLAtIndex, HasSeriesActorImage, GetSeriesActorImage, GetSeriesActorImageURL
16. New Show API calls: IsMovie, HasMovieImage, GetMovieImage, GetMovieImageURL, GetMovieImageCount, GetMovieImageAtIndex, GetMovieImageURLAtIndex, HasPersonImage, GetPersonImage, GetPersonImageURL, GetPersonDateOfBirth, GetPersonDateOfDeath, GetPersonBirthplace, GetPersonID, GetPersonForID, GetMovieStarRating
17. New Utility API calls: GetMetaImageAspectRatio, GetMetaImageBytes, GetLocalFileAsString, ConvertNteChars, StringIndexOfNTE, StringStartsWithNTE, DumpServerThreadStates
18. Person is a new database object (rather than just being Stringer objects as they were previously)
19. Series/person/character image information now exists in the database (follows TMS naming conventions)
20. Thread monitoring and regular logging of CPU usage of various threads
21. Significant performance improvements to overall database system
22. Licensing/key checking code removed
23. “Spoiler Protection” when watching live TV, it will not default to a channel which could possibly ‘spoil’ something else you care about. It also tries to avoid selecting anything that needs parental control by default.
24. Codebase from EMBEDDED (HD300) merged with main SageTV codebase (NOTE: This will no longer run on the HD300 because it’s not Java 1.5 source rather than Java 1.4)
25. Added new hooks: RecordRequestLiveMultiConflict, WatchRequestLiveMultiConflict (these allow processing all conflicts for watch/record requests at once rather than one at a time; if these hooks are not in the STV then the non-Multi hooks that have always existed will be called instead)
26. TVTV support removed
27. Added property “hdmi_always_select_best” which defaults to false, but if set true will auto select the best HDMI resolution for extender clients
28. Added property “studio/alert_on_syntax_error” which defaults to false, but if true will popup an alert in the Studio if a syntax error is entered (i.e. an expression the parser cannot properly compile)
29. Support for rendering of CEA-708 closed captions (i.e. Digital TV closed captions)
30. Added downloader for Weather Underground data (API license key required to use)
31. CVS integration for SageTV Studio (although not that useful since this is hosted on GIT now; but it’s done in an abstract way so GIT support could be added)
32. Added RemotePusherClient support. This allows for a separate process that handles the streaming (push & pull mode) for SageTV rather than running this through the Java classes.
33. On Windows, the global environment variable SAGETVUSERKEY should be set to be your license key if you’re using the EXE built from the open source codebase. This will then allow you to communicate with the SageTV EPG server.