Oh! One more thing. You need to have 'MPEG12Sources=1' under the '[A2DP]' section in /etc/bluetooth/audio.conf
For everything else, defaults should be fine. I also found it beneficial to performance to set the following lines in /etc/bluetooth/hcid.conf lm accept,master; lp hold,sniff,park; On Thursday 26 February 2009 09:33:42 you wrote: > It's only possible to do through gstreamer, unfortunately. ALSA doesn't > support it. (I don't even know if the ALSA API could even be used for that > purpose.. I'm sure someone with more knowledge than me can answer that) > > I use debian, so I don't know if step by step instructions would be useful to > you or most people here. (I wouldn't really want to come up with them > anyway..) so I'll just give general instructions. > > Also FYI, I'm using bluez-3.36 .. if someone wants to try it on bluez 4 and > tell me if anything is different please let me know what you discover. > > Step 1: > Here's how you 'pair' them: (bluez calls it bonding) > http://wiki.bluez.org/wiki/HOWTO/Bonding > > The way I did the pairing is by running bluetooth-applet from the bluez-gnome > package, and then going ahead with step 2, and it automatically attempted to > pair along with a spiffy GUI pin request as soon as it detected that I was > trying to make an audio connection while the headset was in pairing mode. > > Step 2: > Run the following python code. (I think I tried to do this from > bluetooth-properties from the bluez-gnome package, but I don't think it > worked. You might have better luck) > > ---- > #!/usr/bin/python > import sys > import getopt > import dbus > > bus = dbus.SystemBus() > > bmgr = dbus.Interface(bus.get_object('org.bluez', '/org/bluez'), > 'org.bluez.Manager') > bus_id = bmgr.ActivateService('audio') > > imgr = dbus.Interface(bus.get_object(bus_id, '/org/bluez/audio'), > 'org.bluez.audio.Manager') > > optlist, args = getopt.getopt(sys.argv[1:], '', > ['list','connect=','disconnect=','help']) > > for opt,val in optlist: > if opt == '--list': > for path in imgr.ListDevices(): > idev = dbus.Interface (bus.get_object(bus_id, path), > 'org.bluez.audio.Device') > print "%s Name: \"%s\" Address: \"%s\"" % (path, > idev.GetName(), idev.GetAddress()) > elif opt == '--connect': > path = '' > if (val[0] == '/'): > path = val > else: > path = imgr.CreateDevice(val) > idev = dbus.Interface (bus.get_object(bus_id, path), > 'org.bluez.audio.Sink') > idev.Connect() > elif opt == '--disconnect': > imgr.RemoveDevice(val) > else: > print 'usage: ', sys.argv[0], '[ --list, > --connect=[XX:XX:XX:XX:XX, /org/bluez/input/device0], > --disconnect=/org/bluez/input/device0, --help ]' > break > ---- > > Put the headset in pairing mode and do something like ./audtool.py > --connect=XX:XX:XX:XX:XX and you can verify it later with ./audtool.py > --list (If you haven't bonded yet, this is when the UI will ask you for the > PIN) > > If you want to use AVRCP (remote control headset buttons) you have to set the > headset to trusted so it can use the 'input' bluez service. I'm not really > sure how to do this except through the bluetooth-applet API. That API will > simply ask you every time if you want to allow input, and/or establish trust. > If your bluez still uses hidd, I think you're SOL for that entire feature, > and/or it will be complicated and manual. > > Step Pi*r^2 > gstreamer and bluez under debian don't talk to eachother properly. gstreamer > (Specifically the mp3parse element in the mpegaudioparse plugin from the > gst-plugins-ugly package) announces its channels as 'joint-stereo' and > 'dual-channel' and bluez expects to see either 'joint' or 'dual' .. I've done > some bug reporting to gstreamer and debian.. and hopefully one of the > upstream maintainers decides to change it so that they're in sync. > > I extracted the source of gstreamer and made the change there. > > Step 3: > At this point, you should be able to play any gstreamer supported codec to > your bluetooth headphones like this: > > gst-launch filesrc location=<ogg, mp3, whatever> ! decodebin ! audioconvert ! > audioresample ! sbcenc ! a2dpsink device=XX:XX:XX:XX:XX:XX > > And you can play mp3s directly with: > > gst-launch filesrc location=<some mp3 file> ! mp3parse ! a2dpsink > device=XX:XX:XX:XX:XX:XX > > In the second case, you may want to also pass --gst-debug > a2dpsink:5,avdtpsink:5 in case you experience any problems. > > Unfortunately, there is no trivial way to convince a gstreamer application to > output mp3s the second way. The source has to be patched to use a completely > different pipeline :( Also it's up to the software to detect that it's an > mp3 file (ostensibly by file extension), and use the different pipeline > accordingly. Which leads me to my problem. gst-launch doesn't support > pausing or any other rudimentary features, so I'm stuck with SBC in the > meantime... and I'm hoping that someone out there is making a gstreamer > player that I can patch up for this purpose. > > I'm currently using rhythmbox, and I'm considering patching that.. but I > figure if I'm going to go through all the effort, I might as well do it on a > player that is designed for palmtops. > > On Wednesday 25 February 2009 21:19:18 you wrote: > > > > Hi, > > > > Daniel Benoy wrote: > > > > > > Apparently bluez supports sending mp3 data directly to bluetooth stereo > > > headphones, rather than using CPU taxing SBC compression encoding. > > > > > > (FYI: The way to test direct mp3 is like this: gst-launch filesrc > > > location=<some mp3 file> ! mp3parse ! a2dpsink device=XX:XX:XX:XX:XX:XX > > > ... > > > > > I'm in the process of making a new media player (OK well - 2 formats as of > > now mp3 and ogg - with maybe aac later if I can get a GPL codec) called > > intone. It is essentially aimed at reducing CPU usage by using integer based > > codecs (libmpg123 and tremor). I'm currently playing 44100 hz ogg files at > > about 17-19% CPU usage. > > Anyhow, your finding is very interesting. If you could post some more > > details - the version of bluez, your audio.conf, hcid.conf etc and a step by > > step method of sending data to the bluetooth headset (including headset > > bonding) that would be helpful. > > > -- Daniel Benoy http://daniel.benoy.name _______________________________________________ Openmoko community mailing list community@lists.openmoko.org http://lists.openmoko.org/mailman/listinfo/community