Android | iOS | Windows | GNU/Linux | MacOS |
---|---|---|---|---|
arm64 .apk |
App Store | Windows Setup | ๐ง SOON AppImage |
Executable .app |
armabi .apk |
๐ง SOON winget install bluecherry |
Ubuntu/Debian .deb |
๐ง SOON |
|
x86_64 .apk |
๐ง SOON |
Raw Executable .tar.gz |
||
๐ง SOON |
Fedora/Red Hat Linux .rpm |
Or download the latest release here.
Most platforms will not require any extra steps to install the app.
To install the .deb
file, run:
sudo dpkg -i bluecherry-linux-x86_64.deb
Refer to USAGE.md for detailed usage instructions.
Copyright ยฉ 2022, Bluecherry DVR.
This project & work under this repository is licensed under GNU General Public License v3.0.
Send us details about any issues you discover in the issues or in the forums.
You may provide translations for the application to see it running in your own language. Please follow these steps:
Let's say, we're adding French (fr
) translation.
app_fr.arb
.app_fr.arb
file in correspondence to existing English translations.When adding new strings, run bin/l10n_organizer.dart
. This script will ensure that the new strings are added to all l10n files and that they are in the same location. It will also remove any unused strings. The base file is app_en.arb
, so all strings must be added there first.
Note that the app is constantly changing and new strings are added all the time. The translations need to be updated constantly.
The code uses Provider for state-management because it is widely known by Flutter community, doesn't bring any unnecessary complexity to the codebase & is scalable/stable enough.
Most ChangeNotifier
s are available as singletons, though de-coupled from each other. This is important to handle things like loading app configuration before runApp
, handling background notification button actions & few other asynchronous operations performed outside the widget tree. By having singletons, we are able to avoid a strict dependency on the BuildContext
& do certain things in a more performant way.
Current source tree has following files:
lib
โ
โโโโapi [API wrapper around Bluecherry DVR server.]
โ โโโapi.dart
โ โโโptz.dart [API related to Pan-Tilt-Zoom controls]
โ
โโโโl10n [Tranlations]
โ
โโโโmodels [model classes to serve & bind type-safe data together in various entities.]
โ โโโโdevice.dart
โ โโโโevent.dart
โ โโโโlayout.dart
โ โโโโserver.dart
โ
โโโโproviders [core business logic of the application.]
โ โโโโdesktop_view_provider.dart [stores, provides & caches desktop camera layout]
โ โโโโdownloads_provider.dart [manages events downloading and progress]
โ โโโโevents_playback_provider.dart [caches data about the events playback view]
โ โโโโhome_provider.dart [stores, provides & caches data about the home page]
โ โโโโmobile_view_provider.dart [stores, provides & caches mobile camera layout etc.]
โ โโโโserver_provider.dart [stores, provides & caches multiple DVR servers added by the user.]
โ โโโโsettings_provider.dart [stores, provides & caches various in-app configurations & settings.]
โ โโโโupdate_provider.dart [manages app updates and app status.]
โ
โโโโutils [constant values, helper functions & theme-related stuff.]
โ โโโโconstants.dart
โ โโโโextensions.dart
โ โโโโmethods.dart
โ โโโโstorage.dart
โ โโโโtheme.dart
โ โโโโvideo_player.dart
โ โโโโwindow.dart
โ
โโโโscreens [All the screens of the application.]
โ
โโโโwidgets [UI/UX & widgets used to display content.]
โ
โโโโfirebase_messaging_background_handler.dart [handles in-app notifications, snoozing, thumbnails etc. & other Firebase related hooks.]
โโโโfirebase_options.dart [auto-generated firebase configuration.]
โโโโmain.dart [entry-point of the application.]
packages
โ
โโโโunity_multi_window [multi-window support for desktop platforms.]
โ
โโโโunity_video_player
โ โโโโunity_video_player [the core video player logic.]
โ โโโโunity_video_player_flutter [video player used as fallback, used on embedded platforms.]
โ โโโโunity_video_player_main [main video player logic, used on most platforms.]
โ โโโโunity_video_player_platform_interface [the platform interface for the video player.]
โ โโโโunity_video_player_web [web specific video player logic, used on web.]
Feel free to send any pull-requests to add any features you wish or fix any bugs you notice.
We support multiple platforms and each platform uses its own rendering backend.
Platform | Rendering Backend | Flutter Package |
---|---|---|
Android | MPV | media_kit |
iOS | MPV | media_kit |
Windows | MPV | media_kit |
MacOS | MPV | media_kit |
Web | HTML5 | fvp |
Linux | MDK | fvp |
Raspberry Pi | MDK | fvp |
MDK is used for Linux and Raspberry Pi because MPV has shown to be unstable on these platforms, causing crashes. Additionally, fvp
doesn't require the user to install any additional dependencies.
The build process is pretty straight-forward. You need to have Flutter installed on your system.
git clone https://github.com/bluecherrydvr/unity
cd unity
flutter pub get
flutter build [linux|windows|macos|android|ios]
The automated build process is done using GitHub Actions. You may find the workflow here. The workflow builds the app for all supported platforms & uploads the artifacts to the release page.
On Linux, a Flutter executable with different environment variables is used to build the app for different distributions. This tells the app how the system is configured and how it should install updates. To run for Linux, you need to provide the following environment variables based on your system, where [DISTRO_ENV]
can be appimage
(AppImage), deb
(Ubuntu/Debian), rpm
(RedHat), tar.gz
(Tarball) or pi
(Raspberry Pi).
flutter run -d linux --dart-define-from-file=linux/env/[DISTRO_ENV].json
When running on debug, you must disable the CORS policy in your browser. Note that this is only for debugging purposes and should not be used in production. To do this, run the following command:
flutter run -d chrome --web-browser-flag "--disable-web-security"