Video streaming using Jingle library - Copy of the post on francisrobichaud.com
We’ve implemented the Smack API provided by Ignite Realtime which integrates a Java version of Google’s C++ Jingle library. The audio sessions over XMPP works almost out of the box using Jingle. As we needed video integration in one of our university project, we considered developing additional classes to support video format. After some nice hours of coding, we now have successfully accomplished this duty and we can post the source here with informations on how to get video working.
So here are the general steps to take to get a video session established between two parties. Please note that the way the libraries do not currently allow a simultaneous video and audio session. We might work on that in the next days.
1 - You need a XMPP server. Unfortunately, there are some differences in the Jingle integration of Google and Ignite Realtime. While we are able to connect to the GTalk server using Smack API, it is not possible to directly use Smack’s Jingle to create audio-video sessions with other GTalk users. The best thing is to use Ignitime Realtime’s Openfire application.
2 - Create users and add manage their rosters. Once the server is up, add several users via the web administration interface (http://localhost:9090). Then, the best thing is to use a XMPP client such as Ignite Realtime’s Spark application and add the users you want to be able to communicate with.
3 - Open Eclipse and get projects to compile. While this can seem quite easy for some people, it can be very painful for others. You will need 2 projects in your Eclipse workspace: the Jingle project available from a subdirectory in the Smack library and the project provided here. Both projects need a reference to smack.jar and smackx.jar. Jingle will also need to have all the jars in it’s /lib and /build/merge.
4 - Install JMF (link), open the JMF registry editor application once the installation complete. You will then have to hit detect devices to have any usb webcam found. Unfortunately for mac users, it seems like the iSight camera doesn’t get detected by the application. We have used a regular USB logitech camera for our successful tests.
5 - You will need two computers, one to act as a client and one as a server. The AVManager class has can be run has an application. The server waits for an XMPP Jingle session request while the client immediately tries to establish a connection with the first available contact on it’s roster.
Video Jinglle Library
replace your /jingle/source/org/jivesoftware/smackx/jingle/mediaimpl/jmf
from the Smack’s 3.0.4+ source code.