Skip to content

Development Roadmap

Etienne Charland edited this page Jun 28, 2015 · 2 revisions

Development Roadmap

The Natural Grounding Player is a revolution of the entertainment industry. It allows us to use media for empowerment and transformation instead of for diversion. It has the potential to create a whole new ecosystem of artists and consumers. The amount of Natural Grounding resources is booming since the past few years, especially from Korea and Japan, and we're starting to see more and more from the West. As the amount of resources keep booming, it will become important to have a central database to keep track of it all.

This is only the beginning. There is a lot more that needs to be done. If you would like to contribute to this project, here is what needs to be done.

Improvements to the Natural Grounding Player

Download Manager

The download manager has to support downloading from other sources, such as Video, Facebook, or self-hosted. If the download fails, perhaps we could suggest the user to try downloading it with http://www.clipconverter.cc/

Also, there needs to be support for download audios and images, including extracting audios from YouTube.

I made several modifications to YouTubeExtractor to download the right streams from YouTube. Most of the code in DownloadBusiness should be moved into a separate DLL that would encapsulate all download functionality in a generic way. This generic DLL should support downloading not only from YouTube but also from other sources. There could be configurable options as to which video/audio versions to download: Best combination (which can mean VP9 video + AAC audio in MKV container), Standard Formats (H264+AAC or VP9+Vorbis/Opus) or MP4 Only. If built in a generic way, this could be a separate project on GitHub that would serve others. It may be better to keep this separate from YouTubeExtractor as that project manages the core of YouTube decoding while the other project around it manages the results.

(I will do it at some point if nobody else does it)

Layered Audios / Videos

Semi-transparent layers of audios and videos can be displayed. You can zoom in and out with the mouse wheel. Without a mouse wheel, however, it is currently impossible to zoom. There needs to be support to zoom in and out with the + and - keys. Furthermore, zoom in and zoom out buttons could temporarily appear when moving the mouse. For videos, a seek bar could also appear when moving the mouse.

(I won't do that in the near future, someone else can do it)

Quick Playlist Shortcuts

We can add the option to play a specific audio or video or display a specific image by pressing a key, or to configure to play videos within certain pre-configured conditions by pressing a key. It's not yet clear how it will be implemented.

(I will do this myself)

Import / Export Videos

Adding the ability to import and export videos to a file would allow users to maintain their personal database data between versions, by exporting before updating and importing back after the update.

(I may implement this for the v1.2 release)

Adding SuperRes to the Media Encoder

madVR implemented SuperRes which does a GREAT job at enhancing the quality of videos. If this could be added to the Media Encoder, I believe it would give a considerably better output. However, SuperRes isn't currently supported in AviSynth. It is a shader, and there is an old AviShader code that allows running shaders with AviSynth. If someone updates that code, perhaps it would be possible to run SuperRes. This thread discusses SuperRes and AviSynth.

(This can only be done by an AviSynth expert)

Central Website and Database Synchronization

This really will be the biggest piece. A central ASP.NET server must be added to host the database of resources so that anyone can contribute and add resources, as well as download all newest available resources. There are lots of features that could go in here. This is what will allow users to have their own databases and to share their resources with each other to build a collaborative environment. For energy readings, so far, I'm the only one who can do it, but users can suggest their own modifications that must be reviewed.

Backbone and Data Synchronization

First, a server-side database must be added and an API must be exposed so that users can synchronize their databases.

(I'll have to do the backbone myself as the structure has to be built properly. This doesn't require a web interface.)

Web Playlist Editor

A comprehensive interface could be built online to allow users to add and edit the collective playlist Wiki-style but with more structure. Certain changes must be moderated and the history of changes must be kept so that any edit can be reversed.

(I'll do the backbone and contribution would be welcomed here. The amount of features to implement can grow endlessly.)

Shared Preferences

The randomness of videos is based on the Preference field. All those preferences could be stored online, and for a new user, he will by default get the average preference for a video of all other users. Once we have enough users and data, we can take the average preference of users of similar age and sex.

(Once the online system is working, this will be easy to implement, but it has to be kept in mind in the design)

Web Player

Another UI for the player could be built online, which would work on Chromebooks and any web browsers. However, this would have more limited features as they won't be able to add their own purchased VCDs and DVDs to their playlists. We have to see whether we can have enough control over a YouTube player via JavaScript to automate the sessions.

(I won't do this)

Cross-Platform Support

Several non-Windows users have expressed desire to use it on MacOS, Linux, Chromebook or even mobile devices. The software is written in C# which can run on Linux and MacOS with the MONO Framework. It can run on mobile devices (iOS and Android) with Xamarin. The database, SQLite, also work on Linux, MacOS and mobile devices.

All video enhancements features (SVP, madVR, Media Encoder) cannot be ported. To download YouTube videos and combine the audio and video streams, ffmpeg works on Linux and MacOS but a replacement must be found for mobile devices.

Preliminary Tests

As a first step, you have to create a project on MONO or Xamarin that uses LINQ to SQLite to connect to a database, and that controls a video player on-demand. If you succeed at doing the basics, then you can look deeper into adapting the code for that platform.

Reprogramming the UI

The only thing that would need to be rewritten is the graphical interface as WPF doesn't run on MONO. Also, there is business logic code that is currently within the UI layer. While programming a new interface, all non-UI logic code would need to be moved out of the UI layer, and there should be a clean separation between the business logic and the UI. The media player also needs to be replaced with something else.

Ideally, the MONO version should be programmed first as the code and interface will be more similar to the current Windows interface. This will make it easier to clean-up the code to make it cross-platform compatible. Afterwards, another UI can be built for mobile devices, and this interface will be considerably different. I fear that doing a mobile version right away while cleaning the UI and business layers will produce a messy adaptation.

For WPF, it is recommended to follow the MVVM model to have a clear separation between the logic and the UI, which I have not done. You could migrate the code to follow a clean MVVM model, and investigate whether that same model can be applied for MONO and Xamarin.

For mobile support, Xamarin can provide a free license for Open Source projects like this.

(I will NOT work on MONO/Xamarin versions, someone else has to take the lead for it to happen)

Adapting the Business Layer

On top of reprogramming the UI and moving out business logic code into the business layer, Windows-specific code has to be moved out of the business layer for it to compile on MONO or Xamarin. Perhaps other projects need to be added to the solution to contain Windows-specific business logic code and Windows API calls. Other projects would also be required for MONO-specific and Xamarin-specific business logic code. The business logic code needs to be adapted to the needs of the MONO/Xamarin interfaces.

Furthermore, there may be issues with multi-threading. Something to keep in mind.

(I will NOT work on MONO/Xamarin versions, someone else has to take the lead for it to happen)

Contact The Author

If you want to contribute to the project, and especially if you want to discuss the architecture for implementing larger features, you can contact Etienne Charland here or on Facebook.