March 16, 2012

Hi there,

First off thank you for everyone who as been very patient with the GIT / new FFMPEG abi-transition as I try to get Xuggle up-to-speed with all the latest changes.  I know it’s been a struggle. and I really appreciate all the feedback.

How Long Before The Tree is Truly Stable?

This transition has taken me a lot more time than expected because I bit off a lot of features, but we’re getting close.  Unfortunately I had hoped to be done by today (March 16, 2012), but unfortunately I’m probably a good two weeks still behind on the plan.  And on top of that, I’m about to take a two week trip (vacation) with my family so I’ll be out of pocket for while.

Which means some of the broken tree elements will remain for at least the rest of March and April, but I give you my commitment it’s the first priority when I get back (at the start of April).

New Features in Xuggler 5

To give people a sense of what all the construction is about, here are the features planned for Xuggler 5 and where they are in terms of completeness.  Hopefully it will whet the appetite for when I return.

Windows 64-bit Builds & Cross-Compiling

Description: Make Xuggler build on Windows 64-bit and cross-compile from linux

Status: 95% complete

Detail: Up until Xuggler 5.0, Xuggler would not build with Windows 64-bit.  And builds on Windows boxes for 32-bit would take about 8 hours (which was a serious disincentive to me maintaining that platform).  That has now been changed (and tested).  It does require you to cross-compile on Linux using mingw-64, but if you do that, you get set of DLLs that (provided they are in your PATH) can be found by Java and used with Xuggler.  To cross-compile Xuggler, install the cross-compiler suite, and then execute:

ant -Dbuild.configure.os=your-cross-compiler-name

For example on my cross-compile box (Ubuntu 11.10) I do:

ant -Dbuild.configure.os=x86_64-w64-mingw32

I call this 95% complete because I’m still tracking down user-reported issues on different platforms, but the major code work is done.

“No-Install” Xuggler

Description: Download xuggle-xuggler.jar and go!

Status: 50% complete for supported operating systems.  POC is done and ‘jar-able’ libxuggle.dll builds on all supported operating systems.  Packaging still requires work.

Detail: This has actually been the single most requested feature in Xuggler’s history and I’m taking a stab at it.  The benefit of it is you will NOT need to ship a separate installer for Xuggler — Xuggler will load native code from the JAR.  For many reasons it’s a non-trivial feature.  Once complete, building from source will be more difficult (slightly) but using Xuggler will not require building by anyone on Windows 32 or 64-bit platforms (Windows Vista and higher), and Mac (x86 and x86_64 platforms only).  I will do a post with full documentation on this, but this one feature is the thing that is causing the most build issues.  Note: xuggler will still be native code — the key difference is that the runtime will try to load the native code from the JAR file and avoid having to set LD_LIBRARY_PATH, PATH or DYLD_LIBRARY_PATH.

A word of warning — once this is done, the xuggle-xuggler.jar will grow from it’s current size (about 1MB) to probably over 100MB.  Don’t worry — there will be options for those who are scared by that 🙂

Maven POMs that Work

Description: Xuggler 5 will publish a maven POM that works and is tested.

Status: 0%

Detail: I haven’t started on this yet but it’s how I plan to test that the “no-install” code works.  All of the Exhaustive tests currently in Xuggler will move to a “xuggle-xuggler-test” project in GIT, and that will be built with Maven, not Ant/IVY.  Xuggler itself will continue to be built with ant/ivy (maven cannot easily handle native code, even with some of the great plugins out there).

WebM Support

Description: Incorporate Google’s WebM and VP8 encoder into Xuggler

Status: 90% complete.

Detail: VPX is in the build and builds on our supported platforms.  I still need to add unit tests though to make sure it doesn’t crash at run-time.


Description: Make reading and writing to ‘rtmpe://’ URLs work.

Status: 100% complete (although I cannot auto-test).

Detail:  The major change here (and it was major) was to get openssl to auto-build with Xuggler.

Latest FFmpeg, X264 and libRTMP Releases

Description: Switch Xuggler to use the new FFmpeg APIs and make it easy to integrate FFmpeg changes.

Status: 99% complete.  We have included the latest FFmpeg, X264 and libRTMP releases as of 3/16/2012.

Detail:   Apparently RTPS streaming has some issues but otherwise everything works.

GIT Transition

Description: Migrate from SVN to GIT

Status: 90% complete

Detail: I have transitioned completely to GIT, but the auto-build system (i.e. has not been upgraded.  Personally I have found GIT to be hugely annoying (given how many sub-projects I have to use) and not easy to use.  But it’s the way the world is going, and since most of my upstream projects have moved, we’ve moved too.


So exciting changes are coming, but since most change involves some pain, there’s a little pain along the way.  Again, thanks for everyone’s support, and I’ll be back online at the start of April.

– Art