[pulseaudio-discuss] Bluetooth A2DP AAC passthrough?

Arun Raghavan arun at accosted.net
Tue May 3 03:05:40 UTC 2016

On 2 May 2016 at 21:56, Pierre-Louis Bossart
<pierre-louis.bossart at linux.intel.com> wrote:
> On 5/2/16 8:50 AM, Arun Raghavan wrote:
>> On 2 May 2016 at 19:06, Pierre-Louis Bossart
>> <pierre-louis.bossart at linux.intel.com> wrote:
>>> On 4/29/16 10:17 PM, Arun Raghavan wrote:
>>>> On 29 April 2016 at 18:57, Tanu Kaskinen <tanuk at iki.fi> wrote:
>>>>> On Wed, 2016-04-27 at 16:53 +0200, Nicole Færber wrote:
>>>>>> Hello,
>>>>>> I know this has been a topic several times now. I searched the
>>>>>> mailinglist archives, FAQ, current GIT and other internet resources
>>>>>> for
>>>>>> a practical way with current versions of BlueZ5 and Pulse Audio but it
>>>>>> seems that most proposed patches have been dropped, am I correct with
>>>>>> this assessment?
>>>>>> My personal goal would be to have a mode to playback AAC content to a
>>>>>> paired and connected A2DP device capable of A2DP-AAC - in my case a
>>>>>> Parrot Zik2.0. If such a way already exists I would be really happy
>>>>>> for
>>>>>> an advice on how to actually use it, e.g. using paplay?
>>>>>> If such a mode does not yet exist are there plans to implement other
>>>>>> codecs? At least as pass-through? What is needed? Is it already being
>>>>>> worked on? Can I give a hand? As usual time is limited and my
>>>>>> knowledge
>>>>>> on A2DP and especially Pulse Audio is limited but I am willing to
>>>>>> help.
>>>>> Compressed audio passthrough with bluetooth is not supported. I think
>>>>> the feature would be welcome, though. I'm not aware of anyone working
>>>>> on it.
>>>>> We already support compressed passthrough with alsa, so it's not
>>>>> necessary to start from absolute scratch. Alsa wants compressed audio
>>>>> wrapped in "IEC 61937" encapsulation, and that format also makes it
>>>>> easier for pulseaudio to deal with the data, because the encapsulation
>>>>> makes it possible to convert between number of bytes and time (that is,
>>>>> a certain number of bytes always corresponds to the same amount of
>>>>> time, which isn't true with plain AAC audio). For that reason we
>>>>> require applications to do the encapsulation, so pulseaudio doesn't
>>>>> have to do any changes to the data.
>>>>> I suppose bluetooth doesn't use the IEC 61937 encapsulation, so the
>>>>> question arises if we should use it in pulseaudio when doing
>>>>> passthrough with bluetooth. I think it would make sense to use
>>>>> encapsulation at least in the initial implementation, because that
>>>>> would then retain the nice property that we don't have to understand
>>>>> anything about the AAC format as such. The bluetooth module would then
>>>>> have to do the unpacking of the AAC data from the IEC 61937
>>>>> encapsulation, which hopefully is reasonably straightforward.
>>>> Pierre-Louis Bossart did a PoC based on this and I'd expanded on this
>>>> a while back, for MP3:
>>>>   https://cgit.freedesktop.org/~arun/pulseaudio/log/?h=bt-passthrough
>>>> However, this is a hack and doesn't make sense as the solution we
>>>> upstream.
>>>> We need to be able to deal with compressed audio as-is. The compressed
>>>> API supports this at the ALSA layer, and I really want to be able to
>>>> expose that cleanly. I'm not in favour of adding codec-specific code
>>>> in PulseAudio, but I think it should be possible to have something
>>>> working without that.
>>> Bluetooth adds format changes and RTP packetization that is not needed
>>> for
>>> compressed data playback in a sound card. if you are thinking of having a
>>> single layer to handle compressed playback, well, that is not going to
>>> work.
>>> You will need extra code in Bluetooth sinks.
>>> Specifically for AAC over A2DP the data needs to be reshuffled to add the
>>> LATM layer. The documentation for this is not quite self-explanatory.
>> We could push the reshuffling into LATM to a higher layer, same as for
>> the IEC61937 payloading, and we should be able to do the same for the
>> RTP payloading as well.
> Then this higher layer would need to have access to configuration parameters
> such as MTU, etc. Not sure how that information would be propagated.

Hmm, good point. We could have that on the format info of the sink.

> Regardless, if anyone wants AAC support it'd be easier to prototype with
> gstreamer and push the data into BlueZ. the integration in pulseaudio can be
> done later.
> If it helps here are some pointers
> https://developer.apple.com/hardwaredriver/BluetoothDesignGuidelines.pdf
> https://tools.ietf.org/html/rfc3016

You should be able to get an RTP/LATM stream with aacparse and
rtpmp4apay already.


More information about the pulseaudio-discuss mailing list