I tried JMF but it was/is far too unfinished. I was trying to stream audio and video over a 100Mbps LAN - synchronized. I could not. I managed to get it streaming, but the video would play at half speed until the audio was lagged by about 1 minute!! Then the video could suddenly keep up and stay 1 minuted behind the audio. I played with all sorts of buffering settings, tweaked everything I knew to tweak, asked on the JMF mailing list… and got nowhere.
In less time than I spent trying to get JMF to work and coming to the conclusion that it simply doesn’t, I managed to code my own streaming of MJPEG and audio from scratch. It needs a bit higher bandwidth, but it did the trick at the time.
I plan to revisit it at some point to see what sort of latency I would get if I compressed the audio with OGG or something. Because my application is interactive (e.g. adjusting brightness and contrast, audio filter settings of the capture device hich is on a remote machine and viewing the result via the network), I needed minimal delay and preferrably lossless audio so the filters and EQ could be adjusted accurately.
I wanted to use JMF, going in to the project I thought JMF was going to make my life easier… it had the opposite effect.
It seems Sun did not take JMF seriously… I guessed it was probably because it is hard to do video/audio codecs well without native code. Anyway JMF is left as no where near production quality, and last I heard ther was only a single person at Sun even remotely associated with it. He answers about 1 message a month on the JMF mailing list.
It’s too bad, because it could have been a very nice API.
Anyway… after all that critisism… If you just need to play a low resolution animation locally JMF could probably do it. 1024x768 at 60fps is HUGE in terms of full motion video. Normal Standard def TV is 720x486 at 30fps. I’m not sure that JMF coudl handle it very well.
Note that ImageIO happens to have a rather severe memory leak if you reuse the reader. You can work around it by resetting some things between frames, but that has a side effect of totally killing the performance. I think that bug was in 1.4.1, I don’t know if it was fixed in 1.4.2.