Overview | History | Future work | Download & build | Credits | Contact us
Work with A2DP started with a basic SBC encoder that used floating-point math to compress the audio stream. Negotiating the connection to the headset and transmitting the stream was tested and realized using a standalone application, a2play. This application does not work well with other apps; audio is typically piped in using standard input rather than working as a normal audio device. There is another application, a2recv, that listens for incoming streaming audio and plays the stream on the computer's built-in speakers.
Some rudimentary experimenting with AVRCP resulted in two different test applications: avrecv listens for an AVRCP connection from a headset and displays received messages on the console. avsnd makes the outbound connection to the specified headset and similarly listens for messages.
A2DP similarly needed a userspace alsa plugin in order to make it work with mp3 players and movie players.
An additional complication is the fact that the alsa interface is too simplistic to cover the advanced signaling that bluetooth provides, like ringing a headset and waiting for an answer or responding to a track advance event from an A2DP/AVRCP set.
The first attempt at SCO alsa plugin fortunately involved an intermediate daemon to mitigate some of these issues.
As a second iteration on A2DP alsa plugins, a daemon ("a2dpd") was designed to control connections to the headphones and to mix audio from multiple applications together.
The fixed-point-only SBC encoder was moved into its own project on sourceforge.
The btsco package will no longer be maintained. The continued presence of old audio plugins and the (messier) combined fixed-point/floating-point code in the btsco project has been a source for some confusion and these should be removed at some point.