Ivanovo Linux Users Group - Not logged in
Forum Help Search Login
Previous Next Up Topic Администрирование / Мультимедиа / A2DP, bluetooth и Линукс :) (36867 hits)
- By LOE (Site/forum admin) Date 01.10.07 21:57 Edited 01.10.07 22:12
Настала пора написать историю и по тематике "мультимедиа" ;-)

Предыстория:
есть bluetooth донгл, с помощью которого замечательно работает связка комп-мобила.
есть bluetooth гарнитура (стерео) с помощью которой удобно слушать музыку и разговаривать по мобиле.
Почему бы не передавать ту-же музыку с компьютера на гарнитуру?!

И вот, после пары вечеров поисков, все заработало.
Источником информации выступили страницы: bluetooth-alsa, gentoo-wiki HOWTO, bluez HOWTO и, конечно, bluez.org

По порядку.
1. Требуются bluez-libs и bluez-utils версии 3.19. В текущей слаквари версия старая, поэтому пришлось качать новые с bluez.org
1.1 Если libs скомпилировались и поставились без проблем (используя SlackBuild из слаки), то utils потребовали вмешательства в SlackBuild:
опция --enable-all в параметрах запуска configure не сработала, пришлось дописать:
CFLAGS="$SLKCFLAGS" \
CXXFLAGS="$SLKCFLAGS" \
./configure --prefix=/usr \
--sysconfdir=/etc \
--mandir=/usr/man \
--localstatedir=/var \
--enable-all \
--enable-serial \
--enable-audio \
--enable-network \
--enable-input \
--build=$ARCH-slackware-linux


1.2. Компилим и ставим libs и utils. В /etc/rc.d/rc.bluetooth во всех _ENABLE параметрах поставил true, не помешает и что-то лишнее. Поскольку используется скрипт автоматической передачи PIN-кода на устройства, то в /etc/bluetooth/passkeys создал файлик с именем типа 00:11:22:33:44:55, содержащий 0000

1.3. Содержимое hcid.conf:
#
# HCI daemon configuration file.
#

# HCId options
options {
        # Automatically initialize new devices
        autoinit yes;

        # Security Manager mode
        #   none - Security manager disabled
        #   auto - Use local PIN for incoming connections
        #   user - Always ask user for a PIN
        #
        security auto;

        # Pairing mode
        #   none  - Pairing disabled
        #   multi - Allow pairing with already paired devices
        #   once  - Pair once and deny successive attempts
        pairing multi;

        # Default PIN code for incoming connections
        passkey "0000";
}

# Default settings for HCI devices
device {
        # Local device name
        #   %d - device id
        #   %h - host name
        name "Computer (%d)";

        # Local device class
#       class 0x120104;
        class 0x3e0100;

        # Default packet type
        #pkt_type DH1,DM1,HV1;

        # Inquiry and Page scan
        iscan enable; pscan enable;

        # Default link mode
        #   none   - no specific policy
        #   accept - always accept incoming connections
        #   master - become master on incoming connections,
        #            deny role switch on outgoing connections
        lm accept;

        # Default link policy
        #   none    - no specific policy
        #   rswitch - allow role switch
        #   hold    - allow hold mode
        #   sniff   - allow sniff mode
        #   park    - allow park mode
        lp rswitch,hold,sniff,park;
}
Содержимое rfcomm.conf:
#
# RFCOMM configuration file.
#
rfcomm0 {
#       # Automatically bind the device at startup
        bind no;
#       # Bluetooth address of the device
        device 00:11:22:33:44:55;
#       # RFCOMM channel for the connection
        channel 1;
#       # Description of the connection
        comment "headset";
}


2. Ставим libsbc:
cvs -d:pserver:anonymous@sbc.cvs.sourceforge.net:/cvsroot/sbc login
cvs -d:pserver:anonymous@sbc.cvs.sourceforge.net:/cvsroot/sbc co sbc
cd sbc
./bootstrap
./configure --prefix=/usr
make
sudo make install


