Wednesday, May 14, 2014

Bluetooth audio Support using Gstreamer


The focus during the Bluetooth audio service development was to fix all the limitations of Bluetooth ALSA and PlugZ and present a flexible infrastructure that could be used for all Bluetooth audio related profiles. The following requirements were identified during the design:

• Treat mono and high quality profiles as equal
With the Service Discovery Protocol (SDP) it is possible to retrieve the supported profile list from
any remote Bluetooth device. Together with the information about the audio stream it is possible to select the correct profile automatically and do the needed conversation transparent for the user.

• Integrate with all multimedia frameworks Choosing ALSA as the basic multimedia framework
is not the best choice. Actually ALSA is pretty bad when it comes to virtual sound cards and
that is what Bluetooth audio is. There is no audio hardware directly attached to the system. All headsets, headphones or speakers are connected via an invisible radio link.
The frameworks GStreamer and Pulse Audio [7] are much better when it comes to handling virtual audio devices. So there is no need to treat them as second class citizens.

• Low-latency and high performance
In cases where the host has to handle all audio data processing, it should be done the most efficient
way and data copying should be avoided at all costs. This increases the performance and at the
same time results in good latency. In addition this will reduce the power consumption.

• Full integration with D-Bus
Provide a full D-Bus interface for control and notifications. It should allow creating, configuring and
controlling audio connections.Integrate with the Audio/Video Remote Control Profile (AVRCP) for handling keys and displays on remote devices.

GStreamer support

With the usage of GStreamer the possibilities become more flexible. The GStreamer framework allows a lot of configuration since everything can be abstracted into elements or containers and then a pipe can be constructed out of them. The GStreamer plugin that provides access to the Bluetooth
audio services consists of multiple elements that can be combined in various ways. Figure 4 shows the details of these elements.
# gst-inspect bluetooth
Plugin Details:
Name: bluetooth
Description: Bluetooth plugin library
Filename: libgstbluetooth.so
Version: 3.30
License: LGPL
Source module: bluez-utils
Binary package: BlueZ
Origin URL: http://www.bluez.org/
rtpmp3pay: RTP packet payloader
a2dpsink: Bluetooth A2DP sink
avdtpsink: Bluetooth AVDTP sink
mp3parse: Bluetooth MP3 parser
mp3dec: Bluetooth MP3 decoder
mp3enc: Bluetooth MP3 encoder
bluetooth: mp3: mp3
7 features:
+-- 6 elements
+-- 1 types

GStreamer plugin

1 comment: