walid.kharroubi(a)hraccess.com :
but do you think it's possible to implement a
streaming service in xwiki
using groovy class with importing a streaming api(the streaming server will
be vlc for example)?
Xwiki is better suited as a framework for creating and presenting streaming
applications but not for the actual streaming implementation. It is correct
to look at implementations specifically designed for streaming (e.g. VLC,
Darwin <http://developer.apple.com/opensource/server/streaming/index.html>,
etc) rather than trying to tame performance issues such as object/thread
overhead,. out-of-memory and running out of threads -- common issues when
many long-running streaming downloads occur in a servlet environment..
On the client end, Xwiki creates the HTML/CSS/javascript scaffolding, with
streaming implemented via streaming "plugins" in the web-browser (e.g.
mozilla plugin, a java applet or flash). These plugins could be accessed in
Xwiki via special velocity macros that cleanly encapsulate all the
scaffolding required to achieve this. The macro would allow easy
parametrization and placement of these "streaming UI objects" in a
Xwiki-based document/application.
For example VLC has a mozilla broser plugin that you can control with a
javascript API.
http://www.videolan.org/doc/play-howto/en/ch04.html#id310965 suggests the
following could be encapsulated within a velocity macro to implement this
functionality:
<embed type="application/x-vlc-plugin"
pluginspage="http://www.videolan.org" version="VideoLAN.VLCPlugin.2"
width="640"
height="480"
id="vlc">
</embed>
<script language="Javascript">
<!--
var vlc = document.getElementById("vlc");
vlc.audio.toggleMute();
!-->
</script>
In my experience, it is straightforward to integrate these kinds of things
with Xwiki, once you get adjusted to the possiblity of "computation"
happening in three places and at different times: browser, server and
plugin; and figuring out the dependencies and interactions therein.
Unfortunately, from a pragmatic perspective, expecting your users to install
VLC or other special browser plugins is the kiss-of-death. Most users will
just blow it off and move on to something else that uses Flash and "works
right out of the box" for the majority of users. (Therefore you can be
doctrinaire about being "purely open source" and it just means you'll be
strongly limiting your customer base and needlessly limiting your own
project's potential for success).
It would be nice to have a truly abstract streaming media macro that would
implement the same generic API for streaming media within Xwiki. The macro
would determine at run-time, whether the browser is enabled with specific
plugins needed to display a specific media type (such as the VLC moz
plugin); if not available, the macro would dynamically switch-in the
flash-based equivalent for people using IE or who don't want to install the
VLC moz plugin. For example given a "mp4", the macro would first attempt to
use VLC, on failure it might try the platform's browser-embeddable media
presenter if media-compatible (e.g. MS windows media), and would finally try
a "generic" flash player such as the Jeroen "JW" Wijering players (
http://www.longtailvideo.com/players/ ).
Who else is working on streaming media issues in Xwiki? Would love to see
some group interest and coding participation towards better integration of
streaming media in Xwiki.
Niels
http://nielsmayer.com
PS: some of my work-in-progress on some streaming clients in Xwiki (not
actual velocity macros yet, but at least they work).
http://nielsmayer.com/xwiki/bin/view/Macros/JW-Player?raw=1
http://nielsmayer.com/xwiki/bin/view/Macros/YT-Chromeless?raw=1