Red5 Backwards Compatibility Report

February 24, 2009

Update Period

06-FEB-2009 to 24-FEB-2009

Summary

We upgraded the JRuby and Groovy jars that we use. Also, Application Listeners now pay attention to return values.

Changes With Compatibility Impacts

Revision Description
R3544 Upgraded Groovy to 1.5.7, and updated associated dependencies
R3523 ApplicationListeners now pay attention to return values. That means you can use listeners to control appConnect(), roomJoin() etc. by returning false. If your current listeners return true, then no changes are required. If your current listeners return false, you will need to review and decide whether to return the right value.

More Details

For details on these and all other changes to red5:
http://code.google.com/p/red5/updates/list

Previous Reports

You can find the last report here.

What Is This Report

Red5 is under active development and as such APIs and the implementation are subject to change at any time.

To help with that problem and as a service to the Red5 team, every two weeks Xuggle publishes updates giving a summary of major changes since the last report that MAY require changes to your existing Red5 applications.

Other changes may have been made as well, but we do not expect them to cause backwards compatibility issues.

See here for more background.


FITC Demo

February 24, 2009

Hi folks,

In case you couldn’t make it to Amsterdam for the Infrared5/Xuggle presentation, Robert and I recorded a new demo video just for you.

Check it out.

– Art


Xuggler 1.20 FINAL

February 19, 2009

Introducing Xuggler 1.20 – The First Official Release Get It Here.

Summary

1.20.FINAL is the first full release of Xuggler; thanks to everyone who tested to help us get here.

This release is the same as 1.19.RC5, but fixes the last critical bug we had.

Release Notes

Encoding Files on Windows

In some earlier releases encoding files on disk in Windows failed if you asked Xuggler to interleave data for you (Linux and Mac worked great), but encoding live streams on windows worked fine. We fixed the root cause of this in this release, and so Windows now works like Linux and Mac.

Convert Tool Can Strip Audio or Video

We introduced two new options to Converter.java: “-ano” strips out all audio and “-vno” strips out all video.

Latest FFMPEG Version

1.19.RC5 ships with FFMPEG version #17451 and libswscale version #28655.

Known Issues

There are no known critical issues in this release.

Issues Fixed

  • Issue #61: Windows encoding producing corrupted files
  • Issue #64: Seg Fault while running xugglerTestStreamCoderProperty.exe

Enhancements Added

  • Enhancement 65: would like way to have Converter.java strip audio and video

Tests

No new tests were added, but several existing tests were modified to more quickly catch regressions of issue #61.

  • Java Tests: 179 (+0)
  • Native Tests: +0

Source Control Versions

Xuggle Version: 1.20.209.Final

– Hudson Good Build

http://build.xuggle.com/job/xuggle_java_xuggler_jdk5_i386_winxp/23/

Dynamic Revisions
    * svn://svn.mplayerhq.hu/ffmpeg/trunk : 17451
    * svn://svn.ffmpeg.org/mplayer/trunk/libswscale : 28655
    * http://theyard.googlecode.com/svn/theyard/code/trunk/share/gnu/cxxtest/cxxtest-3.10.1 : 170
    * http://xuggle.googlecode.com/svn/trunk/build/java : 205
    * http://xuggle.googlecode.com/svn/trunk/java/xuggle-xuggler : 209

- Static Dependencies
    * libx264: ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20090125-2245.tar.bz2
    * libmp3lame: http://downloads.sourceforge.net/lame/lame-398.tar.gz: 3.98
    * libspeex: http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz: 1.2 RC1

On Windows, here's what we built our installer with:
    * Mingw gcc/g++ 4.2.4: http://www.tdragon.net/recentgcc/
    * Msys 1.0.11
    * mingw-runtime 3.15.1
    * w32api 3.13
    * gmake 3.81
    * binutils 2.91
    * yasm 0.7.2.2153
    * Msys Perl 5.6
    * Ant 1.7
    * Java JDK 1.5
    * MSFT C++ Visual Studio 2005
    * NullSoft NSIS Installer  2.42
    * SWIG 1.3.36 modified with doc gen capabilities
    * Subversion 1.5

