User Survey: Desired Features for MediaCore CE 0.11


Software is never done. Even though MediaCore CE 0.10 is not yet released I want to plan which features should be included in the next version. Ideally I want to publish a new version of MediaCore every 4-6 months and each release should improve one or two major use cases so there is a clear story for each release.

While paying customers will have the highest influence on my schedule I want to reach out for the second most important "resource": you (also known as "The Community"). I'd like to gather your priorities on some commonly requested features. Now MediaCore CE is an open source project so I can't dictate who should work on which tasks but at least I can set my own priorities and maybe the outcome of this list will rally up some additional volunteers (or customers) which will help a lot.

If you are a company/organization and you see some important features in the list below please do not assume a feature will be implemented just because it was listed. Some of them are just here because I think they would be fun to implement. If you have a budget (or developer time) please contact me, that is the best way to get a well-maintained MediaCore. To be honest I the biggest risk to me in this survey is that potential customers will wait "just a little longer" because "others will surely pay for it".

Rules

When you read the feature list I assume many people will say "I want all of that". Unfortunately that's not how project management works. Please pick at max three features. A "feature" is defined by its heading (e.g. "Improve the JSON API"). If you are only interested in some parts of a feature, feel free to mention that.

Please note that there is no point in cheating/multiple fake submissions: After all the final ranking is just one factor for my personal priority list.


Features

Improve the JSON API

Implement the the cloud (mediacore.com) upload API. This will allow using the mcoreuploader Python library to implement a batch media import and eases the MediaCore CE integration with other software.

Also the current JSON API would be rewritten to match the MediaCore(.com) API. This means some minor API changes but most notably the use of HTTP Basic AUTH (integrated with our permission system) instead of a single API key. That also means the API access would honor our new access restriction framework.

  • partly funded by customers
  • at least one interested volunteer from the community
  • Cattura Video implemented the upload api as a plugin already, we probably can reuse most of that:
  • This is one of the mandatory features before we can release MediaCore 1.0.
Improved Access Restrictions
  • Publish a plugin to configure per-media access restrictions so we don't have "view all media or none" but also "group can view video X, video Y, ...".
  • Depending on user interest I could also write a plugin so that a group can view all videos within a certain category.
  • Restrict voting to registered users (or users from a specific group) and also prevent double voting on a single media.
Current FlowPlayer/JW Player

FlowPlayer and JW Player recently released new major versions which have much better HTML5 support. MediaCore should include the latest versions for both players. Ideally I'd like to rewrite the integration so that we don't use Google Closure for that anymore but jQuery. That would also ease integration with external plugins.

  • This is one of the mandatory features before we can release MediaCore 1.0.
Mobile Support

The current MediaCore CE layout is not optimized for mobile devices. The layout should adapt better to different screen sizes (responsive design?). Currently we have a huge base.css. By using something like SASS and compass we should be able to get modern (and maintainable) stylesheets. Also Gumby looks pretty interesting.

Publish a basic plugin with a phone-optimized touch UI (based on jQuery mobile).

  • customer-specific plugin already exists and could provide a starting point
Improve Social/Community Features

MediaCore CE should work better as a community platform. That means we provide a registration page so users can create new accounts without any assistence from a MediaCore CE operator. We must provide sufficient hooks to fight spam registrations. Plugins should be able to inject captchas and other anti-spam methods. Also "double opt-in" (aka "confirmed opt-in") must be supported.

A user should have at least a basic "profile" page where he can change his password and he must be able to reset his password.

  • should switch to stronger password encryption (bcrypt)
  • ideally extend the user model so we can store arbitrary meta data
  • implement login by email?
  • This is one of the mandatory features before we can release MediaCore 1.0.
Templates per Instance

Currently each template modification needs either a custom plugin or modification of the MediaCore source directory while replacing a template should be as easy as creating a new one in the right location. We could use a new folder in the "data" directory for that.

Get rid of Flash Uploads

Currently MediaCore uses Flash to upload media. Back in 2010 that was necessary to display the upload progress. Modern browsers implement all the necessary stuff in plain JavaScript. Flash-based uploads cause a lot of trouble (random Flash exceptions, bugs, ...) and to make things worse these issues are hard to work-around (short of switching browsers).

We should implement a JS-based upload both for the backend and the public upload. Unfortunately this means also we should rip out as much of mootools as possible and use a combination of jQuery, jQuery UI and some other plugins.

  • This is one of the mandatory features before we can release MediaCore 1.0.
Command-line Tools

Currently it's hard to manage a MediaCore instance on the command line if you don't want to manipulate the database directly. Especially if you manage a couple of MediaCore instances on one server there is currently very little help to automate common tasks.

We could publish a plugin to perform some common/simple tasks like "create a user", "set password", "change a setting", "enable/disable a player". Ideally other plugins could also contribute more commands.

Accurate View Stats

The "number of views" for a media should reflect the actual video views by humans while search engines should not increase the view count. Views from the embedded player should be counted as well of course.

