JPartyLine

Description

JPartyLine is a little VoIP application written for Java Web Start (Java 5.0, more specifically). It allows people to set-up online conference calls or party lines on their computers. One person has to run the server application to host the conversation. Then others can connect to that server to participate in the discussion. I imagine the application is similar in spirit to TeamSpeak, though I have never used that application, so I cannot be sure (JPartyLine may experience latency problems when running simultaneously with computer games, requiring the tweaking of the advanced parameters to achieve smooth playback).

Start a JPartyLine server

Connect to a JPartyLine server

Details

The JPartyLine applications require extra security permissions in Java in order to record audio on your computer and to transmit the audio across the Internet to other users.

By default, the JPartyLine server is configured so that people can hear themselves speaking. Some people find that annoying, so it can be disabled in the "Advanced" options by deselecting "Shared Client Signal" option (though it causes the server to use more processing power). Some sound cards produce a noisy signal, which might become excessive if lots of users are connected to a JPartyLine server. Increasing the "Silence Threshhold" in the "Advanced" options before connecting to a JPartyLine server should reduce this problem.

JPartyLine does not include any facilities for adjusting the volume. You have to use the volume controls of your operating system to do this.

The JPartyLine server can be executed headlessly (i.e. without a GUI) on the command-line using "java -jar jpartyline.jar [options]." You can then feed it the following options: -gui, -nofeedback, -password (password), and -port (port-number).

Implementation Details

JPartyLine is essentially a front-end and networking wrapper for the JSpeex implementation of the Speex codec. Basically, I was curious as to why VoIP wasn't integrated into more applications since I thought it should be relatively easy to throw something together by reusing existing sound codec libraries. It ended up being a little harder to do than I had originally thought, but still not particularly arduous.

Interfacing with Java's sound libraries is always a little hairy. Figuring out the best way to handle the network buffering was also a little tricky. I thought I could avoid having to deal with clock skew issues, but my sound card was out-of-synch with the rest of my computer, thereby requiring me to add some clock-skew compensation code. But those ended up being the only issues that I had to deal with.

The network protocol is designed to be as bare-bones as possible. Essentially, only the password, sequence number, and data are sent across the network. There is no security, out-of-band signalling, hand-shaking, RTP, RTCP, SIP, or whatever implemented.

The jar file of JPartyLine also contains the source code of the application. The JSpeex library is included in binary form (though the source code can be downloaded from the JSpeex website) and is subject to the JSpeex license. The Jakarta Commons CLI library is also included in binary form, which is subject to the Apache Software License.

[Home] [Up]