It’s Always Darkest Before the Dawn

February 18, 2009


We’ve been frantically getting ready for FITC and we’re just about there. Except for one little detail.

As we posted earlier, our code was failing to encode files to disk on Windows but worked elsewhere, and it had been eluding us for a few weeks now. Well last night in a fit of madness, we uncovered the error.

We’ll have a fix out later today, and that (drum roll please) will also be our official Xuggler release. That is, we’re no longer Beta. Have at it folks!

– Art

p.s. in case anyone was curious, you can read about it on the ffmpeg-devel users list (details here).


Request for Help

February 17, 2009

Hi folks,

We’re close to calling Xuggler a final release — just one critical issue remains. Unfortunately it’s a doozy and we haven’t been able to track it down.

It’s Issue #61: encoding files on disk is broken on Microsoft Windows. It works great on any other operating system, and strangely encoding live video works great on Windows as well. Just encoding to disk is broken.

We spent the entire weekend (and then some) trying to get to the bottom of this, and while we have some clues, we’re not there yet. But we could use some help. We think it’s a memory corruption problem only showing up on Windows, but we have no tool to verify. We’d like to use IBM’s Rational Purify tool, but it costs $900, which is beyond our current budget.

If anyone can donate a Rational Purify license to us, we’d really appreciate it. If you can, e-mail me at aclarke (at) xuggle.com. Otherwise, we’ll keep hammering away on this, but we don’t have an ETA for a fix yet (hard to know that without a cause).

Thanks for your patience,

– Art & Robert


FITC Amsterdam

February 15, 2009

Hi folks,

Just wanted to let you know Robert and I will be visiting Amsterdam next weekend for the FITC conference. We’ll actually be demoing Xuggler live on stage during the Innovating with Red5 presentation. If you’re going to be there, please stop by and say hi. We’ll also be hanging out at the Infrared5 booth during the show.

– Art


Xuggler 1.19.RC5

February 12, 2009

Introducing Xuggler 1.19 Release Candidate 5. Get it here.

Summary

1.19.RC5 is a new feature release and a bug fix release. And there are some big changes:

  • Support for encoding h.264 video using libx264
  • We now expose all FFMPEG AVOption configuration options for use in Xuggler
  • As usual, we include the latest FFMPEG version
  • And a few other interesting features you can find out about in the details.

Details

H.264 Encoding Support

First off, big thanks to Georges-Etienne Legendre who stepped up and provided the starting edits for h.264 support. Georges has submitted the 2nd change from the community (his contribution is licensed under LGPL).

We support h.264 support with libx264 out of the box now by building libx264 along with Xuggler. This enables the FFMPEG libx264 codec.

There are a few known issues with h.264 encoding right now. First, libx264 does not pass all of our Valgrind memory check tests, but doesn’t appear to crash the Java Virtual Machine so we’re enabling it anyway. Second, we’re seeing some issues under windows. See further in this note for details.

IConfigurable Exposes FFMPEG Configuration Options

FFMPEG‘s libav library has a lot of configurable options. The ffmpeg command-line tool exposes a bunch of them as:

  • AVCodecContext AVOptions
  • AVFormatContext AVOptions
  • SWScaler AVOptions

We now expose 100% of those options, using the same option names and valid settings on the following interfaces:

  • IStreamCoder
  • IContainer
  • IVideoResampler

We do this with the new IConfigurableinterface which all those options implement. To use, you can write code such as:

IStreamCoder coder = stream.getStreamCoder();
coder.setProperty("flags", "+cgop+umv");
coder.setProperty("me_method", "+esa");
coder.setProperty("qcomp", 0.6);
double example = coder.getPropertyAsDouble("qcomp");
coder.open();

You can also query all available options, and potential settings using IConfigurable. For an example of this, pass -Dxuggle.options to the GetContainerInfo demo.

java -cp $XUGGLE_HOME/share/java/jars/xuggle-xuggler.jar -Dxuggle.options com.xuggle.xuggler.demos.GetContainerInfo yourfile.mpg

