├── .gitignore ├── .jshintrc ├── .prettierrc.js ├── .vscode ├── extensions.json └── settings.json ├── CHANGELOG ├── INSTALL-SERVER.md ├── LICENSE ├── README.md ├── TODO.txt ├── backend ├── accessibility_templates │ ├── aa-001.xml │ ├── aa-002.xml │ ├── aa-003.xml │ ├── aa-004.xml │ ├── aa-005.xml │ ├── aa-006.xml │ ├── aa-007.xml │ ├── aa-008.xml │ ├── aa-009.xml │ ├── aa-010.xml │ ├── aa-011.xml │ ├── aa-012.xml │ ├── aa-013.xml │ ├── aa-014.xml │ └── aa-015.xml ├── channel_icons │ ├── chicon_akamai.png │ ├── chicon_br.png │ ├── chicon_br_1.png │ ├── chicon_br_hd.png │ ├── chicon_dvb_s.png │ ├── chicon_dvb_t.png │ ├── chicon_dvb_t2.png │ ├── chicon_harmonic.png │ ├── chicon_hopetv.png │ └── outofservice_example.png ├── configuration.php ├── css │ ├── bootstrap-4.3.1.css │ ├── dvbi.css │ └── dvbi.scss ├── delete_servicelist.php ├── dvbi.css ├── dvbi.js ├── extended_program_information-template.xml ├── extended_program_information.xml ├── icons │ ├── pencil.svg │ ├── trash.svg │ └── window.svg ├── images │ ├── logo_dvb-i.png │ └── logo_sofiadigital.png ├── index.html ├── js │ ├── bootstrap-4.3.1.js │ └── popper.min.js ├── more_episodes.php ├── nownext.png ├── nownext.xml ├── program_information.php ├── program_information_template.xml ├── saved_lists.php ├── schedule.php ├── schedule_event_template.xml ├── schedule_template.xml ├── schedule_templates │ ├── cgsid_1.xml │ ├── cgsid_10.xml │ ├── cgsid_11.xml │ ├── cgsid_12.xml │ ├── cgsid_13.xml │ ├── cgsid_14.xml │ ├── cgsid_2.xml │ ├── cgsid_3.xml │ ├── cgsid_4.xml │ ├── cgsid_5.xml │ ├── cgsid_6.xml │ ├── cgsid_7.xml │ ├── cgsid_8.xml │ ├── cgsid_9.xml │ ├── tag_dvb-i-referenceapp,2023_Parental-1.xml │ ├── tag_dvb-i-refrecenceapp,2020_Drm-4.xml │ ├── tag_dvb-i-refrecenceapp,2020_Drm-5.xml │ ├── tag_dvb.org,2020_AKAMAI-LL.xml │ ├── tag_dvb.org,2020_CMAF-1.xml │ ├── tag_dvb.org,2020_CMAF-2.xml │ ├── tag_dvb.org,2020_CMAF-3.xml │ ├── tag_dvb.org,2020_DASHIF-LL.xml │ ├── tag_dvb.org,2020_DOLBY-HDR.xml │ ├── tag_dvb.org,2020_HARMONIC-LL.xml │ ├── tag_dvb.org,2020_PHILIPS-HDR.xml │ ├── tag_dvb.org,2020_SES-HDR-1.xml │ ├── tag_dvb.org,2020_SES-HDR-2.xml │ ├── tag_dvb.org,2020_UNIFIED-LL.xml │ ├── tag_dvb.org,2020_Unified-0.xml │ ├── tag_dvb.org,2020_Unified-1.xml │ ├── tag_dvb.org,2020_Unified-2.xml │ ├── tag_dvb.org,2020_Unified-3.xml │ ├── tag_dvb.org,2020_Unified-4.xml │ ├── tag_dvb.org,2020_Unified-7.xml │ ├── tag_dvb.org,2020_Unified-8.xml │ └── tag_dvb.org,2020_Unified-mt.xml ├── servicelist.php ├── servicelist_registry.php ├── servicelists │ ├── .gitignore │ ├── TM-STREAM0075r1 DVB-DASH_Reference_Streams.xml │ ├── advanced_codecs.xml │ ├── drm.xml │ ├── example.xml │ ├── example_availability.xml │ ├── prominence_r6.xml │ ├── regions.xml │ └── schemas │ │ ├── dvbi_service_list_discovery_v1.6.xsd │ │ ├── dvbi_types_v1.0.xsd │ │ ├── dvbi_v6.0.xsd │ │ ├── tva_metadata_3-1.xsd │ │ └── tva_mpeg7.xsd ├── slepr-master.xml └── upload_servicelist.php ├── frontend ├── CSmaps.js ├── android │ ├── images │ │ ├── License.txt │ │ ├── apple-touch-icon.png │ │ ├── arrow-left-short.svg │ │ ├── bg_chinfo.png │ │ ├── bg_info.png │ │ ├── call-to-action.png │ │ ├── chevron-left.svg │ │ ├── chevron-right.svg │ │ ├── closed-captioning.svg │ │ ├── contrast.png │ │ ├── empty.png │ │ ├── gear.svg │ │ ├── icons-128.png │ │ ├── icons-512.png │ │ ├── landingpage_banner.png │ │ ├── landingpage_ui.png │ │ ├── lock.svg │ │ ├── logo_dvbi_sofia.png │ │ ├── magnifier-glass-zoom-icon.png │ │ ├── manifest.json │ │ ├── mixer-vertical.svg │ │ ├── noun-audio-description-4258567-trim.png │ │ ├── noun-audio-description-4258567.png │ │ ├── noun-speaking-5005852-trim.png │ │ ├── noun-speaking-5005852.png │ │ ├── noun-subtitles-78795-trim.png │ │ ├── noun-subtitles-78795.png │ │ ├── noun-text-to-speech-5024773-trim.png │ │ ├── noun-text-to-speech-5024773.png │ │ ├── ons-icon-bsl-large-mono-2.png │ │ ├── splash-128.png │ │ ├── splash-512.png │ │ ├── spoken-subtitles-2.png │ │ └── x-circle.svg │ ├── index.html │ ├── js │ │ ├── bootstrap-4.3.1.js │ │ ├── channel.js │ │ ├── dvbi-mobile.js │ │ ├── epg.js │ │ ├── popper.min.js │ │ └── program.js │ ├── manifest.json │ ├── player.html │ └── styles │ │ ├── bootstrap-4.3.1.css │ │ ├── dvbi.css │ │ └── dvbi.scss ├── android_apk │ ├── .gitignore │ ├── AppIcon │ ├── CHANGELOG.md │ ├── HeaderImage │ ├── NotificationIcon │ ├── README.md │ ├── app │ │ ├── .gitignore │ │ ├── build.gradle │ │ ├── proguard-project.txt │ │ └── src │ │ │ ├── main │ │ │ ├── AndroidManifest.xml │ │ │ ├── assets │ │ │ │ ├── .gitignore │ │ │ │ ├── appConfig.example.json │ │ │ │ └── offline.html │ │ │ ├── ic_launcher-playstore.png │ │ │ ├── ic_launcher_dvb-playstore.png │ │ │ ├── java │ │ │ │ └── com │ │ │ │ │ └── dvb │ │ │ │ │ └── dvb_i │ │ │ │ │ ├── AndroidJsInterface.java │ │ │ │ │ ├── ConfigUtil.java │ │ │ │ │ ├── DvbiReferenceApplication.java │ │ │ │ │ ├── HtmlIntercept.java │ │ │ │ │ ├── MainActivity.java │ │ │ │ │ ├── UrlNavigation.java │ │ │ │ │ ├── WebChromeClientCustomPoster.java │ │ │ │ │ └── WebviewInterface.java │ │ │ └── res │ │ │ │ ├── drawable-xxxhdpi │ │ │ │ └── simple_border.xml │ │ │ │ ├── drawable │ │ │ │ ├── dvb_splash.png │ │ │ │ ├── focus_border.xml │ │ │ │ ├── ic_banner_dvb.png │ │ │ │ ├── ic_banner_dvb_foreground.xml │ │ │ │ ├── ic_banner_foreground_store.xml │ │ │ │ ├── ic_launcher_background.xml │ │ │ │ ├── ic_launcher_foreground.xml │ │ │ │ └── rounded_corners.xml │ │ │ │ ├── layout │ │ │ │ └── main_activity.xml │ │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_banner_dvb.xml │ │ │ │ ├── ic_launcher_dvb.xml │ │ │ │ └── ic_launcher_dvb_round.xml │ │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher_dvb.webp │ │ │ │ ├── ic_launcher_dvb_foreground.webp │ │ │ │ └── ic_launcher_dvb_round.webp │ │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher_dvb.webp │ │ │ │ ├── ic_launcher_dvb_foreground.webp │ │ │ │ └── ic_launcher_dvb_round.webp │ │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_banner_dvb.png │ │ │ │ ├── ic_launcher_dvb.webp │ │ │ │ ├── ic_launcher_dvb_foreground.webp │ │ │ │ └── ic_launcher_dvb_round.webp │ │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher_dvb.webp │ │ │ │ ├── ic_launcher_dvb_foreground.webp │ │ │ │ └── ic_launcher_dvb_round.webp │ │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher_dvb.webp │ │ │ │ ├── ic_launcher_dvb_foreground.webp │ │ │ │ └── ic_launcher_dvb_round.webp │ │ │ │ └── values │ │ │ │ ├── attrs.xml │ │ │ │ ├── ic_banner_dvb_background.xml │ │ │ │ ├── ic_launcher_dvb_background.xml │ │ │ │ ├── strings.xml │ │ │ │ └── styles.xml │ │ │ └── normal │ │ │ └── java │ │ │ └── com │ │ │ └── dvb │ │ │ └── dvb_i │ │ │ ├── LeanWebView.java │ │ │ ├── WebChromeCustomClient.java │ │ │ ├── WebViewConfiguration.java │ │ │ ├── WebkitCookieManagerProxy.java │ │ │ └── WebviewClient.java │ ├── build.gradle │ ├── constants.gradle │ ├── generate-app-icons.sh │ ├── generate-header-images.sh │ ├── generate-theme.js │ ├── generate-tinted-icons.sh │ ├── gradle.properties │ ├── gradle │ │ └── wrapper │ │ │ ├── gradle-wrapper.jar │ │ │ └── gradle-wrapper.properties │ ├── gradlew │ ├── gradlew.bat │ └── settings.gradle ├── channel-common.js ├── common.js ├── configuration.js ├── dvbi-common.js ├── hbbtv │ ├── CommonUI │ │ ├── bg_boxitem_image.png │ │ ├── bg_boxitem_info.png │ │ ├── bg_channel_info.png │ │ ├── bg_menu.png │ │ ├── commonui.css │ │ ├── dialog.css │ │ ├── dialog_checkmark.png │ │ ├── empty.png │ │ ├── icons.png │ │ ├── loading_anim.png │ │ ├── lock_green.png │ │ ├── lock_red.png │ │ ├── logo_dvbi_sofia.png │ │ ├── menu_arrow.png │ │ └── rating.png │ ├── alertDialog.js │ ├── buttonbar.js │ ├── dialog.js │ ├── epg │ │ ├── channel.js │ │ ├── epg.css │ │ ├── gridepg.js │ │ ├── images │ │ │ ├── bg_plain.png │ │ │ ├── bg_program_focused.png │ │ │ ├── bg_timeline.png │ │ │ ├── bg_verticalTimeLineContainer.png │ │ │ ├── logo.png │ │ │ └── up_down_arrows_epg.png │ │ ├── navigation.js │ │ ├── program.js │ │ └── scripts.js │ ├── index.html │ ├── launcher │ │ ├── box.js │ │ ├── channel.js │ │ ├── chinfo.css │ │ ├── images │ │ │ ├── bg_chinfo.png │ │ │ └── logo_dvb-i.png │ │ ├── menu.js │ │ ├── navi.css │ │ ├── navigation.js │ │ ├── program.js │ │ ├── settings.js │ │ ├── videoplayer_basic.js │ │ ├── videoplayer_html5.js │ │ └── videoplayer_mse-eme.js │ ├── main.js │ ├── opapp.aitx │ └── session.js ├── i18n │ ├── de.json │ ├── en.json │ ├── fi.json │ ├── i18n.js │ ├── it.json │ └── zh.json ├── icon_manager.js ├── index.html ├── isoduration.js ├── localstorage.js └── network.js ├── identifiers.js ├── index.html ├── jquery-3.7.1.min.js ├── linked_applications ├── android_drm_widevine.html ├── hbbtv_playready.html └── hbbtv_playready_aitx.php ├── namespaces.js ├── opapp_package.js ├── package-lock.json └── package.json /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/** 2 | opapp.pkg 3 | -------------------------------------------------------------------------------- /.jshintrc: -------------------------------------------------------------------------------- 1 | { 2 | "esversion":6, 3 | "-W069": false, /* ['xxxx'] is better written in dot notation. */ 4 | "-W107": false, /* Script URL. */ 5 | "-W027": false, /* unreachab;e 'break' after 'return' */ 6 | "-W014": false, /* Misleading line break before '||'; readers may interpret this as an expression boundary. */ 7 | "-W021": false /* Reassignment of 'showInfo', which is a function. Use 'var' or 'let' to declare bindings that may change. */ 8 | } -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | arrowParens: 'always', 3 | bracketSpacing: true, 4 | endOfLine: 'lf', 5 | htmlWhitespaceSensitivity: 'strict', 6 | printWidth: 120, 7 | proseWrap: 'never', 8 | quoteProps: 'as-needed', 9 | semi: true, 10 | singleQuote: false, 11 | tabWidth: 2, 12 | trailingComma: 'es5', 13 | useTabs: false, 14 | } 15 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | // See http://go.microsoft.com/fwlink/?LinkId=827846 3 | // for the documentation about the extensions.json format 4 | "recommendations": [ 5 | // Format-on-save with Prettier 6 | // https://github.com/prettier/prettier-vscode 7 | "esbenp.prettier-vscode" 8 | ] 9 | } 10 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | // === 3 | // Spacing 4 | // === 5 | 6 | "editor.insertSpaces": true, 7 | "editor.tabSize": 2, 8 | "editor.trimAutoWhitespace": true, 9 | "files.trimTrailingWhitespace": true, 10 | "files.eol": "\n", 11 | "files.insertFinalNewline": true, 12 | "files.trimFinalNewlines": true, 13 | 14 | // === 15 | // Files 16 | // === 17 | 18 | "files.exclude": { 19 | "**/*.log": true, 20 | "**/*.log*": true, 21 | "**/dist": true, 22 | "**/coverage": true 23 | }, 24 | "files.associations": { 25 | ".markdownlintrc": "jsonc", 26 | "string": "cpp" 27 | }, 28 | 29 | // === 30 | // Event Triggers 31 | // === 32 | 33 | "editor.formatOnSave": true, 34 | "editor.defaultFormatter": "esbenp.prettier-vscode", 35 | "editor.codeActionsOnSave": { 36 | "source.fixAll.stylelint": "explicit", 37 | "source.fixAll.markdownlint": "explicit" 38 | }, 39 | 40 | // === 41 | // HTML 42 | // === 43 | 44 | "html.format.enable": false, 45 | "emmet.triggerExpansionOnTab": true, 46 | 47 | // === 48 | // JS(ON) 49 | // === 50 | 51 | "javascript.format.enable": false, 52 | "json.format.enable": false, 53 | 54 | // === 55 | // CSS 56 | // === 57 | 58 | "stylelint.enable": true, 59 | "css.validate": false, 60 | "scss.validate": false, 61 | 62 | // === 63 | // MARKDOWN 64 | // === 65 | 66 | "[markdown]": { 67 | "editor.wordWrap": "wordWrapColumn", 68 | "editor.wordWrapColumn": 120 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /INSTALL-SERVER.md: -------------------------------------------------------------------------------- 1 | # Build a DVB-I Server 2 | (This guide assumes some Linux experience, exact system directories, package names and system maintenance commands may vary between Linux distributions) 3 | ## System libraries and modules 4 | ### Install latest PHP 8 (includes Apache 2) 5 | ``sudo apt install php`` 6 | 7 | ### Configure PHP to allow execution in user directories 8 | Edit ``/etc/apache2/mods-enabled/php7.4.conf`` to comment out the restrictions on PHP in user directories 9 | 10 | # To re-enable php in user directories comment the following lines 11 | # (from to .) Do NOT set it to On as it 12 | # prevents .htaccess files from disabling it. 13 | # 14 | # 15 | # php_admin_value engine Off 16 | # 17 | # 18 | 19 | 20 | ### Install the PHP SimpleXML library 21 | `sudo apt-get install php-xml` 22 | 23 | ### Restart apache 24 | `sudo /etc/init.d/apache2 restart` 25 | 26 | ## Install DVB-I Reference 27 | ### Load the reference client into the Apache root directory 28 | 29 | git clone https://github.com/DVBProject/DVB-I-Reference-Client ~/dvbi/ 30 | sudo ln -s ~/dvbi /var/www/html/MyDVBi 31 | 32 | Note that, you could also create a custom Apache site in `/etc/apache2/sites-available` and enable it with `a2ensite`. 33 | 34 | ### Update files to refer to local endpoints 35 | 36 | In `/var/www/html/frontend/configuration.js`, change the `INSTALL_LOCATION` to the fully qualified URL to your service list registry, i.e. 37 | `var INSTALL_LOCATION = "http://my-www-host/MyDVBi";`. Do not include the trailing slash. 38 | 39 | In `/var/www/html/backend/configuration.php`, change the `$install_location` to the same fully qualified URL to your service list registry, i.e. 40 | `$install_location = "http://my-www-host/MyDVBi";`. Do not include the trailing slash. 41 | 42 | 43 | 44 | 45 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 Sofia Digital, Ltd. 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /TODO.txt: -------------------------------------------------------------------------------- 1 | 2 | Backend 3 | - include the following in the service list editor 4 | ~ 5 | ~ 6 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-001.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | eng 7 | 8 | false 9 | 10 | 11 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-002.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | gsg 5 | false 6 | 7 | 8 | 9 | urn:hbbtv:appinformation:standardversion:hbbtv:1.6.1 10 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-003.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | fra 7 | 8 | true 9 | 10 | 11 | 12 | esp 13 | 14 | true 15 | 16 | 17 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-004.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | zh-hans 7 | 8 | false 9 | 10 | 11 | 12 | hun 13 | 14 | false 15 | 16 | 17 | 18 | sgn 19 | false 20 | 21 | 22 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-005.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | cat 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-006.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | dan 5 | 6 | true 7 | 8 | 9 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-007.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | nld 8 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-008.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-009.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-010.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | eng 8 | 9 | false 10 | 11 | 12 | 13 | 14 | 15 | fra 16 | 17 | false 18 | 19 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-011.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | eng 7 | 8 | false 9 | 10 | 11 | 12 | 13 | 14 | eng 15 | 16 | false 17 | 18 | 19 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-012.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | urn:cta:wave:appinformation:standardversion:cta5000e:2022 5 | 6 | 7 | gsg 8 | false 9 | 10 | 11 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-013.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | fra 7 | 8 | false 9 | 10 | 11 | 12 | urn:hbbtv:appinformation:standardversion:hbbtv:1.7.1 13 | urn:hbbtv:appinformation:optionalfeature:hbbtv:2decoder 14 | urn:hbbtv:appinformation:optionalfeature:hbbtv:graphics_02 15 | 16 | esp 17 | 18 | true 19 | 20 | 21 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-014.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | urn:cta:wave:appinformation:standardversion:cta5000e:2022 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /backend/accessibility_templates/aa-015.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | urn:cta:wave:appinformation:standardversion:cta5000f:2023 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /backend/channel_icons/chicon_akamai.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/channel_icons/chicon_akamai.png -------------------------------------------------------------------------------- /backend/channel_icons/chicon_br.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/channel_icons/chicon_br.png -------------------------------------------------------------------------------- /backend/channel_icons/chicon_br_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/channel_icons/chicon_br_1.png -------------------------------------------------------------------------------- /backend/channel_icons/chicon_br_hd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/channel_icons/chicon_br_hd.png -------------------------------------------------------------------------------- /backend/channel_icons/chicon_dvb_s.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/channel_icons/chicon_dvb_s.png -------------------------------------------------------------------------------- /backend/channel_icons/chicon_dvb_t.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/channel_icons/chicon_dvb_t.png -------------------------------------------------------------------------------- /backend/channel_icons/chicon_dvb_t2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/channel_icons/chicon_dvb_t2.png -------------------------------------------------------------------------------- /backend/channel_icons/chicon_harmonic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/channel_icons/chicon_harmonic.png -------------------------------------------------------------------------------- /backend/channel_icons/chicon_hopetv.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/channel_icons/chicon_hopetv.png -------------------------------------------------------------------------------- /backend/channel_icons/outofservice_example.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/channel_icons/outofservice_example.png -------------------------------------------------------------------------------- /backend/configuration.php: -------------------------------------------------------------------------------- 1 | 8 | -------------------------------------------------------------------------------- /backend/css/dvbi.css: -------------------------------------------------------------------------------- 1 | /* DVB-I Servicelist Generator */ 2 | /* 3 | sofia colors 4 | orange: #e47600 5 | light blue: #3996c9 6 | dark: #0b0b0b 7 | grey: #131313 8 | lightgrey: #848484 9 | darkblue: #011927 10 | */ 11 | html { 12 | height: 100vh; } 13 | 14 | body { 15 | display: flex; 16 | flex-direction: column; 17 | min-height: 100vh; } 18 | 19 | .main { 20 | flex: 1; } 21 | 22 | .service { 23 | border: 1px solid #848484; 24 | border-radius: 8px; 25 | margin-bottom: 2em; 26 | padding: 0.5em; 27 | box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.1); } 28 | .service .serviceinstance { 29 | border-top: 1px solid #848484; 30 | margin: 1em 0em 0em 0em; 31 | padding: 1em 0.5em; } 32 | 33 | #saved_servicelists .icon { 34 | width: 26px; 35 | height: 26px; } 36 | #saved_servicelists .btn:focus, #saved_servicelists .btn.focus { 37 | box-shadow: none; } 38 | 39 | .btn-outline-blue { 40 | border: 1px solid #3996c9; 41 | border-radius: 0px; 42 | color: #3996c9; 43 | -webkit-transition: all .3s; 44 | transition: all .3s; } 45 | .btn-outline-blue:hover { 46 | background-color: #3996c9; 47 | color: #fff; } 48 | 49 | .card { 50 | box-shadow: 0px 0px 35px rgba(0, 0, 0, 0.1); } 51 | 52 | .btn-orange { 53 | background-color: #e47600; 54 | border-color: #e47600; 55 | color: #fff; } 56 | .btn-orange:hover { 57 | background-color: #ff9018; 58 | color: #fff; } 59 | 60 | .footer { 61 | height: 15vh; 62 | background-color: #011927; 63 | color: #fff; } 64 | -------------------------------------------------------------------------------- /backend/css/dvbi.scss: -------------------------------------------------------------------------------- 1 | /* DVB-I Servicelist Generator */ 2 | /* 3 | sofia colors 4 | orange: #e47600 5 | light blue: #3996c9 6 | dark: #0b0b0b 7 | grey: #131313 8 | lightgrey: #848484 9 | darkblue: #011927 10 | */ 11 | $orange-color: #e47600; 12 | $blue-color: #3996c9; 13 | $darkblue-color: #011927; 14 | $lightgrey-color: #848484; 15 | 16 | html { 17 | height: 100vh; 18 | } 19 | body { 20 | display: flex; 21 | flex-direction: column; 22 | min-height: 100vh; 23 | } 24 | .main { 25 | flex: 1; 26 | } 27 | .service { 28 | border: 1px solid $lightgrey-color; 29 | border-radius: 8px; 30 | margin-bottom: 2em; 31 | padding: 0.5em; 32 | box-shadow: 0px 0px 15px rgba(0, 0, 0, 0.1); 33 | .serviceinstance { 34 | border-top: 1px solid $lightgrey-color; 35 | margin: 1em 0em 0em 0em; 36 | padding: 1em 0.5em; 37 | } 38 | } 39 | #saved_servicelists { 40 | .icon { 41 | width: 26px; 42 | height: 26px; 43 | } 44 | .btn:focus, 45 | .btn.focus { 46 | box-shadow: none; 47 | } 48 | } 49 | .btn-outline-blue { 50 | border: 1px solid $blue-color; 51 | border-radius: 0px; 52 | color: $blue-color; 53 | -webkit-transition: all 0.3s; 54 | transition: all 0.3s; 55 | &:hover { 56 | background-color: $blue-color; 57 | color: #fff; 58 | } 59 | } 60 | .card { 61 | box-shadow: 0px 0px 35px rgba(0, 0, 0, 0.1); 62 | } 63 | .btn-orange { 64 | background-color: $orange-color; 65 | border-color: $orange-color; 66 | color: #fff; 67 | &:hover { 68 | background-color: lighten($orange-color, 10%); 69 | color: #fff; 70 | } 71 | } 72 | 73 | .footer { 74 | height: 15vh; 75 | background-color: $darkblue-color; 76 | color: #fff; 77 | } 78 | -------------------------------------------------------------------------------- /backend/delete_servicelist.php: -------------------------------------------------------------------------------- 1 | 38 | -------------------------------------------------------------------------------- /backend/dvbi.css: -------------------------------------------------------------------------------- 1 | .service { 2 | border: 1px solid #000000; 3 | width: 500px; 4 | margin: 2px; 5 | 6 | } 7 | .serviceinstance { 8 | border: 1px solid #000000; 9 | width: 400px; 10 | margin: 2px; 11 | 12 | } 13 | -------------------------------------------------------------------------------- /backend/extended_program_information-template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Default Detailed Program Information 8 | 默认详细节目信息 9 | 01/01/2014 10 | This is the short description. (up to 90 characters) 11 | 这是简短的描述。 (最多 90 个字符) 12 | This is a medium length description that contains a brief summary of the program. (up to 250 characters) 13 | 这是一个中等长度的描述,包含程序的简短摘要。 (最多 250 个字符) 14 | This is the long description (up to 1200 characters) where we can write quite a bit of synopsis about the program and it's actors with quite an amount of detail. 15 | 这是很长的描述(最多 1200 个字符),我们可以在其中写出有关该节目及其演员的大量详细信息。 16 | FAMILY LIFE 17 | RELATIONSHIPS 18 | Critic’s Choice 19 | 20 | 21 | 15 22 | 23 | 24 | 25 | Contains strong language and flash photography 26 | 包含强烈的语言和闪光摄影 27 | 28 | 29 | 30 | Movieland Studios Limited 31 | 32 | 33 | 34 | Jeremy 35 | Brown 36 | 37 | 38 | 39 | 40 | William 41 | Johnson 42 | 43 | 44 | Billy 45 | Johns 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | https://img-ctv.mdata.co.uk/channel7/bargain_hunt.png 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | https://channel7.co.uk/ait.aitx?pid=b01myjsy 68 | 69 | https://channel7.co.uk/ait.aitx?template 70 | 71 | 73 | 75 | 76 | 77 | 78 | 576 79 | 512 80 | 16:9 81 | 82 | 83 | 84 | 85 | !!DATE_TEMPLATE!!T11:15:00Z 86 | PT45M 87 | 88 | 89 | 90 | 91 | -------------------------------------------------------------------------------- /backend/extended_program_information.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Bargain Hunt 8 | 讨价还价 9 | 01/01/2014 10 | The Bargain Hunt teams head to Staffordshire's County Showground. 11 | 谈判小组前往斯塔福德郡的县陈列室。 12 | The Bargain Hunt teams head to Staffordshire's County Showground, where both experts face double trouble. 13 | 讨价还价小组前往斯塔福德郡的县展示场,两位专家都在那里面临双重麻烦。 14 | The Bargain Hunt teams head to Staffordshire's County Showground, where both experts face double trouble. David Harper heads up two Toms for the red team, while twin sisters Elizabeth and Rachel are guided by Jonathan Pratt for the blue team. Tim Wonnacott travels to Bath to visit one of the city's greatest architectural delights. 15 | 讨价还价小组前往斯塔福德郡的县展示场,两位专家都在那里面临双重麻烦。 大卫哈珀带领红队的两个汤姆斯,而双胞胎姐妹伊丽莎白和雷切尔则由乔纳森普拉特带领蓝队。 蒂姆·沃纳科特 (Tim Wonnacott) 前往巴斯参观这座城市最伟大的建筑之一。 16 | FAMILY LIFE 17 | RELATIONSHIPS 18 | Critic’s Choice 19 | 20 | 21 | 15 22 | 23 | 24 | 25 | Contains strong language and flash photography 26 | 包含强烈的语言和闪光摄影 27 | 28 | 29 | 30 | ITV Studios Limited 31 | 32 | 33 | 34 | Jeremy 35 | Brown 36 | 37 | 38 | 39 | 40 | William 41 | Johnson 42 | 43 | 44 | Billy 45 | Johns 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | https://img-ctv.mdata.co.uk/channel7/bargain_hunt.png 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | https://channel7.co.uk/ait.aitx?pid=b01myjsy 65 | 66 | https://channel7.co.uk/ait.aitx?template 67 | 68 | 70 | 72 | 73 | 74 | 75 | 576 76 | 512 77 | 16:9 78 | 79 | 80 | 81 | 82 | 2013-09-25T11:15:00Z 83 | PT45M 84 | 85 | 86 | 87 | 88 | -------------------------------------------------------------------------------- /backend/icons/pencil.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /backend/icons/trash.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /backend/icons/window.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /backend/images/logo_dvb-i.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/images/logo_dvb-i.png -------------------------------------------------------------------------------- /backend/images/logo_sofiadigital.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/images/logo_sofiadigital.png -------------------------------------------------------------------------------- /backend/more_episodes.php: -------------------------------------------------------------------------------- 1 | 25 | -------------------------------------------------------------------------------- /backend/nownext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/backend/nownext.png -------------------------------------------------------------------------------- /backend/nownext.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | Bargain Hunt 10 | 讨价还价 11 | 01/01/2014 12 | The Bargain Hunt teams head to Staffordshire's County Showground. 13 | 谈判小组前往斯塔福德郡的县陈列室。 14 | The Bargain Hunt teams head to 15 | Staffordshire's County Showground, where both experts face double 16 | trouble. 17 | 讨价还价小组前往斯塔福德郡的县展示场,两位专家都在那里面临双重麻烦。 18 | 19 | 20 | 15 21 | 22 | 23 | 24 | Contains strong language and flash photography 25 | 包含强烈的语言和闪光摄影 26 | 27 | 28 | 29 | 30 | INSTALL~~LOCATION/backend/nownext.png 31 | 32 | 33 | 34 | 35 | 36 | 37 | BBC News at One 38 | The latest national and international 39 | news stories from the BBC News team, followed by weather 40 | 41 | 42 | 0 43 | 44 | 45 | 47 | Contains scenes of violence and strong language. 48 | 包含强烈的语言和闪光摄影 49 | 50 | 51 | 52 | 53 | INSTALL~~LOCATION/backend/nownext.png 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 2013-09-25T11:15:00Z 64 | PT45M 65 | 66 | 67 | 68 | 2013-09-25T12:00:00Z 69 | PT30M 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /backend/program_information.php: -------------------------------------------------------------------------------- 1 | "; 22 | $random_accessibilility .= file_get_contents($aa_template); 23 | 24 | $programInf =str_replace("",$random_accessibilility,$programInf); 25 | 26 | echo $programInf; 27 | ?> 28 | -------------------------------------------------------------------------------- /backend/program_information_template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | Bargain Hunt 4 | 讨价还价 5 | 01/01/2014 6 | The Bargain Hunt teams head to Staffordshire's County Showground. 7 | 谈判小组前往斯塔福德郡的县陈列室。 8 | The Bargain Hunt teams head to Staffordshire's County Showground, where both experts face double 9 | trouble. 10 | 讨价还价小组前往斯塔福德郡的县展示场,两位专家都在那里面临双重麻烦。 11 | 12 | 13 | 15 14 | 15 | 16 | 17 | Contains strong language and flash photography 18 | 包含强烈的语言和闪光摄影 19 | 20 | 21 | 22 | 23 | INSTALL~~LOCATION/backend/nownext.png 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | -------------------------------------------------------------------------------- /backend/saved_lists.php: -------------------------------------------------------------------------------- 1 | 5 | -------------------------------------------------------------------------------- /backend/schedule_event_template.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | START_TIME_TEMPLATE 4 | DURATION_TEMPLATE 5 | 6 | -------------------------------------------------------------------------------- /backend/schedule_template.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb-i-refrecenceapp,2020_Drm-4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | FTA program 8 | Live AAC + AVC + clear + ads inserted via AWS MT by Unified Streaming 9 | 10 | 11 | 15 12 | 13 | 14 | 15 | Contains strong language and flash photography 16 | 包含强烈的语言和闪光摄影 17 | 18 | 19 | 20 | 21 | 22 | Playready DRM protected program 23 | Live AAC + AVC + clear + ads inserted via AWS MT by Unified Streaming 24 | 25 | 26 | 15 27 | 28 | 29 | 30 | Contains strong language and flash photography 31 | 包含强烈的语言和闪光摄影 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | DATE_TEMPLATET00:00:00Z 41 | PT12H 42 | 43 | 44 | 45 | 46 | drm-cp-1 47 | 48 | DATE_TEMPLATET12:00:00Z 49 | PT12H 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb-i-refrecenceapp,2020_Drm-5.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | FTA program 8 | Live AAC + AVC + clear + ads inserted via AWS MT by Unified Streaming 9 | 10 | 11 | 15 12 | 13 | 14 | 15 | Contains strong language and flash photography 16 | 包含强烈的语言和闪光摄影 17 | 18 | 19 | 20 | 21 | 22 | Widevine DRM protected program 23 | Live AAC + AVC + clear + ads inserted via AWS MT by Unified Streaming 24 | 25 | 26 | 15 27 | 28 | 29 | 30 | Contains strong language and flash photography 31 | 包含强烈的语言和闪光摄影 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | drm-cp-2 42 | 43 | DATE_TEMPLATET00:00:00Z 44 | PT12H 45 | 46 | 47 | 48 | DATE_TEMPLATET12:00:00Z 49 | PT12H 50 | 51 | 52 | 53 | 54 | 55 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_AKAMAI-LL.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Test stream by akamai chunked segment, $number, SegTemp no DVB URN, ffmpeg 8 | Test stream by akamai chunked segment, $number, SegTemp no DVB URN, ffmpeg 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_CMAF-1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Tears of steel DASH HEVC only 8 | Tears of steel DASH HEVC only by MPEG 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_CMAF-2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Tears of steel DASH with ttml + mp4 subtitles 8 | Tears of steel DASH with ttml + mp4 subtitles by MPEG 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_CMAF-3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Tears of steel DASH with vtt + mp4 subtitles 8 | Tears of steel DASH with vtt + mp4 subtitles by MPEG 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_DASHIF-LL.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Low latency test stream by DASH-IF livesim (livesim) 8 | Low latency test stream by DASH-IF livesim (livesim) by DASH Industry Forum 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_DOLBY-HDR.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | PQ10 transport stream with HDR DM using 2094-10 SEI messages Version provided by Dolby. THIS FILE HAS NOT BEEN VALIDATED OFFICIALLY BY DVB! 8 | PQ10 transport stream with HDR DM using 2094-10 SEI messages Version provided by Dolby. THIS FILE HAS NOT BEEN VALIDATED OFFICIALLY BY DVB! 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_HARMONIC-LL.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Test stream by harmonic short segment, $Number$, SegTemp, no DVB urn, no service description 8 | Test stream by harmonic short segment, $Number$, SegTemp, no DVB urn, no service description 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_PHILIPS-HDR.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | PQ10 transport stream with HDR DM using SL-HDR2 SEI messages Version provided by Philips. THIS FILE HAS NOT BEEN VALIDATED OFFICIALLY BY DVB! 8 | PQ10 transport stream with HDR DM using SL-HDR2 SEI messages Version provided by Philips. THIS FILE HAS NOT BEEN VALIDATED OFFICIALLY BY DVB! 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_SES-HDR-1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | PQ10 transport stream with HDR DM using SL-HDR2 SEI messages switching on - off - on in 1 minute sections Version provided by SES. THIS FILE HAS NOT BEEN VALIDATED OFFICIALLY BY DVB! 8 | PQ10 transport stream with HDR DM using SL-HDR2 SEI messages switching on - off - on in 1 minute sections Version provided by SES. THIS FILE HAS NOT BEEN VALIDATED OFFICIALLY BY DVB! 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_SES-HDR-2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | PQ10 transport stream with HDR DM using 2094-10 SEI messages switching on - off - on in 1 minute sections Version provided by SES. THIS FILE HAS NOT BEEN VALIDATED OFFICIALLY BY DVB! 8 | PQ10 transport stream with HDR DM using 2094-10 SEI messages switching on - off - on in 1 minute sections Version provided by SES. THIS FILE HAS NOT BEEN VALIDATED OFFICIALLY BY DVB! 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_UNIFIED-LL.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Test stream by unified streaming Short segment, service Description, segment Timeline $Time$, unified origin 8 | Test stream by unified streaming Short segment, service Description, segment Timeline $Time$, unified origin 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_Unified-0.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Live Clear AVC + AAC 8 | Live Clear AVC + AAC by Unified Streaming 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_Unified-1.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Live 'cbcs' AVC + AAC 8 | Live 'cbcs' AVC + AAC by Unified Streaming 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_Unified-2.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ToS Live Clear AVC + AAC + WVTT + TTML 8 | ToS Live Clear AVC + AAC + WVTT + TTML Unified Streaming 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_Unified-3.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Live 'cbcs' AVC + AAC, ad periods in clear 8 | Live 'cbcs' AVC + AAC, ad periods in clear by Unified Streaming 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_Unified-4.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | ToS Live Clear AVC + AAC + WVTT + TTML, ads without subtitles 8 | ToS Live Clear AVC + AAC + WVTT + TTML, ads without subtitlesby Unified Streaming 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_Unified-7.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Live AAC + AVC ads inserted 8 | Live AAC + AVC ads inserted by Unified Streaming 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_Unified-8.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Live AAC + AVC + 'cbcs' + ads inserted 8 | Live AAC + AVC + 'cbcs' + ads inserted by Unified Streaming 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/schedule_templates/tag_dvb.org,2020_Unified-mt.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Live AAC + AVC + clear + ads inserted via AWS MT 8 | Live AAC + AVC + clear + ads inserted via AWS MT by Unified Streaming 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | DATE_TEMPLATET00:00:00Z 18 | PT12H 19 | 20 | 21 | 22 | DATE_TEMPLATET12:00:00Z 23 | PT12H 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /backend/servicelists/.gitignore: -------------------------------------------------------------------------------- 1 | ** 2 | !.gitignore 3 | -------------------------------------------------------------------------------- /backend/servicelists/advanced_codecs.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | Advanced codecs Service list 6 | DVB 7 | 8 | 9 | 10 | 11 | 12 | 13 | tag:dvb.org,2021:advsid1 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | https://d311iqjvb3q514.cloudfront.net/dolbyac4/manifest.mpd 24 | 25 | 26 | 27 | HEVC UHD video + AC4 audio 28 | Dolby 29 | 30 | 31 | 32 | -------------------------------------------------------------------------------- /backend/servicelists/example_availability.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | DVB-I Reference app availability example 7 | DVB 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | DVB-I Reference Application 16 | 17 | INSTALL~~LOCATION/backend/schedule.php 18 | 19 | 20 | INSTALL~~LOCATION/backend/program_information.php 21 | 22 | 23 | INSTALL~~LOCATION/backend/more_episodes.php 24 | 25 | 26 | 27 | tag:dvb.org,2020:rev1sid1 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | https://refapp.hbbtv.org/livesim/02_llamanofragv1/manifest.mpd 37 | 38 | 39 | 40 | Not available service 41 | Ei saatavilla palvelu 42 | 没有可用的服务 43 | DVB 44 | 45 | 46 | 47 | INSTALL~~LOCATION/backend/channel_icons/outofservice_example.png 48 | 49 | 50 | 51 | 52 | 53 | tag:dvb.org,2020:rev1sid2 54 | 55 | 56 | 57 | https://refapp.hbbtv.org/livesim/02_llamanofragv1/manifest.mpd 58 | 59 | 60 | 61 | Available service 62 | Saatavilla palvelu 63 | 可用服务 64 | DVB 65 | 66 | 67 | 68 | -------------------------------------------------------------------------------- /backend/servicelists/schemas/dvbi_service_list_discovery_v1.6.xsd: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | -------------------------------------------------------------------------------- /backend/upload_servicelist.php: -------------------------------------------------------------------------------- 1 | preserveWhiteSpace = false; 32 | $dom->formatOutput = true; 33 | // End initial block 34 | 35 | $dom->loadXML($data); 36 | $out = $dom->saveXML(); 37 | 38 | $ret = @file_put_contents($target, $out,LOCK_EX); 39 | if($ret === false) { 40 | http_response_code (400); 41 | echo('There was an error writing this file'); 42 | } 43 | } 44 | else { 45 | http_response_code (400); 46 | echo('Error saving servicelist!'); 47 | } 48 | ?> 49 | -------------------------------------------------------------------------------- /frontend/android/images/License.txt: -------------------------------------------------------------------------------- 1 | License 2 | 3 | noun-subtitles-78795.png 4 | Subtitles by Vicons Design from Noun Project (CC BY 3.0) 5 | 6 | noun-audio-description-4258567.png 7 | audio description by Fran Couto from Noun Project (CC BY 3.0) 8 | 9 | noun-speaking-5005852.png 10 | speaking by Didan Farhan from Noun Project (CC BY 3.0) 11 | 12 | noun-text-to-speech-5024773.png 13 | Text to speech by Daniel T. from Noun Project (CC BY 3.0) 14 | 15 | -------------------------------------------------------------------------------- /frontend/android/images/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/apple-touch-icon.png -------------------------------------------------------------------------------- /frontend/android/images/arrow-left-short.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/android/images/bg_chinfo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/bg_chinfo.png -------------------------------------------------------------------------------- /frontend/android/images/bg_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/bg_info.png -------------------------------------------------------------------------------- /frontend/android/images/call-to-action.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/call-to-action.png -------------------------------------------------------------------------------- /frontend/android/images/chevron-left.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /frontend/android/images/chevron-right.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /frontend/android/images/closed-captioning.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /frontend/android/images/contrast.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/contrast.png -------------------------------------------------------------------------------- /frontend/android/images/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/empty.png -------------------------------------------------------------------------------- /frontend/android/images/gear.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /frontend/android/images/icons-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/icons-128.png -------------------------------------------------------------------------------- /frontend/android/images/icons-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/icons-512.png -------------------------------------------------------------------------------- /frontend/android/images/landingpage_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/landingpage_banner.png -------------------------------------------------------------------------------- /frontend/android/images/landingpage_ui.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/landingpage_ui.png -------------------------------------------------------------------------------- /frontend/android/images/lock.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | -------------------------------------------------------------------------------- /frontend/android/images/logo_dvbi_sofia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/logo_dvbi_sofia.png -------------------------------------------------------------------------------- /frontend/android/images/magnifier-glass-zoom-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/magnifier-glass-zoom-icon.png -------------------------------------------------------------------------------- /frontend/android/images/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Video", 3 | "name": "Video player for mobile devices", 4 | "icons": [ 5 | { 6 | "src": "images/icons-128.png", 7 | "type": "image/png", 8 | "sizes": "192x192" 9 | }, 10 | { 11 | "src": "images/icons-512.png", 12 | "type": "image/png", 13 | "sizes": "512x512" 14 | } 15 | ], 16 | "start_url": "index.html", 17 | "background_color": "#000000", 18 | "display": "fullscreen", 19 | "orientation": "landscape", 20 | "scope": "", 21 | "theme_color": "#0098f4" 22 | } -------------------------------------------------------------------------------- /frontend/android/images/mixer-vertical.svg: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | -------------------------------------------------------------------------------- /frontend/android/images/noun-audio-description-4258567-trim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/noun-audio-description-4258567-trim.png -------------------------------------------------------------------------------- /frontend/android/images/noun-audio-description-4258567.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/noun-audio-description-4258567.png -------------------------------------------------------------------------------- /frontend/android/images/noun-speaking-5005852-trim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/noun-speaking-5005852-trim.png -------------------------------------------------------------------------------- /frontend/android/images/noun-speaking-5005852.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/noun-speaking-5005852.png -------------------------------------------------------------------------------- /frontend/android/images/noun-subtitles-78795-trim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/noun-subtitles-78795-trim.png -------------------------------------------------------------------------------- /frontend/android/images/noun-subtitles-78795.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/noun-subtitles-78795.png -------------------------------------------------------------------------------- /frontend/android/images/noun-text-to-speech-5024773-trim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/noun-text-to-speech-5024773-trim.png -------------------------------------------------------------------------------- /frontend/android/images/noun-text-to-speech-5024773.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/noun-text-to-speech-5024773.png -------------------------------------------------------------------------------- /frontend/android/images/ons-icon-bsl-large-mono-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/ons-icon-bsl-large-mono-2.png -------------------------------------------------------------------------------- /frontend/android/images/splash-128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/splash-128.png -------------------------------------------------------------------------------- /frontend/android/images/splash-512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/splash-512.png -------------------------------------------------------------------------------- /frontend/android/images/spoken-subtitles-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android/images/spoken-subtitles-2.png -------------------------------------------------------------------------------- /frontend/android/images/x-circle.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/android/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | DVB-I RefApp 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 |

 

