[![GitHub release](https://img.shields.io/github/release/emilsvennesson/script.module.inputstreamhelper.svg)](https://github.com/emilsvennesson/script.module.inputstreamhelper/releases) [![CI](https://github.com/emilsvennesson/script.module.inputstreamhelper/workflows/CI/badge.svg)](https://github.com/emilsvennesson/script.module.inputstreamhelper/actions?query=workflow:CI) [![Codecov status](https://img.shields.io/codecov/c/github/emilsvennesson/script.module.inputstreamhelper/master)](https://codecov.io/gh/emilsvennesson/script.module.inputstreamhelper/branch/master) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![Contributors](https://img.shields.io/github/contributors/emilsvennesson/script.module.inputstreamhelper.svg)](https://github.com/emilsvennesson/script.module.inputstreamhelper/graphs/contributors) # InputStream Helper # **script.module.inputstreamhelper** is a simple Kodi module that makes life easier for add-on developers relying on InputStream based add-ons and DRM playback. ## Features ## - Displays informative dialogs if required InputStream components are unavailable - Checks if HLS is supported in inputstream.adaptive - Automatically installs Widevine CDM on supported platforms (optional) - Keeps Widevine CDM up-to-date with the latest version available (Kodi 18 and higher) - Checks for missing depending libraries by parsing the output from `ldd` (Linux) ## Example ## ```python # -*- coding: utf-8 -*- """InputStream Helper Demo""" from __future__ import absolute_import, division, unicode_literals import sys import inputstreamhelper import xbmc import xbmcgui import xbmcplugin PROTOCOL = 'mpd' DRM = 'com.widevine.alpha' STREAM_URL = 'https://demo.unified-streaming.com/video/tears-of-steel/tears-of-steel-dash-widevine.ism/.mpd' MIME_TYPE = 'application/dash+xml' LICENSE_URL = 'https://widevine-proxy.appspot.com/proxy' KODI_VERSION_MAJOR = int(xbmc.getInfoLabel('System.BuildVersion').split('.')[0]) def run(addon_url): """Run InputStream Helper Demo""" # Play video if addon_url.endswith('/play'): is_helper = inputstreamhelper.Helper(PROTOCOL, drm=DRM) if is_helper.check_inputstream(): play_item = xbmcgui.ListItem(path=STREAM_URL) play_item.setContentLookup(False) play_item.setMimeType(MIME_TYPE) if KODI_VERSION_MAJOR >= 19: play_item.setProperty('inputstream', is_helper.inputstream_addon) else: play_item.setProperty('inputstreamaddon', is_helper.inputstream_addon) play_item.setProperty('inputstream.adaptive.manifest_type', PROTOCOL) play_item.setProperty('inputstream.adaptive.license_type', DRM) play_item.setProperty('inputstream.adaptive.license_key', LICENSE_URL + '||R{SSM}|') xbmcplugin.setResolvedUrl(int(sys.argv[1]), True, play_item) # Setup menu item else: xbmcplugin.setContent(int(sys.argv[1]), 'videos') list_item = xbmcgui.ListItem(label='InputStream Helper Demo') list_item.setProperty('IsPlayable', 'true') url = addon_url + '/play' xbmcplugin.addDirectoryItem(int(sys.argv[1]), url, list_item) xbmcplugin.endOfDirectory(int(sys.argv[1])) if __name__ == '__main__': run(sys.argv[0]) ``` The Helper class takes two arguments: protocol (the media streaming protocol) and the optional argument 'drm'. It is recommended to not add your InputStream add-on as a dependency in addon.xml. It can cause confusion with users not being able to install your add-on because the InputStream add-on is disabled. InputStream Helper addresses issues such as these and helps the user to install/enable required InputStream components. ## Accepted protocol arguments: ## * **mpd** -- *MPEG-DASH* * **ism** -- *Microsoft Smooth Streaming* * **hls** -- *HTTP Live Streaming from Apple* * **rtmp** -- *Real-Time Messaging Protocol* ## Accepted drm arguments: ## * widevine * com.widevine.alpha ## Support ## Please report any issues or bug reports on the [GitHub Issues](https://github.com/emilsvennesson/script.module.inputstreamhelper/issues) page. ## License ## This module is licensed under the **The MIT License**. Please see the [LICENSE.txt](LICENSE.txt) file for details. ## Releases ### v0.5.2 (2020-12-13) - Update Chrome OS ARM hardware id's (@mediaminister) ### v0.5.1 (2020-10-02) - Fix incorrect ARM HWIDs: PHASER and PHASER360 (@dagwieers) - Added Hebrew translations (@haggaie) - Updated Dutch, Japanese and Korean translations (@michaelarnauts, @Thunderbird2086) ### v0.5.0 (2020-06-25) - Extract Widevine CDM directly from Chrome OS, minimizing disk space usage and eliminating the need for root access (@horstle) - Improve progress dialog while extracting Widevine CDM on ARM devices (@horstle, @mediaminister) - Support resuming interrupted downloads on unreliable internet connections (@horstle, @mediaminister) - Reshape InputStream Helper information dialog (@horstle, @dagwieers) - Updated Dutch, English, French, German, Greek, Hungarian, Romanian, Russian, Spanish and Swedish translations (@dagwieers, @horstle, @mediaminister, @tweimer, @Twilight0, @frodo19, @tmihai20, @vlmaksime, @roliverosc, @Sopor) ### v0.4.7 (2020-05-03) - Fix hardlink on Windows (@BarmonHammer) - Fix support for unicode chars in paths (@mediaminister) - Show remaining time during Widevine installation on ARM devices (@horstle) ### v0.4.6 (2020-04-29) - Compatibility fixes for Kodi 19 Matrix "pre-release" builds (@mediaminister) - Optimize Widevine CDM detection (@dagwieers) - Minor fixes for Widevine installation on ARM devices (@dagwieers @mediaminister @horstle) ### v0.4.5 (2020-04-07) - Added Spanish and Romanian translations (@roliverosc, @tmihai20) - Added support for Kodi 19 Matrix "pre-release" builds (@mediaminister) - Fix Widevine backups when using an external drive (@horstle) - Various fixes for Widevine installation on ARM devices (@horstle) ### v0.4.4 (2020-03-01) - Added option to restore a previously installed Widevine version (@horstle) - Improve progress bar when extracting Widevine on ARM devices (@dagwieers) - Improve Widevine library version detection (@dagwieers, @mediaminister) - Improve InputStream Helper information (@dagwieers, @mediaminister) - Increase download reliability for Chrome OS on ARM devices (@horstle, @RolfWojtech) - Added Japanese, Korean, Croatian and Hungarian translations (@Thunderbird2086, @arvvoid, @frodo19) - Updated existing translations (@dnicolaas, @Sopor, @tweimer, @horstle, @mediaminister) - Various small bugfixes for Widevine installation on ARM devices (@dagwieers, @mediaminister, @Twilight0, @janhicken) ### v0.4.3 (2019-09-25) - French translation (@brunoduc) - Updated translations (@vlmaksime, @dagwieers, @pinoelefante, @horstle, @Twilight0, @emilsvennesson) - Ensure Kodi 19 compatibility (@mediaminister) - Configurable temporary download directory for devices with limited space (@horstle) - Configurable Widevine CDM update frequency (@horstle) - Fix add-on settings crashes when InputStream Adaptive is missing (@mediaminister) - Improve unicode character support (@mediaminister) ### v0.4.2 (2019-09-03) - Move release history to readme file (@mediaminister) - Clean up coverage/codecov config (@dagwieers) - Add InputStream Helper Information to settings page (@horstle, @dagwieers) - Make sure addon.xml meets all requirements (@mediaminister) - Simplify add-on entry point to speed up loading time (@mediaminister) - Unicode fix for os.walk (@mediaminister) - Revert "Fix ARM processing in unittest locally" (@mediaminister) - Fix unresponsive Kodi when opening add-on information pane (@dagwieers, @mediaminister) - Add-on structure improvements (@dagwieers) ### v0.4.1 (2019-09-01) - Follow kodi-addon-checker recommended code changes (@mediaminister) - Implement api using runscript (@mediaminister) - Fix ARM processing in unittest locally (@dagwieers) - Add more project information (@dagwieers) - More coverage improvements (@dagwieers) ### v0.4.0 (2019-09-01) - Use local url variable (@mediaminister) - Directly use Kodi CDM directory (@mediaminister) - Implement settings menu and API (@dagwieers) - Add integration tests (@dagwieers) - Add a progress dialog for extraction on ARM (@dagwieers) - Fix crash when using platform.system() (@dagwieers) - Fix a python error (@mediaminister) - Remove legacy Widevine CDM support (@dagwieers) - Replace requests/urllib3 with urllib/urllib2 (@dagwieers) - Various unicode fixes (@mediaminister) - Add proxy support (@dagwieers) - Add setting to disable inputstreamhelper (@horstle, @JohnPlayerSpecial2018) - Check Widevine support before all checks (@vlmaksime) - Support 64-bit kernel with 32-bit userspace (@mrfixit2001) - Dutch translation (@mediaminister, @basrieter) - German translation (@flubshi) - Greek translation (@Twilight0) - Italian translation (@pinoelefante) - Russian translation (@vlmaksime) - Swedish translation (@emilsvennesson) ### v0.3.5 (2019-08-15) - Auto install inputstream.adaptive (@mediaminister) - Fix latest Widevine version detection (@dagwieers) - Check for Widevine updates on new release (@mediaminister) ### v0.3.4 (2019-03-23) - python2_3 compability (@mediaminister, @Rechi) - Option to disable inputstreamhelper in settings.xml - calculate disk space on the tmp folder (@dawez) - Support for Unicode paths in Windows (@WallyCZ) - Italian translation (@pinoelefante) - Dutch translation (@dnicolaas) - Greek translation (@Twilight0) - Russian translation (@vlmaksime) ### v0.3.3 (2018-02-21) - Load loop if it's a kernel module (@mkreisl) - Fix legacy Widevine CDM update detection - inputstream_addon is now a public variable - Notify user that ARM64 needs 32-bit userspace - Improve logging - Cosmetics ### v0.3.2 (2018-01-30) - Fix OSMC arm architecture detection - Fix ldd permissions error ### v0.3.1 (2018-01-29) - check_inputstream() return fix ### v0.3.0 (2018-01-29) - Bug fix: module left xbmcaddon class in memory - Keep Widevine CDM up-to-date with the latest version available (Kodi 18 and higher) - Check for missing depending libraries by parsing the output from ldd - Use older Widevine binaries on Kodi Krypton (fixes nss/nspr dependency issues) ### v0.2.4 (2018.01.01) - Fix ARM download on systems with sudo (OSMC etc) - Actually bump version in addon.xml, unlike v0.2.3... ### v0.2.3 (2017-12-30) - Make sure Kodi and Widevine CDM binary architecture matches - Minor wording changes/fixes ### v0.2.2 (2017-12-05) - Fixes for widevine download when using 64-bit Kodi (@gismo112, @asciidisco) ### v0.2.1 (2017-10-15) - Update German translation (@asciidisco) - Improve root permissions acquisition ### v0.2.0 (2017-09-29) - Automatic Widevine CDM download on ARM devices - Display Widevine EULA during installation procedure - German translation (thanks to asciidisco) - New, smaller and less ugly generic icon - Better exception handling - Code cleanup ### v0.1.0 (2017-09-13) - Initial release