Apr
03
Перевод инфы Bluez-audio | 3 April 2009, 00:05

Сейчас я занята разработкой плагина/программы для работы с A2DP-профилем Bluetooth через стек Bluez. Мои попытки разобраться достаточно быстро привели к простому результату – я перевела описание с сайта bluez-wiki(http://wiki.bluez.org/wiki/Audio). Теперь пердставл. перевод всем читалем, думаю кому-нибудь это может пригодиться :)

Bluetooth-Аудио

Было сделано много попыток для включения различных аудио-профилей в BlueZ.

В настоящее время в него включен аудио-сервис, который вписывается в новый, основанный на D-Bus, фреймворк и включает в себя все профили с достаточным, для использования каждым, гибким способом. Чтобы уменьшить копирование аудио-данных в памяти и сделать задержки как можно меньше, с аудио-сервиса снята ответственность за передачу собственно звука, а он лишь передает дескриптор сокета аудио-потока плагину ALSA, который, в свою очередь, уже будет кодировать/декодировать и передавать/принимать аудио-данные.

Вот некоторые вещи, которые уже работают:

  • общесистемное (System-wide) звуковое устройство (смешивает звуковые потоки при одновременном доступе);
  • для комбинированных настроек, выбирается «голос» или «низкое качество» в драйвере(в зависимости от требований клиентского оборудования);
  • изменение передачи звукового потока с проводного устройства на беспроводное (возможно, будет нужен звуковой сервер, например, pulseaudio).

SBC-кодек

SBC-кодек недавно был доработан. Он использует 32-битную математику с фиксированной точкой, расположен в подкаталоге sbc/ в bluez-utils. Существует несколько оптимизаций кодека, но они имеют значение только для 200МГц+ устройств.

bluez/utils/audio

Подкаталог audio в bluez-utils содержит текущую версию аудио-сервиса и включает в себя плагин для ALSA.

Некоторые важные файлы, используемые аудио-сервисом:

manager.c - содержит описание интерфейса org.bluez.audio.Manager
headset.c – содержит описание интерфейса org.bluez.audio.Headset
sink.c – содержит описание интерфейса org.bluez.audio.Sink
avdtp.c – содержит описание сигнального протокола AVDTP
control.c содержит описание интерфейса org.bluez.audio.Control и уровней AVCTP и AVRCP
a2dp.c – описывает локальный SBC-поток и callbacks
unix.c – содержит код для общения с плагином ALSA
ipc.h – содержит структуру протокола обмена между аудио-сервисом и alsa
pcm_bluetooth.c содержит текущую реализацию плагина ALSA

D-Bus API

Наиболее свежую версию D-Bus API, которое используется аудио-сервисом можно найти в
audio/audio-api.txt.

План

Аудио-профиль состоит из двух частей:

  1. Аудио-сервис
    Обеспечивает D-Bus API для приложений. Отвечает за управление соединениями, а так же приемом/передачей управляющих данных от аудиоустройств.
  2. Плагин ALSA
    Получает дескриптор аудио-потока от аудио-сервиса. Сообщает об изменении громкости аудио-сервису. Обеспечивает кодирование/декодирование аудиоданных и передает/принимает их от гарнитуры (прим. пер.headset).

Высокоуровневая структура интерфейса D-Bus аудио-сервиса:

org.bluez.audio.Manager

Это главный интерфейс аудио-сервиса доступный через объект /org/bluez/audio. С помощью него можно добавлять/удалять удаленные аудио-устройства и исследовать их возможности. Каждому удаленному устройству сопоставляется уникальный объект (например /org/bluez/audio/device1), который включает в себя один или несколько интерфейсов описанных ниже.

org.bluez.audio.Device

Данный интерфейс есть у всех аудио-устройств. Через него можно получить, например, Bluetooth-адрес устройства (BDR, прим. пер.).

org.bluez.audio.Headset

Этот интерфейс доступен для аудио-устройств, которые могут быть использованы как гарнитура (headset role, прим. пер.), поддерживающая профили Headset Profile(HSP) и/или Handsfree Profile (HFP).

org.bluez.audio.Gateway

Этот интерфейс доступен для аудио-устройств, которые могут быть аудио-шлюзом(audio gateway role, прим. пер.) для профилей HSP и/или HFP.

org.bluez.audio.Sink

Этот интерфейс доступен для аудио-устройств, которые могут подключаться(sink role, прим. пер.) к устройствам, работающим по профилю A2DP.

org.bluez.audio.Source

Этот интерфейс доступен для аудио-устройств, которые могут быть источником(source role, прим. пер.) для работы по профилю A2DP.

org.bluez.audio.Control

Этот интерфейс доступен для аудио-устройств, которые поддерживают профиль AVRCP.

Файловая структура:

общие файлы
ipc.h - содержит общие структуры и др., определяющие протокол обмена между ALSA и аудио-сервисом

аудио-сервис
audio.conf - файл конфгурации для включения/выключения профилей. Настройки роутинга PCM/HCI SCO.
unix.c – содержит реализацию протокола обмена между аудио-сервисом и плагином ALSA
manager.c - описывает интерфейс org.bluez.audio.Manager
HSP/HFP
headset.c – описывает интерфейс org.bluez.audio.Headset
gateway.c – описывает интерфейс org.bluez.audio.Gateway

A2DP
avdtp.c – описывает протокол AVDTP
a2dp.c - описывает локальный SBC-поток
sink.c – описывает интерфейс org.bluez.audio.Sink.  Использует avdtp.c.
source.c – описывает интерфейс org.bluez.audio.Source. Использует avdtp.c.

AVRCP
control.c – описывает интерфейс org.bluez.audio.Control и уровни AVCTP и AVRCP

ALSA plugin
pcm_bluetooth.c
ctl_bluetooth.c

3 April 2009, 00:05  
Рубрика: html-марание, softoкопательство  |  
Метки:   |  

Листинги патчей ;)


Хотите пропатчить? ;)

Вы должны быть залогинены что бы оставить патч.


  karina ©
2007-2010