3. Ставим plugz:
cvs -d:pserver:anonymous@bluetooth-alsa.cvs.sourceforge.net:/cvsroot/bluetooth-alsa login
cvs -d:pserver:anonymous@bluetooth-alsa.cvs.sourceforge.net:/cvsroot/bluetooth-alsa co plugz
cd plugz
./bootstrap
./configure --prefix=/usr --sysconfdir=/etc
make
sudo make install


4. Создаем в домашнем каталоге файл .a2dprc Заготовка содержится в alsa-plugins/a2dpd/sample.a2dprc (из plugz-а), поэтому покажу только действующие строки:
[a2dpd]
rate=44100
#channels=2
#plugin-rate=32000
sbcbitpool=32
flags=0
enablereversestereo=1
enableautoconnect=1
timeout=20
cmdplay=dcop amarok player play
cmdpause=dcop amarok player pause
cmdprev=dcop amarok player prev
cmdnext=dcop amarok player next
cmdnew=dcop amarok player play
cmdstop=dcop amarok player stop
enableavrcp=1
enablerereadconfig=1
enabledebug=1
#logfile=/dev/null
enablestdin=0
enableredirectalsa=0
address=00:11:22:33:44:55
your alsa output (default : plughw:0,0) you have to know what to do
#alsaoutput=


5. В домашнем каталоге создаем файл .asoundrc. Вообще, в различных экспериментах он у меня "распух", привожу полностью, что сейчас работает:
pcm.a2dpd {
        type a2dpd
}
pcm.bluetooth {
        type bluetooth
        device 00:11:22:33:44:55
}
pcm.headset-sco-resample {
        type plug
        slave {
                pcm "headset"
                rate 8000
                format S16_LE
                channels 1
        }
}
pcm.headset {
        @args [BDADDR TIMEOUT]
        @args.BDADDR {
                type string
                default "00:11:22:33:44:55"
        }
        @args.TIMEOUT {
                type integer
                default 6000
        }
        type        sco
        bdaddr      $BDADDR
        timeout     $TIMEOUT
}
ctl.headset {
        type sco
}
pcm.a2dpdsoftvol {
        type softvol
        slave {
                pcm "a2dpd"
        }
        control {
                name "Bluetooth Headset"
                card 0
                count 1
        }
}


6. Для нормальной работы требуется ядро > 2.6.19. Качаем патч и патчим ядро (у меня сейчас работает 2.6.22.9). Убеждаемся, что включено: Networking support / Bluetooth subsystem support / Bluetooth device drivers / HCI USB driver / SCO (voice) support
Ставим ядро как обычно.

7. Запускаемся:
/etc/rc.d/rc.bluetooth start # от рута
a2dpd -v -g -o # от пользователя, в домашнем каталоге которого создавали файлики с точками


8. Переводим гарнитуру в режим сопряжения

9. Для проверки запускаем, например, mplayer:
mplayer -ao alsa:device=a2dpd песня.mp3

В окне запуска a2dpd должны наблюдать, как пошел процесс сопряжения и должна пойти музыка в наушники ;-)

10. Можно настроить amaroK : в настройках, иконка Движок, ставим модуль вывода alsa, в полях Моно и Стерео прописываем a2dpd
Поскольку, в ~/.a2dprc прописали команды для амарока, то кнопками на гарнитуре можно управлять переключением песен в списке амарока.

11. _Наслаждаемся_ :-)

PS. Конечно, bluetooth расчитан на ~10м по расстоянию. Но тем не менее, использование полученных "беспроводных наушников" возможно. А если донгл подключить через usb-удлинитель, то площадь квартиры можно запросто покрыть.
Одно плохо - аккумулятор в гарнитуре садится

PPS. Везде по тексту 00:11:22:33:44:55 - это mac адрес гарнитуры. Узнается как обычно: hcitool scan при активированной bluetooth подсистеме в линуксе и гарнитуре в режиме сопряжения.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By cutter Date 02.10.07 05:13
Хорошая, полезная статья! Спасибо!

