Lately there has been some exciting activity on the player / video front; Brion 
has done a first pass at integrating ogv.js[1], multimedia team and volunteers 
have been submitting fixes and enhancements to the TMH extension[2], including 
long standing issues such as dynamically loading the lib to reduce page payload 
[3].  In this email we outline: why upgrade, how things have diverged, and 
architecture choices to be made.  

= Why Sync with Upstream? =

Over the past two years a teams of developers have been hard at work on the 
kaltura player library. . Some of the relevant notes: 

        * Modern skin, theming, templatized plugins components with inherited 
plugin types, clean separation of JSON config, CSS, html / templates, and 
Javascirpt plugins.  
        * Native bridge; enables js-buisness & display logic with of native 
software video playback; i.e would enable wmf components ( captions and content 
license ) to be used with native playback  software such as the oggKit 
experiments Brion has done [5]
                See Architecture overview [4]
        * Iframe isolation from parent CSS / JS, Robust embed API. Thumbnail 
embed API for example; captures user gesture for playing iframe video on 
mobile-web ( would not require two clicks )
        * Bugs that show up within WMF such as some versions of android forcing 
content duration to 1 second, were addressed up-stream long ago.
        * Kaltura invests in testing a truly massive QA matrix of library 
features across dozens of platforms.
        * Keep up-to-date with new features and industry trends; MPEG-DASH, 
WebVTT etc.
        * Plugins for everything but "only loading what you need” we leverage 
the resource loader to load only whats needed based on json config. 
                If WMF ever need analytics or wanted to run a preroll during 
fundraising or whatever, would be simple modification to JSON player config. 

=  Things have diverged =

The original synchronization architecture had both mwEmbed[6] and TMH share 
identical copies of "mwEmbed modules”. Within mwEmbed we packaged the mediaWiki 
resource loader so that it works as a stand alone library. This is used within 
the mwEmbed project to this day [7]. Through the course of development of “v2” 
dependencies emerged against an additional module ( KalturaSupport ) which 
hosts the component definitions.[12] Additional minor enhancements to the 
resource loader were added to map JSON player plguin definitions to resource 
loader module lists, so that iframe build out logic can include all required 
resources prior to player invocation. There are likely other hidden 
dependencies on iframe based buildout introduced, and the kWidget embed / 
player API [8] assumes that the player always lives in an iframe.    

Furthermore within player v2 has more decencies on normalized metadata and 
source definitions, i.e plugins templates reference properties like 
{mediaProxy.entry.description} or {mediaProxy.entryMeta.customKey} that gets 
substituted for the respective value. 

= Stuff we need to regardless of Architecture choices  = 

1) Remove MwEmbedSupport extension, since TMH is the only consumer, bootstrap 
logic should be moved there. 
2) Synchronize shared resources / update libraries as paladox has started doing 
upstream [9]
3) Upgrade jQuery usage “promises" instead of custom code that pre-dated 
promises for doing similar things like triggerQueuedCallback [10]
4) other mediaWiki updates ( JSON language files [11], etc. ) 

= Architectural options going forward =

We have to decide between some options: 

1) update the modules, ( most similar to existing TMH architecture ) 
        Add kalturaSupport module, support hard coded JSON player config, keep 
projects in-sync via shared module copies. 
        Update the player libraries to deal with inline playback ( loses iframe 
isolation )
        Update embed logic to work against stand alone sources or video tag 
embed. ( loses some embed api features )
        Add mapping / bootstrap for player metadata and sources.
        
2) Use an ApiProxy within TimedMediaHander ( use WMF resource loader, but 
proxies the data services instead of an alternate embed API, i.e half way 
between 1 and 3  ) 

3) Completely isolate the player separate server / service that consumes 
mediaWiki API ( most similar to how we integrate with other non-kaltura 
playable entity services ) 
        Would mean player does not consume the same "resource loader" as other 
extensions
        The player would be a self contained service run on separate servers.  
        Would mean kWidget.embed calls would be used to embed the player. 
        Would be easy to keep in-sync with upstream since we essentially just 
have to maintain a "JSON xslt”

= links =

1) http://lists.wikimedia.org/pipermail/multimedia/2014-July/000727.html
2) 
https://gerrit.wikimedia.org/r/#/q/status:open+project:mediawiki/extensions/TimedMediaHandler,n,z
3) https://gerrit.wikimedia.org/r/#/c/145583/
4) 
http://knowledge.kaltura.com/kaltura-player-v2-toolkit-theme-skin-guide#Kaltura%20Player%20v2%20Toolkit%20Architecture%20Diagram
5) 
https://brionv.com/log/2014/07/05/ogvkit-native-ogg-vorbistheora-playing-on-ios/
7) https://github.com/kaltura/mwEmbed/tree/master/includes/resourceloader
8) http://player.kaltura.com/docs/api
9) https://github.com/kaltura/mwEmbed/pulls/paladox2015
10) https://bugzilla.wikimedia.org/show_bug.cgi?id=65428
11) 
https://blog.wikimedia.org/2014/04/10/mediawiki-localization-file-format-changed-from-php-to-json/
12) 
https://github.com/kaltura/mwEmbed/tree/master/modules/KalturaSupport/components
_______________________________________________
Multimedia mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/multimedia

Reply via email to