Latest FFMPEG Version

1.19.RC5 ships with FFMPEG version #17166 and libswscale version #28537.

The FFMPEG team is preparing for an actual release, tentatively named 0.5 Bikeshed. That release should come out around the end of February 2009. This version of Xuggler contains an early version of that (the FFMPEG team is not planning to add new features between now and 0.5 — just bug fixes).

We’ll release another Xuggler once FFMPEG 0.5 goes final, but if you want, you can always use the latest Xuggler tip-of-tree build to get the latest FFMPEG.

Flushing buffered packets

You can use IContainer.flushPackets(); to tell Xuggler to flush any buffered packets to its output. By default Xuggler will buffer until it has a default buffer size (which you can configure). It defaults to 32k of data. However if you’re writing to a network, it can be handy to force a flush. Hence this method.

YASM Support

If you install yasm on your machine, then when we build Xuggler we’ll include lots of assembly optimizations for libx264 and FFMPEG.

Other Minor Changes

  • Support for some new PixelFormat types
  • Support for getting the current URL from an IContainer
  • Support for using assembly optimizations on all supported platforms if you’ve installed yasm

Known Issues

Windows Encoding for non FLV Containers Broken

We have some encoding issues on Windows that we’re trying to fix. Right now encoding h.263 into an FLV container does work (and hence our Red5 integration works).
But other containers (for example MOV) seem to get corrupted data. We’re trying to figure out why (the ffmpeg.exe we ship with works correctly). Let us know if you have ideas why.

Make Sure You Clean Build Tree Before Build If Using SVN

If you just update your svn checkout of Xuggler, you’ll need to do a ant clobber before you rebuild. Sorry.

Issues Fixed

  • Issue #43: jerkyness of java video filters
  • Issue #58: Errors when decoding mp3 audio
  • Issue #14: com.xuggle.xuggler.ConvertTest output doesn’t play in Quicktime
  • Issue #51: non monotone timestamp error thrown when transcoding video WITH audio
  • Issue #54: 1.18.142 No video output using Converter.java
  • Issue #40: -vbitrate not being honored
  • Issue #55: DecodeAndCaptureFrames demo captures frames at incorrect interval
  • Issue #49: Backup Hudson
  • Issue #48: The Hudson Build Server runs out of disk space frequently

Enhancements Added

Tests

  • Java Tests: 179 (+17)
  • Native Tests: +4

Source Control Versions

Xuggle Version: 1.19.189.RC5

– Hudson Good Build

http://build.xuggle.com/job/xuggle_java_xuggler_jdk5_i386_winxp/18/

– Dynamic Revisions (From Hudson)
* svn://svn.mplayerhq.hu/ffmpeg/trunk : 17166
* svn://svn.ffmpeg.org/mplayer/trunk/libswscale : 28537
* http://theyard.googlecode.com/svn/theyard/code/trunk/share/gnu/cxxtest/cxxtest-3.10.1 : 170
* http://xuggle.googlecode.com/svn/trunk/build/java : 153
* http://xuggle.googlecode.com/svn/trunk/java/xuggle-xuggler : 189

– Static Dependencies
* libx264: ftp://ftp.videolan.org/pub/videolan/x264/snapshots/x264-snapshot-20090125-2245.tar.bz2
* libmp3lame: http://downloads.sourceforge.net/lame/lame-398.tar.gz: 3.98
* libspeex: http://downloads.xiph.org/releases/speex/speex-1.2rc1.tar.gz: 1.2 RC1

On Windows, here’s what we built our installer with:
Mingw gcc/g++ 4.2.4: http://www.tdragon.net/recentgcc/
Msys 1.0.11
mingw-runtime 3.15.1
w32api 3.13
gmake 3.81
binutils 2.91
yasm 0.7.2.2153
ActivePerl 5.10
Ant 1.7
Java JDK 1.5
MSFT C++ Visual Studio 2005

NullSoft NSIS Installer 2.42
SWIG 1.3.36 modified with doc gen capabilities
Subversion 1.5