Появился весомый повод обзавестись bluetooth-наушниками... 8-)
Parent - By G0thic Date 03.10.07 06:19
Или переходник. Уши должны быть правильные, а с БТ не всегда хорошие. Для музыки же покупаем. Для разговоров и обыкновенная БТ гарнитура сойдет.
Статья супер. Все в наших руках.
Когда кругозор человека сужается к минимуму, он называет это своей точкой зрения.
Parent By LOE (Site/forum admin) Date 03.10.07 08:24
У меня Jabra-BT320s (самая дешевая стерео-bt гарнитура) - в нем гнездо под наушники. вставляем другие и юзаем ;-)
Правда с этой моделью джабры есть свои заморочки, но я их успешно обхожу.

С другой стороны - слушаем во время движения (по улице), где много постороннего шума.
Слушать и наслаждаться полноценно качеством можно только в тишине и покое, а тогда и проводные уши можно включить.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By slam Date 12.11.07 19:02
Рад за содеянное, но (оффтопик конечно) не страшно сидеть с надетым на голову передатчиком с рабочей частотой 2400 МГц и мощностью ~100 мВт? Я подумал... и решил отказать себе в таком удовольствие.
Parent By LOE (Site/forum admin) Date 12.11.07 19:16
С чего ты решил, что я сижу с надетым на голову передатчиком? ;-)
Есть модельки, которые _не_ сидят на голове. hint
Ну и во-вторых, думаешь я как приду домой, сразу наушники надеваю (тем более bluetooth)?
У меня была "идея фикс": если можно под виндой, то надо сделать и под линуксом. Что я и решил.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent By G0thic Date 13.11.07 14:48
Спасибо! В принципе ничего сложного как оказалось.
Когда кругозор человека сужается к минимуму, он называет это своей точкой зрения.
Parent - By larissolb Date 02.07.09 18:23
а случаем не знаешь, что делать в этой ситуации.
имеется: eeepc 1000/Xandros со встроенным блютузом AzureBT 253, bluetooth-стерео гарнитура.
нужно настроить воспроизведение звука при просмотре фильмов и музычки..

все обгуглила - ниче не помогает( везде пишут про юсб-блютузы, а у мя встроенный..
Parent - By LOE (Site/forum admin) Date 02.07.09 18:53
Встроенный зуб - он ведь тоже не на пустом месте сидит. Передатчик тоже сидит на USB шине, только внутренней.
ИМХО делать аналогично. Выше описывал как сделать еще одно устройство вывода звука в alsa подсистеме. Если она на EEEPC взведена, то остается только пробовать.

Другое дело, что в свете новых ядер, новых KDE-4 (коими пользуюсь) и не полной готовностью нового bluetooth стэка давно это дело не ковырял.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By larissolb Date 04.07.09 12:48
вот не делается..все попровала..
Parent - By LOE (Site/forum admin) Date 04.07.09 12:58
Не имея такой железки, конкретно помочь не могу...
Только если будут изложены проделанные шаги и их результаты (включая логи), можно будет что-то подсказывать.
"No! Try not! Do. Or do not. There is no try." -- Yoda
Parent - By larissolb Date 05.07.09 13:01
начиная с 1 шага, bluez.. нет bluez для Xandros//
а собирать самостоятельно, к сожалению, не умею.
Parent By LOE (Site/forum admin) Date 05.07.09 17:01
Ну судя по поиску, с bluez стеком в xandros все в порядке.
Другое дело - A2DP, вот с ним и надо повозиться.
С другой стороны, с октября 2007 года утекло уже много воды и ситуация могла коренным образом поменяться.

Вообще, мой первый пост - это то, что описано в интернете, я просто собрал некоторые части воедино и описал в одном месте. Т.е. надо приложить руки, почитать руководства (в т.ч. как компилировать исходники да и просто ставить пакеты). Или ждать конкретных готовых решений.

PS. по большому счету, настройка A2DP в линуксе было для меня чисто академической задачей. Если в винде работает, то и в линуксе должно. И действительно - работает! Но использовать это не совсем удобно. Проще наушники воткнуть ;-)
"No! Try not! Do. Or do not. There is no try." -- Yoda
Previous Next Up Topic Администрирование / Мультимедиа / A2DP, bluetooth и Линукс :) (36867 hits)

Powered by mwForum 2.12.0 © 1999-2007 Markus Wichitill

Page created in 0.079s with 10 database queries.