28 |
29 | 30 |
31 |
32 |
33 |

Add DVB-I RefApp to your Home screen:

34 |
    35 |
  • Tap the menu icon
  • 36 |
  • Tap Add to homescreen.
  • 37 |
38 |
39 |
40 | dvb-i 41 |
42 |
43 |
44 | 45 | 46 | 47 | 48 | -------------------------------------------------------------------------------- /frontend/android/js/epg.js: -------------------------------------------------------------------------------- 1 | function EPG(channels) { 2 | this.channels = channels; 3 | for (var i = 0; i < this.channels.length; i++) { 4 | this.channels[i].epg = this; 5 | } 6 | this.displayIndex = 0; 7 | var date = new Date(); 8 | date.setHours(0, 0, 0, 0); 9 | this.start = Math.round(date.getTime() / 1000); 10 | this.end = this.start + 24 * 60 * 60; 11 | this.open = false; 12 | } 13 | 14 | EPG.prototype.populate = function (start, end) { 15 | var self = this; 16 | var count = self.channels.length; 17 | if (self.element == null) { 18 | self.element = document.createElement("div"); 19 | self.element.addClass("row epgchannels"); 20 | } else { 21 | $(self.element).empty(); 22 | } 23 | var serviceIndex = self.displayIndex; 24 | for (var i = serviceIndex; i < serviceIndex + 3 && i < self.channels.length; i++) { 25 | self.element.appendChild(self.channels[i].showEPG(start, end)); 26 | } 27 | 28 | return self.element; 29 | }; 30 | 31 | EPG.prototype.showChannel = function (service, start, end) { 32 | var serviceIndex = 0; 33 | if (service != null) { 34 | for (var i = 0; i < this.channels.length; i++) { 35 | if (this.channels[i].getServiceRef() === service.getServiceRef()) { 36 | serviceIndex = i; 37 | break; 38 | } 39 | } 40 | } 41 | this.displayIndex = Math.min(serviceIndex, this.channels.length - 3); 42 | if (this.displayIndex < 0) { 43 | this.displayIndex = 0; 44 | } 45 | return this.populate(start, end); 46 | }; 47 | 48 | EPG.prototype.showNextChannel = function (start, end) { 49 | if (this.displayIndex < this.channels.length - 3) { 50 | this.displayIndex++; 51 | this.populate(); 52 | } 53 | return this.displayIndex < this.channels.length - 3; 54 | }; 55 | 56 | EPG.prototype.showPreviousChannel = function (start, end) { 57 | if (this.displayIndex > 0) { 58 | this.displayIndex--; 59 | this.populate(); 60 | } 61 | return this.displayIndex > 0; 62 | }; 63 | 64 | EPG.prototype.showNextDay = function () { 65 | for (var i = 0; i < this.channels.length; i++) { 66 | this.channels[i].programs = null; 67 | } 68 | this.start = this.start + 24 * 60 * 60; 69 | this.end = this.start + 24 * 60 * 60; 70 | this.populate(this.start, this.start + 24 * 60 * 60); 71 | }; 72 | 73 | EPG.prototype.showPreviousDay = function () { 74 | for (var i = 0; i < this.channels.length; i++) { 75 | this.channels[i].programs = null; 76 | } 77 | this.start = this.start - 24 * 60 * 60; 78 | this.end = this.start + 24 * 60 * 60; 79 | this.populate(); 80 | }; 81 | 82 | function showNext() { 83 | if (!epg.showNextChannel()) { 84 | if (!$("#next_channel").hasClass("end")) { 85 | $("#next_channel").addClass("end"); 86 | } 87 | } else if ($("#previous_channel").hasClass("end")) { 88 | $("#previous_channel").removeClass("end"); 89 | } 90 | } 91 | 92 | function showPrevious() { 93 | if (!epg.showPreviousChannel()) { 94 | if (!$("#previous_channel").hasClass("end")) { 95 | $("#previous_channel").addClass("end"); 96 | } 97 | } else if ($("#next_channel").hasClass("end")) { 98 | $("#next_channel").removeClass("end"); 99 | } 100 | } 101 | 102 | function nextDay() { 103 | epg.showNextDay(); 104 | var epgdate = new Date(epg.start * 1000); 105 | $("#epg_date").text(epgdate.getDate() + "." + (epgdate.getMonth() + 1) + "."); 106 | } 107 | 108 | function previousDay() { 109 | epg.showPreviousDay(); 110 | var epgdate = new Date(epg.start * 1000); 111 | $("#epg_date").text(epgdate.getDate() + "." + (epgdate.getMonth() + 1) + "."); 112 | } 113 | -------------------------------------------------------------------------------- /frontend/android/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "DVB-I RefApp", 3 | "name": "DVB-I RefApp", 4 | "icons": [ 5 | { 6 | "src": "images/icons-128.png", 7 | "type": "image/png", 8 | "sizes": "192x192" 9 | }, 10 | { 11 | "src": "images/icons-512.png", 12 | "type": "image/png", 13 | "sizes": "512x512" 14 | } 15 | ], 16 | "start_url": "player.html", 17 | "background_color": "#000000", 18 | "display": "fullscreen", 19 | "orientation": "landscape", 20 | "scope": "", 21 | "theme_color": "#0098f4" 22 | } -------------------------------------------------------------------------------- /frontend/android_apk/.gitignore: -------------------------------------------------------------------------------- 1 | *~ 2 | # Gradle files 3 | .gradle/ 4 | build/ 5 | 6 | # Local configuration file (sdk path, etc) 7 | local.properties 8 | 9 | # User properties 10 | user.properties 11 | 12 | # Log/OS Files 13 | *.log 14 | 15 | # Android Studio generated files and folders 16 | captures/ 17 | .externalNativeBuild/ 18 | .cxx/ 19 | *.apk 20 | output.json 21 | output-metadata.json 22 | 23 | # IntelliJ 24 | *.iml 25 | .idea/ 26 | 27 | # Keystore files 28 | *.jks 29 | *.keystore 30 | 31 | # Google Services (e.g. APIs or Firebase) 32 | google-services.json 33 | 34 | # Android Profiling 35 | *.hprof 36 | 37 | .DS_Store 38 | *.keystore 39 | user.properties 40 | app/normal/ 41 | appConfig.json 42 | -------------------------------------------------------------------------------- /frontend/android_apk/AppIcon: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/AppIcon -------------------------------------------------------------------------------- /frontend/android_apk/CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## 2014-01-04 4 | 5 | - Fix a crash on reload with no page loaded. 6 | 7 | ## 2015-01-02 8 | 9 | - Update to latest gradle and build tools versions, making the project compatible with Android Studio 1.0. 10 | - Fix bugs related to syncing of tabs with sidebar menu. 11 | 12 | ## 2014-12-23 13 | 14 | - Allow setting of viewport while preserving ability to zoom. 15 | - Allow dynamic config of navigation title image URLs. 16 | - Various bug fixes involving javascript after page load, and tab coloring, tab animations, and a crash on application resume. 17 | 18 | ## 2014-12-22 19 | 20 | - Fix various threading bugs where UI methods were called from non-UI threads. 21 | 22 | ## 2014-12-05 23 | 24 | - Support showing the navigation title image on specific URLs. 25 | 26 | ## 2014-12-03 27 | 28 | - Support customizing user agent per URL. 29 | - Add color styling options for tabs. 30 | 31 | ## 2014-11-30 32 | 33 | - New tabs with better material design and animations. 34 | - Fix some automatic icon generation scripts. 35 | 36 | ## 2014-11-26 37 | 38 | - Fix a crash involving webview pools. 39 | 40 | ## 2014-11-25 41 | 42 | - Add support for custom actions in action bar. 43 | -------------------------------------------------------------------------------- /frontend/android_apk/HeaderImage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/HeaderImage -------------------------------------------------------------------------------- /frontend/android_apk/NotificationIcon: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/NotificationIcon -------------------------------------------------------------------------------- /frontend/android_apk/README.md: -------------------------------------------------------------------------------- 1 | # dvb-i-demo-android 2 | 3 | Android layer for DVB-I reference application. Android - javascript interface for DVB-I NIP implementation 4 | 5 | The APK provides a WebView for the Android version of the reference app 6 | 7 | ## DVB-I NIP implementation 8 | 9 | Android layer provides the following Javascript API for DVB-I NIP service discovery: 10 | 11 | - `android_interface.startNIPDiscovery()` Starts the DVB-I service discovery process. Return value: void 12 | - `android_interface.getServices()` Returns the found services as a string containing a JSON array: 13 | 14 | ```json 15 | [ 16 | { 17 | "service_name": "my-gw", 18 | "dvbi_sl": "https://dvb-i-reference.dvb.org/client/backend/servicelist.php?list=example.xml" 19 | }, 20 | { 21 | "service_name": "example_gw", 22 | "dvbi_sep": "https://dvb-i-reference.dvb.org/client/backend/servicelist_registry.php", 23 | "orb_pos_A": "1", 24 | "orb_pos_B": "2", 25 | "orb_pos_C": "3", 26 | "orb_pos_D": "3" 27 | } 28 | ] 29 | ``` 30 | 31 | - `android_interface.getTest()` Test funtion to determine if the android API is working. Returns string: `Android JS interface test success` 32 | 33 | When the android application discovers a service it will call a global javascript function if it is defined: `window.nip.serviceDiscovered(service)`. The service paramer is an object, same as the objects returned in the getServices() return value array: `{"dvbi_sl":"https://dvb-i-reference.dvb.org/client/backend/servicelist.php?list=example.xml"}` 34 | 35 | ## Building 36 | 37 | Project can be build using the Android Studio. Open the android_apk directory in the Android studio and build the project from the Build menu. 38 | -------------------------------------------------------------------------------- /frontend/android_apk/app/.gitignore: -------------------------------------------------------------------------------- 1 | build/ 2 | -------------------------------------------------------------------------------- /frontend/android_apk/app/build.gradle: -------------------------------------------------------------------------------- 1 | apply plugin: 'com.android.application' 2 | apply from: '../constants.gradle' 3 | 4 | tasks.register('copyFiles', Copy) { 5 | from new File("$projectDir/../../../") 6 | into "${layout.projectDirectory}/src/main/assets/" 7 | include 'identifiers.js' 8 | include 'jquery-3.7.1.min.js' 9 | include 'namespaces.js' 10 | include 'frontend/i18n/**' 11 | include 'frontend/*.js' 12 | include 'frontend/android/**' 13 | } 14 | android { 15 | compileSdkVersion 33 16 | 17 | defaultConfig { 18 | minSdkVersion 24 19 | targetSdkVersion 33 20 | applicationId "com.dvb.dvb_i.DvbiReferenceApplication" 21 | versionCode 38 22 | versionName "38" 23 | 24 | manifestPlaceholders = [manifestApplicationId: "${applicationId}"] 25 | setProperty("archivesBaseName", applicationId + "-v" + versionCode) 26 | } 27 | 28 | compileOptions { 29 | sourceCompatibility JavaVersion.VERSION_1_8 30 | targetCompatibility JavaVersion.VERSION_1_8 31 | } 32 | 33 | buildTypes { 34 | debug { 35 | applicationIdSuffix ".debug" 36 | } 37 | release { 38 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-project.txt' 39 | zipAlignEnabled true 40 | } 41 | } 42 | 43 | flavorDimensions "webview" 44 | 45 | productFlavors { 46 | normal { 47 | dimension "webview" 48 | } 49 | } 50 | lint { 51 | abortOnError true 52 | checkReleaseBuilds true 53 | } 54 | 55 | namespace 'com.dvb.dvb_i' 56 | } 57 | 58 | preBuild.dependsOn(copyFiles) 59 | 60 | dependencies { 61 | implementation 'androidx.appcompat:appcompat:1.3.1' 62 | implementation 'com.google.android.gms:play-services-gcm:17.0.0' 63 | implementation 'com.google.code.gson:gson:2.8.7' 64 | 65 | implementation 'androidx.tvprovider:tvprovider:1.1.0-alpha01' 66 | 67 | implementation("com.squareup.okhttp3:okhttp:4.9.0") 68 | implementation("androidx.security:security-crypto:1.1.0-alpha03") 69 | implementation 'androidx.recyclerview:recyclerview:' + project.ext.jetpackVersion // (344 KB) https://mvnrepository.com/artifact/androidx.recyclerview/recyclerview?repo=google 70 | 71 | implementation "androidx.constraintlayout:constraintlayout:2.1.0" 72 | implementation "androidx.tvprovider:tvprovider:" 73 | implementation 'pub.devrel:easypermissions:3.0.0' 74 | 75 | // Minimal version for suitest is 25.2.0, you can use any higher. 76 | debugImplementation 'org.java-websocket:Java-WebSocket:1.5.1' 77 | } -------------------------------------------------------------------------------- /frontend/android_apk/app/proguard-project.txt: -------------------------------------------------------------------------------- 1 | # To enable ProGuard in your project, edit project.properties 2 | # to define the proguard.config property as described in that file. 3 | # 4 | # Add project specific ProGuard rules here. 5 | # By default, the flags in this file are appended to flags specified 6 | # in ${sdk.dir}/tools/proguard/proguard-android.txt 7 | # You can edit the include path and order by changing the ProGuard 8 | # include property in project.properties. 9 | # 10 | # For more details, see 11 | # http://developer.android.com/guide/developing/tools/proguard.html 12 | 13 | # Add any project specific keep options here: 14 | 15 | # If your project uses WebView with JS, uncomment the following 16 | # and specify the fully qualified class name to the JavaScript interface 17 | # class: 18 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 19 | # public *; 20 | #} 21 | 22 | # webview interfaces 23 | 24 | -keepattributes JavascriptInterface 25 | 26 | -keepclassmembers class com.dvb.dvb_i.AndroidJsInterface { 27 | public *; 28 | } 29 | 30 | # stuff for google play services 31 | -keep class * extends java.util.ListResourceBundle { 32 | protected Object[][] getContents(); 33 | } 34 | 35 | -keep public class com.google.android.gms.common.internal.safeparcel.SafeParcelable { 36 | public static final *** NULL; 37 | } 38 | 39 | -keepnames @com.google.android.gms.common.annotation.KeepName class * 40 | -keepclassmembernames class * { 41 | @com.google.android.gms.common.annotation.KeepName *; 42 | } 43 | 44 | -keepnames class * implements android.os.Parcelable { 45 | public static final ** CREATOR; 46 | } 47 | 48 | # Google Cloud Messaging 49 | -keep class com.google.android.gms.** { *; } 50 | -keep interface com.google.android.gms.** { *; } 51 | 52 | # appcompat library 53 | -dontwarn android.support.v4.** 54 | -keep class android.support.v4.** { *; } 55 | -keep interface android.support.v4.** { *; } 56 | -dontwarn android.support.v7.** 57 | -keep class android.support.v7.** { *; } 58 | -keep interface android.support.v7.** { *; } 59 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 8 | 10 | 12 | 14 | 16 | 18 | 20 | 22 | 23 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 44 | 45 | 47 | 48 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/assets/.gitignore: -------------------------------------------------------------------------------- 1 | frontend/** 2 | identifiers.js 3 | jquery-3.7.1.min.js 4 | namespaces.js 5 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/assets/appConfig.example.json: -------------------------------------------------------------------------------- 1 | { 2 | "_COMMENT": "Please create matching appConfig.json file - this is only example", 3 | "initialUrl": "file:///android_asset/frontend/android/player.html", 4 | "client": "dvb" 5 | } -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/assets/offline.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | DVB-I Demo 5 | 13 | 14 | 15 |
16 | 17 | 18 |
19 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/ic_launcher-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/ic_launcher-playstore.png -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/ic_launcher_dvb-playstore.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/ic_launcher_dvb-playstore.png -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/java/com/dvb/dvb_i/ConfigUtil.java: -------------------------------------------------------------------------------- 1 | package com.dvb.dvb_i; 2 | 3 | import android.app.Activity; 4 | 5 | import org.json.JSONException; 6 | import org.json.JSONObject; 7 | 8 | import java.io.IOException; 9 | import java.io.InputStream; 10 | 11 | public class ConfigUtil { 12 | 13 | public ConfigUtil() { 14 | } 15 | 16 | public static AppConfig getAppConfig(Activity activity) { 17 | String json = null; 18 | try { 19 | InputStream is = activity.getAssets().open("appConfig.json"); 20 | int size = is.available(); 21 | byte[] buffer = new byte[size]; 22 | is.read(buffer); 23 | is.close(); 24 | json = new String(buffer, "UTF-8"); 25 | JSONObject jsonObject = new JSONObject(json); 26 | String initialUrl = jsonObject.getString("initialUrl"); 27 | String client = jsonObject.getString("client"); 28 | return new AppConfig(initialUrl, client); 29 | } catch (IOException | JSONException ex) { 30 | ex.printStackTrace(); 31 | return null; 32 | } 33 | } 34 | 35 | public static class AppConfig { 36 | private String initialUrl; 37 | private String client; 38 | 39 | public AppConfig(String initialUrl, String client) { 40 | this.initialUrl = initialUrl; 41 | this.client = client; 42 | } 43 | 44 | public String getInitialUrl() { 45 | return initialUrl; 46 | } 47 | 48 | public String getClient() { 49 | return client; 50 | } 51 | 52 | } 53 | } 54 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/java/com/dvb/dvb_i/DvbiReferenceApplication.java: -------------------------------------------------------------------------------- 1 | package com.dvb.dvb_i; 2 | 3 | import android.app.Application; 4 | import android.os.Message; 5 | import android.webkit.ValueCallback; 6 | 7 | public class DvbiReferenceApplication extends Application { 8 | 9 | private Message webviewMessage; 10 | private ValueCallback webviewValueCallback; 11 | 12 | @Override 13 | public void onCreate() { 14 | super.onCreate(); 15 | } 16 | 17 | public Message getWebviewMessage() { 18 | return webviewMessage; 19 | } 20 | 21 | public void setWebviewMessage(Message webviewMessage) { 22 | this.webviewMessage = webviewMessage; 23 | } 24 | 25 | // Needed for Crosswalk 26 | @SuppressWarnings("unused") 27 | public ValueCallback getWebviewValueCallback() { 28 | return webviewValueCallback; 29 | } 30 | 31 | public void setWebviewValueCallback(ValueCallback webviewValueCallback) { 32 | this.webviewValueCallback = webviewValueCallback; 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/java/com/dvb/dvb_i/HtmlIntercept.java: -------------------------------------------------------------------------------- 1 | package com.dvb.dvb_i; 2 | 3 | import android.content.Context; 4 | import android.webkit.WebResourceResponse; 5 | 6 | public class HtmlIntercept { 7 | 8 | private Context context; 9 | private String interceptUrl; 10 | 11 | HtmlIntercept(Context context) { 12 | this.context = context; 13 | } 14 | 15 | public void setInterceptUrl(String interceptUrl) { 16 | this.interceptUrl = interceptUrl; 17 | } 18 | 19 | public WebResourceResponse interceptHtml(WebviewInterface view, String url, String referer) { 20 | return null; 21 | } 22 | 23 | } 24 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/java/com/dvb/dvb_i/WebChromeClientCustomPoster.java: -------------------------------------------------------------------------------- 1 | package com.dvb.dvb_i; 2 | 3 | import android.graphics.Bitmap; 4 | import android.util.Log; 5 | import android.webkit.ConsoleMessage; 6 | import android.webkit.PermissionRequest; 7 | import android.webkit.WebChromeClient; 8 | 9 | public class WebChromeClientCustomPoster extends WebChromeClient { 10 | @Override 11 | public Bitmap getDefaultVideoPoster() { 12 | return Bitmap.createBitmap(10, 10, Bitmap.Config.ARGB_8888); 13 | } 14 | @Override 15 | public void onPermissionRequest(PermissionRequest request) { 16 | String[] resources = request.getResources(); 17 | for (int i = 0; i < resources.length; i++) { 18 | if (PermissionRequest.RESOURCE_PROTECTED_MEDIA_ID.equals(resources[i])) { 19 | request.grant(resources); 20 | return; 21 | } 22 | } 23 | super.onPermissionRequest(request); 24 | } 25 | 26 | @Override 27 | public boolean onConsoleMessage(ConsoleMessage consoleMessage) { 28 | Log.d("com.dv.dvb_i.DvbiReferenceApplication.debug", consoleMessage.message() + " -- From line " + 29 | consoleMessage.lineNumber() + " of " + consoleMessage.sourceId()); 30 | return true; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/java/com/dvb/dvb_i/WebviewInterface.java: -------------------------------------------------------------------------------- 1 | package com.dvb.dvb_i; 2 | 3 | import android.view.ViewParent; 4 | 5 | public interface WebviewInterface { 6 | void loadUrl(String url); 7 | void loadUrlDirect(String url); 8 | String getUrl(); 9 | void reload(); 10 | boolean canGoBack(); 11 | void goBack(); 12 | void onPause(); 13 | void onResume(); 14 | void stopLoading(); 15 | ViewParent getParent(); 16 | void destroy(); 17 | int getProgress(); 18 | void runJavascript(String js); 19 | } 20 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/drawable-xxxhdpi/simple_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/drawable/dvb_splash.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/drawable/dvb_splash.png -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/drawable/focus_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/drawable/ic_banner_dvb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/drawable/ic_banner_dvb.png -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/drawable/ic_launcher_foreground.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 14 | 17 | 20 | 23 | 26 | 29 | 32 | 33 | 34 | 35 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/drawable/rounded_corners.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/layout/main_activity.xml: -------------------------------------------------------------------------------- 1 | 8 | 9 | 14 | 15 | 20 | 21 | 26 | 27 | 38 | 39 | 40 | 41 | 50 | 51 | 57 | 58 | 59 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-anydpi-v26/ic_banner_dvb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-anydpi-v26/ic_launcher_dvb.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-anydpi-v26/ic_launcher_dvb_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-hdpi/ic_launcher_dvb.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-hdpi/ic_launcher_dvb.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-hdpi/ic_launcher_dvb_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-hdpi/ic_launcher_dvb_foreground.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-hdpi/ic_launcher_dvb_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-hdpi/ic_launcher_dvb_round.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-mdpi/ic_launcher_dvb.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-mdpi/ic_launcher_dvb.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-mdpi/ic_launcher_dvb_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-mdpi/ic_launcher_dvb_foreground.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-mdpi/ic_launcher_dvb_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-mdpi/ic_launcher_dvb_round.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-xhdpi/ic_banner_dvb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-xhdpi/ic_banner_dvb.png -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-xhdpi/ic_launcher_dvb.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-xhdpi/ic_launcher_dvb.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-xhdpi/ic_launcher_dvb_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-xhdpi/ic_launcher_dvb_foreground.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-xhdpi/ic_launcher_dvb_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-xhdpi/ic_launcher_dvb_round.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-xxhdpi/ic_launcher_dvb.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-xxhdpi/ic_launcher_dvb.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-xxhdpi/ic_launcher_dvb_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-xxhdpi/ic_launcher_dvb_foreground.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-xxhdpi/ic_launcher_dvb_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-xxhdpi/ic_launcher_dvb_round.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-xxxhdpi/ic_launcher_dvb.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-xxxhdpi/ic_launcher_dvb.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-xxxhdpi/ic_launcher_dvb_foreground.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-xxxhdpi/ic_launcher_dvb_foreground.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/mipmap-xxxhdpi/ic_launcher_dvb_round.webp: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/app/src/main/res/mipmap-xxxhdpi/ic_launcher_dvb_round.webp -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/values/attrs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/values/ic_banner_dvb_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/values/ic_launcher_dvb_background.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | #000000 4 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | DVB-I Reference client 4 | Error establishing SSL Connection 5 | SSL certificate has expired 6 | Invalid SSL certificate 7 | 8 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/normal/java/com/dvb/dvb_i/LeanWebView.java: -------------------------------------------------------------------------------- 1 | package com.dvb.dvb_i; 2 | 3 | import android.content.Context; 4 | import android.util.AttributeSet; 5 | import android.view.View; 6 | import android.webkit.WebView; 7 | import android.webkit.WebViewClient; 8 | 9 | public class LeanWebView extends WebView implements WebviewInterface { 10 | private WebViewClient mClient = null; 11 | 12 | public LeanWebView(Context context) { 13 | super(context); 14 | } 15 | 16 | public LeanWebView(Context context, AttributeSet attrs) { 17 | super(context, attrs); 18 | } 19 | 20 | public LeanWebView(Context context, AttributeSet attrs, int defStyle) { 21 | super(context, attrs, defStyle); 22 | } 23 | 24 | @Override 25 | protected void onWindowVisibilityChanged(int visibility) { 26 | if (visibility != View.GONE && visibility != View.INVISIBLE) super.onWindowVisibilityChanged(visibility); 27 | } 28 | 29 | @Override 30 | public void setWebViewClient(WebViewClient client) { 31 | mClient = client; 32 | super.setWebViewClient(client); 33 | } 34 | 35 | @Override 36 | public void setWebChromeClient(android.webkit.WebChromeClient client) { 37 | super.setWebChromeClient(client); 38 | } 39 | 40 | @Override 41 | public void loadUrl(String url) { 42 | if (url == null) return; 43 | 44 | if (url.startsWith("javascript:")) 45 | runJavascript(url.substring("javascript:".length())); 46 | else if (mClient == null || !mClient.shouldOverrideUrlLoading(this, url)) { 47 | super.loadUrl(url); 48 | } 49 | } 50 | 51 | @Override 52 | public void reload() { 53 | if (mClient == null || !(mClient instanceof WebviewClient)) super.reload(); 54 | else if(!((WebviewClient)mClient).shouldOverrideUrlLoading(this, getUrl(), true)) 55 | super.reload(); 56 | } 57 | 58 | @Override 59 | public void goBack() { 60 | runJavascript("javascript:document.dispatchEvent(new KeyboardEvent('keydown',{'keyCode':8}));\n"); 61 | } 62 | 63 | public void loadUrlDirect(String url) { 64 | super.loadUrl(url); 65 | } 66 | 67 | public void runJavascript(String js) { 68 | evaluateJavascript(js, null); 69 | } 70 | } 71 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/normal/java/com/dvb/dvb_i/WebChromeCustomClient.java: -------------------------------------------------------------------------------- 1 | package com.dvb.dvb_i; 2 | 3 | import android.os.Message; 4 | import android.webkit.WebView; 5 | 6 | class WebChromeCustomClient extends WebChromeClientCustomPoster { 7 | private MainActivity mainActivity; 8 | private UrlNavigation urlNavigation; 9 | 10 | public WebChromeCustomClient(MainActivity mainActivity, UrlNavigation urlNavigation) { 11 | this.mainActivity = mainActivity; 12 | this.urlNavigation = urlNavigation; 13 | } 14 | 15 | @Override 16 | public void onCloseWindow(WebView window) { 17 | if (mainActivity.isNotRoot()) mainActivity.finish(); 18 | } 19 | 20 | @Override 21 | public boolean onCreateWindow(WebView view, boolean isDialog, boolean isUserGesture, Message resultMsg) { 22 | return urlNavigation.createNewWindow(resultMsg); 23 | } 24 | 25 | } 26 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/normal/java/com/dvb/dvb_i/WebViewConfiguration.java: -------------------------------------------------------------------------------- 1 | package com.dvb.dvb_i; 2 | 3 | import android.annotation.SuppressLint; 4 | import android.content.Context; 5 | import android.os.Build; 6 | import android.os.Message; 7 | import android.util.Log; 8 | import android.webkit.CookieManager; 9 | import android.webkit.WebSettings; 10 | import android.webkit.WebView; 11 | 12 | public class WebViewConfiguration { 13 | private static final String TAG = WebViewConfiguration.class.getName(); 14 | 15 | public static void setupWebviewForApplication(WebviewInterface webview, MainActivity activity) { 16 | if (!(webview instanceof LeanWebView)) { 17 | Log.e(TAG, "Expected webview to be of class LeanWebView and not " + webview.getClass().getName()); 18 | return; 19 | } 20 | 21 | LeanWebView wv = (LeanWebView)webview; 22 | 23 | setupWebview(wv, activity); 24 | 25 | UrlNavigation urlNavigation = new UrlNavigation(activity); 26 | urlNavigation.setCurrentWebviewUrl(webview.getUrl()); 27 | 28 | wv.setWebChromeClient(new WebChromeCustomClient(activity, urlNavigation)); 29 | wv.setWebViewClient(new WebviewClient(activity, urlNavigation)); 30 | WebView.setWebContentsDebuggingEnabled(true); 31 | 32 | wv.removeJavascriptInterface("android_interface"); 33 | wv.addJavascriptInterface(activity.getAndroidJsInterface(), "android_interface"); 34 | 35 | wv.getSettings().setUserAgentString("dvb-i-reference-application-" + Build.VERSION.SDK_INT); 36 | 37 | if (activity.getIntent().getBooleanExtra(MainActivity.EXTRA_WEBVIEW_WINDOW_OPEN, false)) { 38 | // send to other webview 39 | Message resultMsg = ((DvbiReferenceApplication)activity.getApplication()).getWebviewMessage(); 40 | if (resultMsg != null) { 41 | WebView.WebViewTransport transport = (WebView.WebViewTransport)resultMsg.obj; 42 | if (transport != null) { 43 | transport.setWebView(wv); 44 | resultMsg.sendToTarget(); 45 | } 46 | } 47 | } 48 | } 49 | 50 | @SuppressWarnings("deprecation") 51 | @SuppressLint("SetJavaScriptEnabled") 52 | public static void setupWebview(WebviewInterface webview, Context context) { 53 | if (!(webview instanceof LeanWebView)) { 54 | Log.e(TAG, "Expected webview to be of class LeanWebView and not " + webview.getClass().getName()); 55 | return; 56 | } 57 | 58 | LeanWebView wv = (LeanWebView)webview; 59 | WebSettings webSettings = wv.getSettings(); 60 | 61 | webSettings.setBuiltInZoomControls(false); 62 | webSettings.setDomStorageEnabled(true); 63 | webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.NORMAL); 64 | webSettings.setCacheMode(WebSettings.LOAD_DEFAULT); 65 | 66 | webSettings.setDisplayZoomControls(false); 67 | webSettings.setLoadWithOverviewMode(true); 68 | webSettings.setUseWideViewPort(true); 69 | 70 | webSettings.setJavaScriptEnabled(true); 71 | webSettings.setJavaScriptCanOpenWindowsAutomatically(true); 72 | 73 | webSettings.setMinimumFontSize(1); 74 | webSettings.setMinimumLogicalFontSize(1); 75 | 76 | webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_COMPATIBILITY_MODE); 77 | CookieManager.getInstance().setAcceptThirdPartyCookies(wv, true); 78 | 79 | wv.setDrawingCacheEnabled(false); 80 | webSettings.setRenderPriority(WebSettings.RenderPriority.HIGH); 81 | 82 | webSettings.setSaveFormData(false); 83 | webSettings.setSavePassword(false); 84 | webSettings.setUserAgentString("android"); 85 | webSettings.setSupportMultipleWindows(true); 86 | webSettings.setGeolocationEnabled(false); 87 | webSettings.setMediaPlaybackRequiresUserGesture(false); 88 | webSettings.setAllowUniversalAccessFromFileURLs(true); 89 | } 90 | 91 | public static void removeCallbacks(LeanWebView webview) { 92 | webview.setWebViewClient(null); 93 | webview.setWebChromeClient(null); 94 | } 95 | } 96 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/normal/java/com/dvb/dvb_i/WebkitCookieManagerProxy.java: -------------------------------------------------------------------------------- 1 | package com.dvb.dvb_i; 2 | 3 | import java.io.IOException; 4 | import java.net.CookiePolicy; 5 | import java.net.CookieStore; 6 | import java.net.URI; 7 | import java.util.Arrays; 8 | import java.util.List; 9 | import java.util.Map; 10 | 11 | // this syncs cookies between webkit (webview) and java.net classes 12 | public class WebkitCookieManagerProxy extends java.net.CookieManager { 13 | private static final String TAG = WebkitCookieManagerProxy.class.getName(); 14 | private android.webkit.CookieManager webkitCookieManager; 15 | 16 | public WebkitCookieManagerProxy() 17 | { 18 | this(null, null); 19 | } 20 | 21 | WebkitCookieManagerProxy(CookieStore store, CookiePolicy cookiePolicy) 22 | { 23 | super(null, cookiePolicy); 24 | 25 | this.webkitCookieManager = android.webkit.CookieManager.getInstance(); 26 | } 27 | 28 | // java.net.CookieManager overrides 29 | @Override 30 | public void put(URI uri, Map> responseHeaders) throws IOException 31 | { 32 | // make sure our args are valid 33 | if ((uri == null) || (responseHeaders == null)) return; 34 | 35 | // go over the headers 36 | for (String headerKey : responseHeaders.keySet()) 37 | { 38 | // ignore headers which aren't cookie related 39 | if ((headerKey == null) || !(headerKey.equalsIgnoreCase("Set-Cookie2") || headerKey.equalsIgnoreCase("Set-Cookie"))) continue; 40 | 41 | } 42 | } 43 | 44 | @Override 45 | public Map> get(URI uri, Map> requestHeaders) throws IOException 46 | { 47 | // make sure our args are valid 48 | if ((uri == null) || (requestHeaders == null)) throw new IllegalArgumentException("Argument is null"); 49 | 50 | // save our url once 51 | String url = uri.toString(); 52 | 53 | // prepare our response 54 | Map> res = new java.util.HashMap>(); 55 | 56 | // get the cookie 57 | String cookie = this.webkitCookieManager.getCookie(url); 58 | 59 | // return it 60 | if (cookie != null) res.put("Cookie", Arrays.asList(cookie)); 61 | return res; 62 | } 63 | 64 | @Override 65 | public CookieStore getCookieStore() 66 | { 67 | // we don't want anyone to work with this cookie store directly 68 | throw new UnsupportedOperationException(); 69 | } 70 | 71 | } 72 | -------------------------------------------------------------------------------- /frontend/android_apk/app/src/normal/java/com/dvb/dvb_i/WebviewClient.java: -------------------------------------------------------------------------------- 1 | package com.dvb.dvb_i; 2 | 3 | import android.annotation.TargetApi; 4 | import android.content.Context; 5 | import android.graphics.Bitmap; 6 | import android.graphics.Color; 7 | import android.net.http.SslError; 8 | import android.os.Build; 9 | import android.os.Message; 10 | import android.view.View; 11 | import android.webkit.ClientCertRequest; 12 | import android.webkit.SslErrorHandler; 13 | import android.webkit.WebResourceError; 14 | import android.webkit.WebResourceRequest; 15 | import android.webkit.WebResourceResponse; 16 | import android.webkit.WebView; 17 | import android.webkit.WebViewClient; 18 | 19 | import androidx.annotation.RequiresApi; 20 | 21 | public class WebviewClient extends WebViewClient{ 22 | private static final String TAG = WebviewClient.class.getName(); 23 | private UrlNavigation urlNavigation; 24 | private Context context; 25 | 26 | public WebviewClient(MainActivity mainActivity, UrlNavigation urlNavigation) { 27 | this.urlNavigation = urlNavigation; 28 | this.context = mainActivity; 29 | } 30 | 31 | @Override 32 | public boolean shouldOverrideUrlLoading(WebView view, String url) { 33 | return urlNavigation.shouldOverrideUrlLoading((WebviewInterface)view, url); 34 | } 35 | 36 | public boolean shouldOverrideUrlLoading(WebView view, String url, boolean isReload) { 37 | return urlNavigation.shouldOverrideUrlLoading((WebviewInterface)view, url, isReload); 38 | } 39 | 40 | @Override 41 | public void onPageStarted(WebView view, String url, Bitmap favicon) { 42 | super.onPageStarted(view, url, favicon); 43 | urlNavigation.onPageStarted(url); 44 | view.setBackgroundColor(Color.TRANSPARENT); 45 | view.setLayerType(View.LAYER_TYPE_HARDWARE, null); 46 | } 47 | 48 | @Override 49 | public void onPageFinished(WebView view, String url) { 50 | super.onPageFinished(view, url); 51 | urlNavigation.onPageFinished((WebviewInterface)view, url); 52 | } 53 | 54 | @Override 55 | public void onFormResubmission(WebView view, Message dontResend, Message resend) { 56 | urlNavigation.onFormResubmission((WebviewInterface)view, dontResend, resend); 57 | } 58 | 59 | @Override 60 | public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) { 61 | urlNavigation.doUpdateVisitedHistory((WebviewInterface)view, url, isReload); 62 | } 63 | 64 | @Override 65 | public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 66 | urlNavigation.onReceivedError((WebviewInterface) view, errorCode, description, failingUrl); 67 | } 68 | 69 | @TargetApi(Build.VERSION_CODES.M) 70 | @Override 71 | public void onReceivedError(WebView view, WebResourceRequest request, WebResourceError error) { 72 | urlNavigation.onReceivedError((WebviewInterface) view, error.getErrorCode(), 73 | error.getDescription().toString(), request.getUrl().toString()); 74 | } 75 | 76 | @Override 77 | public void onReceivedSslError(WebView view, SslErrorHandler handler, SslError error) { 78 | handler.cancel(); 79 | urlNavigation.onReceivedSslError(error); 80 | } 81 | 82 | @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP) 83 | @Override 84 | public void onReceivedClientCertRequest(WebView view, ClientCertRequest request) { 85 | urlNavigation.onReceivedClientCertRequest(view.getUrl(), request); 86 | } 87 | 88 | @TargetApi(Build.VERSION_CODES.LOLLIPOP) 89 | @Override 90 | public WebResourceResponse shouldInterceptRequest(WebView view, WebResourceRequest request) { 91 | String method = request.getMethod(); 92 | if (method == null || !method.equalsIgnoreCase("GET")) return null; 93 | 94 | android.net.Uri uri = request.getUrl(); 95 | if (uri == null || !uri.getScheme().startsWith("http")) return null; 96 | 97 | return shouldInterceptRequest(view, uri.toString()); 98 | } 99 | 100 | 101 | 102 | } 103 | -------------------------------------------------------------------------------- /frontend/android_apk/build.gradle: -------------------------------------------------------------------------------- 1 | // Top-level build file where you can add configuration options common to all sub-projects/modules. 2 | buildscript { 3 | repositories { 4 | google() 5 | mavenCentral() 6 | } 7 | dependencies { 8 | classpath 'com.android.tools.build:gradle:8.5.0' 9 | classpath 'org.jetbrains.kotlin:kotlin-gradle-plugin:1.6.21' 10 | classpath 'com.google.gms:google-services:4.3.10' 11 | } 12 | } 13 | 14 | allprojects { 15 | repositories { 16 | google() 17 | mavenCentral() 18 | flatDir { 19 | dirs 'libs' 20 | } 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /frontend/android_apk/constants.gradle: -------------------------------------------------------------------------------- 1 | project.ext { 2 | jetpackVersion = '1.0.0' 3 | } 4 | -------------------------------------------------------------------------------- /frontend/android_apk/generate-header-images.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | BASEDIR=$(dirname $0) 4 | 5 | sips --resampleHeight 36 -s format png --out $BASEDIR/app/src/main/res/drawable-mdpi/ic_actionbar.png $BASEDIR/HeaderImage 2>&1 6 | sips --resampleHeight 54 -s format png --out $BASEDIR/app/src/main/res/drawable-hdpi/ic_actionbar.png $BASEDIR/HeaderImage 2>&1 7 | sips --resampleHeight 72 -s format png --out $BASEDIR/app/src/main/res/drawable-xhdpi/ic_actionbar.png $BASEDIR/HeaderImage 2>&1 8 | sips --resampleHeight 108 -s format png --out $BASEDIR/app/src/main/res/drawable-xxhdpi/ic_actionbar.png $BASEDIR/HeaderImage 2>&1 9 | sips --resampleHeight 144 -s format png --out $BASEDIR/app/src/main/res/drawable-xxxhdpi/ic_actionbar.png $BASEDIR/HeaderImage 2>&1 10 | 11 | optipng $BASEDIR/app/src/main/res/drawable-mdpi/ic_actionbar.png 2>&1 12 | optipng $BASEDIR/app/src/main/res/drawable-hdpi/ic_actionbar.png 2>&1 13 | optipng $BASEDIR/app/src/main/res/drawable-xhdpi/ic_actionbar.png 2>&1 14 | optipng $BASEDIR/app/src/main/res/drawable-xxhdpi/ic_actionbar.png 2>&1 15 | optipng $BASEDIR/app/src/main/res/drawable-xxxhdpi/ic_actionbar.png 2>&1 16 | -------------------------------------------------------------------------------- /frontend/android_apk/generate-tinted-icons.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -e 3 | 4 | DARK_ICONS=( 5 | ic_refresh_white_24dp.png 6 | ic_search_white_24dp.png 7 | ic_share_white_24dp.png 8 | ) 9 | 10 | LIGHT_ICONS=( 11 | ic_refresh_black_24dp.png 12 | ic_search_black_24dp.png 13 | ic_share_black_24dp.png 14 | ) 15 | 16 | DARK_DEFAULT_COLOR=ffffff 17 | LIGHT_DEFAULT_COLOR=000000 18 | 19 | BASEDIR=$(dirname $0) 20 | 21 | function showHelp { 22 | echo "Usage: $0 (dark|light) tintColor" 23 | echo "Example: $0 light 0000ff" 24 | exit 1 25 | 26 | } 27 | 28 | if [[ $# -ne 2 ]]; then 29 | showHelp 30 | fi 31 | 32 | theme=`echo $1 | tr '[:upper:]' '[:lower:]'` 33 | tintColor=`echo $2 | tr '[:upper:]' '[:lower:]'` 34 | 35 | if [[ $theme = light ]]; then 36 | icons=("${LIGHT_ICONS[@]}") 37 | defaultColor=$LIGHT_DEFAULT_COLOR 38 | elif [[ $theme = dark ]]; then 39 | icons=("${DARK_ICONS[@]}") 40 | defaultColor=$DARK_DEFAULT_COLOR 41 | else 42 | showHelp 43 | fi 44 | 45 | if [[ ${#tintColor} -ne 6 ]]; then 46 | showHelp 47 | fi 48 | 49 | if [[ $tintColor = $defaultColor ]]; then 50 | echo "Requested color $tintColor is same as default for theme. Exiting." 51 | exit 52 | fi 53 | 54 | for drawable in `ls -d $BASEDIR/app/src/main/res/drawable*`; do 55 | for file in "${icons[@]}"; do 56 | filePath=$drawable/$file 57 | if [[ -s "$filePath" ]]; then 58 | echo Tinting $filePath 59 | convert $filePath -fill "#$tintColor" -colorize 100% $filePath 60 | optipng $filePath 61 | fi 62 | done 63 | done 64 | -------------------------------------------------------------------------------- /frontend/android_apk/gradle.properties: -------------------------------------------------------------------------------- 1 | org.gradle.jvmargs=-Xmx2048m -XX:MaxMetaspaceSize=512m 2 | android.useAndroidX=true 3 | android.enableJetifier=true 4 | android.defaults.buildfeatures.buildconfig=true 5 | android.nonTransitiveRClass=false 6 | android.nonFinalResIds=false -------------------------------------------------------------------------------- /frontend/android_apk/gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/android_apk/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /frontend/android_apk/gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Thu Feb 22 15:59:16 EET 2024 2 | distributionBase=GRADLE_USER_HOME 3 | distributionPath=wrapper/dists 4 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-bin.zip 5 | zipStoreBase=GRADLE_USER_HOME 6 | zipStorePath=wrapper/dists 7 | -------------------------------------------------------------------------------- /frontend/android_apk/gradlew.bat: -------------------------------------------------------------------------------- 1 | @if "%DEBUG%" == "" @echo off 2 | @rem ########################################################################## 3 | @rem 4 | @rem Gradle startup script for Windows 5 | @rem 6 | @rem ########################################################################## 7 | 8 | @rem Set local scope for the variables with windows NT shell 9 | if "%OS%"=="Windows_NT" setlocal 10 | 11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. 12 | set DEFAULT_JVM_OPTS= 13 | 14 | set DIRNAME=%~dp0 15 | if "%DIRNAME%" == "" set DIRNAME=. 16 | set APP_BASE_NAME=%~n0 17 | set APP_HOME=%DIRNAME% 18 | 19 | @rem Find java.exe 20 | if defined JAVA_HOME goto findJavaFromJavaHome 21 | 22 | set JAVA_EXE=java.exe 23 | %JAVA_EXE% -version >NUL 2>&1 24 | if "%ERRORLEVEL%" == "0" goto init 25 | 26 | echo. 27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. 28 | echo. 29 | echo Please set the JAVA_HOME variable in your environment to match the 30 | echo location of your Java installation. 31 | 32 | goto fail 33 | 34 | :findJavaFromJavaHome 35 | set JAVA_HOME=%JAVA_HOME:"=% 36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe 37 | 38 | if exist "%JAVA_EXE%" goto init 39 | 40 | echo. 41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% 42 | echo. 43 | echo Please set the JAVA_HOME variable in your environment to match the 44 | echo location of your Java installation. 45 | 46 | goto fail 47 | 48 | :init 49 | @rem Get command-line arguments, handling Windowz variants 50 | 51 | if not "%OS%" == "Windows_NT" goto win9xME_args 52 | if "%@eval[2+2]" == "4" goto 4NT_args 53 | 54 | :win9xME_args 55 | @rem Slurp the command line arguments. 56 | set CMD_LINE_ARGS= 57 | set _SKIP=2 58 | 59 | :win9xME_args_slurp 60 | if "x%~1" == "x" goto execute 61 | 62 | set CMD_LINE_ARGS=%* 63 | goto execute 64 | 65 | :4NT_args 66 | @rem Get arguments from the 4NT Shell from JP Software 67 | set CMD_LINE_ARGS=%$ 68 | 69 | :execute 70 | @rem Setup the command line 71 | 72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar 73 | 74 | @rem Execute Gradle 75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% 76 | 77 | :end 78 | @rem End local scope for the variables with windows NT shell 79 | if "%ERRORLEVEL%"=="0" goto mainEnd 80 | 81 | :fail 82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of 83 | rem the _cmd.exe /c_ return code! 84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1 85 | exit /b 1 86 | 87 | :mainEnd 88 | if "%OS%"=="Windows_NT" endlocal 89 | 90 | :omega 91 | -------------------------------------------------------------------------------- /frontend/android_apk/settings.gradle: -------------------------------------------------------------------------------- 1 | include ':app' 2 | -------------------------------------------------------------------------------- /frontend/configuration.js: -------------------------------------------------------------------------------- 1 | // DVB-I Reference installation location -- also backend/configuration.php 2 | var INSTALL_LOCATION = "https://dvb-i-reference.dvb.org/client"; 3 | 4 | // set to true to include channels that are not included in the selected LCN table. 5 | var INCLUDE_NON_LCN_CHANNELS = false; 6 | -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/bg_boxitem_image.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/bg_boxitem_image.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/bg_boxitem_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/bg_boxitem_info.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/bg_channel_info.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/bg_channel_info.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/bg_menu.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/bg_menu.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/dialog_checkmark.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/dialog_checkmark.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/empty.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/icons.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/loading_anim.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/loading_anim.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/lock_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/lock_green.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/lock_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/lock_red.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/logo_dvbi_sofia.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/logo_dvbi_sofia.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/menu_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/menu_arrow.png -------------------------------------------------------------------------------- /frontend/hbbtv/CommonUI/rating.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/CommonUI/rating.png -------------------------------------------------------------------------------- /frontend/hbbtv/epg/images/bg_plain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/epg/images/bg_plain.png -------------------------------------------------------------------------------- /frontend/hbbtv/epg/images/bg_program_focused.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/epg/images/bg_program_focused.png -------------------------------------------------------------------------------- /frontend/hbbtv/epg/images/bg_timeline.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/epg/images/bg_timeline.png -------------------------------------------------------------------------------- /frontend/hbbtv/epg/images/bg_verticalTimeLineContainer.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/epg/images/bg_verticalTimeLineContainer.png -------------------------------------------------------------------------------- /frontend/hbbtv/epg/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/epg/images/logo.png -------------------------------------------------------------------------------- /frontend/hbbtv/epg/images/up_down_arrows_epg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/DVBProject/DVB-I-Reference-Client/6788c049b841b2fb84a49d4871604e797f3fa1c3/frontend/hbbtv/epg/images/up_down_arrows_epg.png -------------------------------------------------------------------------------- /frontend/hbbtv/epg/scripts.js: -------------------------------------------------------------------------------- 1 | Element.prototype.lastProgram = function () { 2 | for (var i = this.childNodes.length - 1; i >= 0; i--) { 3 | if (this.childNodes[i].hasClass("program")) { 4 | return this.childNodes[i]; 5 | } 6 | } 7 | return null; 8 | }; 9 | 10 | Element.prototype.firstProgram = function () { 11 | var firstprogram = null; 12 | for (var i = 0; i < this.childNodes.length; i++) { 13 | if (this.childNodes[i].hasClass("program")) { 14 | firstprogram = this.childNodes[i]; 15 | break; 16 | } 17 | } 18 | return firstprogram; 19 | }; 20 | 21 | function htmlDecode(value) { 22 | return $("