The view count should be increased after a significant portion of the video was watched (e.g. 30%). - this requires common MediaCore JS Player callbacks - we should replace Google Closure with jQuery before (see "Current FlowPlayer/JW Player) - this could also ease scalability because the media view page can be cached more easily

Prominent support for Plugins

One of the really great (but undervalued) things in MediaCore CE is its plugin interface. With some more marketing/tech support I hope to draw more attention to plugins (and possibly also develop a bigger 3rd-party developer ecosystem).

We could have a basic "plugin directory" which should list public plugins with some meta data and install instructions.

Create "How To"-like documentation to help plugin writers solving certain tasks (e.g. how to add extra fields to a form, how to add custom JS to certain pages, how to exchange the explore page with a custom version).

Maybe we could even have a web-based plugin install mechanism.

Search Improvements

MySQL's "fulltext" search has many shortcomings (e.g. no search results for short inputs) and can not be used on shared hosts because users typically don't have MySQL root access. Instead I'd like to implement a plugin interface for "search" and publish a SOLR-based search plugin.

Simplify Installation

MediaCore CE depends on several other libraries (some of which must be compiled). Also for new users it might be hard to deploy MediaCore correctly.

  • provide a simple way to detect dependency errors (e.g. detect missing jpg/png support for Pillow)
  • maybe provide a command-line install script?

We could also create a web-based installer but that seems to be a lot of work even though it would for sure help many users.

Optimized Video Embedding

Currently MediaCore CE uses direct Flash-based embeds for many players (e.g. FlowPlayer). We should use the player's native embedding API (as it is done for JW Player already). Ideally we would remove Google Closure and reimplement the functionality in jQuery.

Also we currently start the player whenever the page is rendered. Flash-based players are quite expensive to initialize (that is especially noticable when you have multiple videos e.g. in an embedding page). For FlowPlayer we should only render a thumbnail image and launch the player only when the user actually wants to watch the video.

Implement a client-side player fallback so that you can have a HTML5 fallback even the player does not explicitely support that (and you don't have to create a custom plugin which binds both players together).

Improve the MediaCore CE Developer Platform

This is about improving MediaCore CE architecture so that it will be easier to build high-quality plugins.

  • build an infrastructure to concat JS/CSS files (less HTTP requests, faster page load time), possibly also with support for minification and jslint checking. There are some existing libraries like fanstatic and webassets which could be used for that.
  • use alembic for DB migrations and provide a mechanism for DB migrations in plugins.
  • This is one of the mandatory features before we can release MediaCore 1.0.
Improved Internationalization

Store all date/time-related data with time zone information and display the time according to the configured time zone.

  • This helps moving a MediaCore install between hosts (which may have different time zones configured).
  • The time zone used for display could be also per user.

Currently MediaCore's language is configured in the admin and applies to all users. Ideally each user would see MediaCore in his preferred language (assuming we have a proper translation).

Also MediaCore operators should be able to add/change translations without modifying the MediaCore instance itself. That would help changing the translation style (e.g. more formal language) or changing specific terms.

Adapt MediaCore cloud plugins for 3rd party software

MediaCore Inc. already wrote plugins for WordPress, Moodle, ... - let's make them work for MediaCore CE as well (if possible). Mostly we need to improve our JSON API for that (see "Improve the JSON API").

Video Transcoding

A plugin could provide local transcoding using ffmpeg (or utilize a transcoding web service different from Panda).

Improved User Video Uploads

The goal is that users should be able to upload thumbnails and manage their own videos, possibly with additional information/metadata.

Ideally a user has a custom page where he sees all his videos. Later on we could think about self-management of videos (similar to what is possible in the current MediaCore CE admin interface).

Comprehensive Documentation / Howtos

I suspect that a lot of functionality in MediaCore CE is not obvious to many users/developers so we could focus on exposing the existing functionality. This could include blog posts and screencasts.

  • How to host multiple MediaCore instances with a single source installation?
  • How to use git to manage local MediaCore modifications?
  • How to create plugins?
  • How to update/add a translation?
  • Hardware requirements/how to scale MediaCore.

How do you use MediaCore?

I have one more request to you: Please describe how you currently use (or plan on using) MediaCore CE. This will give me a bit more background on which niche MediaCore CE is currently best. Please indicate which of the following scenarios describe your usage best. You can also mention multiple scenarios e.g. if you operate multiple MediaCore instances.

Community Platform
You run a YouTube-like platform where end-users can watch videos without significant restrictions.

Integration Platform
You develop custom feature/plugins so that MediaCore can satisfy your requirements.

Internal Video Platform for an Organization
MediaCore CE hosts videos mainly for an organization (e.g. university).

Access-restricted Platform ("Video on Demand")
On your platform media is usually not available to all users but only to certain groups. For example you could run a video on demand platform where a user has only access to videos he payed for.

Personal Video Gallery
You publish a personal video gallery with content for your friends and family.

Get your voice heard

To submit your vote please post a message in the "user survey" thread until May 18 2013 (2013-05-12). Alternatively you can also send a private email to me (info@schwarz.eu). If have another feature in mind which is not listed above, you can also submit that of course.

I can't promise that I will implement the most popular feature but I will consider your votes seriously. If the outcome of this user survey is positive in general (e.g. more community involvement, maybe even additional developers or customers) I will send out a new survey for the 0.12 release.