Linux 下蓝牙bluez分析及使用 (1)
由于Linux下蓝牙使用不及Windows下直观,致使使用时会出现一些小问题。虽然是小问题,但是由于普通的操作都具有顺序性,前面的中断了,后面的哪怕再简单,也无法继续了。正好近期工作与蓝牙与网络都有关,可以有时间和目标好好学习一下。闲话少说,进入正题。
我使用的Fedora 9, bluez的版本是
| |-- bluez-gnome-0.26-1.fc9.i386.rpm |-- bluez-gnome-analyzer-0.26-1.fc9.i386.rpm |-- bluez-gnome-debuginfo-0.26-1.fc9.i386.rpm |
先说说蓝牙耳机的使用吧:
打开耳机,使之处于可查找状态(公司的Motorola耳机:打开并长按,直到蓝灯逐渐变亮,并不闪烁),在计算机上使用:
| [ThinkPad]~$ hcitool scan Scanning ... 00:07:A4:F3:09:3C Motorola HT820 [ThinkPad]~$ |
可以看到已经扫描到了设备。注意,计算机上的bluetooth服务要打开。
我们将其地址记录:00:07:A4:F3:09:3C
进入主目录:
| [ThinkPad]~$ cat .asoundrc pcm.bluetooth { type bluetooth device 00:07:A4:F3:09:3C } |
按上面的格式创建alsa的配置文件。
下面我们进行与耳机的配对(为什么要进行配对呢,配对究竟做了哪些工作呢,实际上是建立蓝牙物理链路ACL(Asynchronous Connectionless), 另外的一种链路是SCO(Synchronous Connection Oriented)主要用来传输对时间要求很高的数据通信。)。
右键点击状态栏上的蓝牙图标(蓝色的,有个剪刀的图案),选择浏览设备,并使耳机处于可查找的状态。
选择耳机,连接,在弹出的对话框中输入0000(默认的PIN Personal Information Number),这样,耳机就与计算机配对成功了。可能会弹出什么Host is down什么的,没关系,这是因为在点击连接后,对应的消息处理函数里执行了命令nautilus --no-default-window "obex://[xx:xx:xx:xx]"后报出来的信息。
下面我们开始播放了
首先使用大家最熟悉的Mplayer
| [ThinkPad]/work$ mplayer -ao alsa:device=bluetooth mp3.mp3 |
这样我们就可以通过耳机听到动听的音乐了。好,我们边听音乐,边说说其他的播放器怎么使用蓝牙耳机。
gstreamer也是开源软件中非常有名的播放工具:
| [ThinkPad]/work$ gst-launch filesrc location=mp3.mp3 ! decodebin ! alsasink device=bluetooth sync=false |
你还可以通过自己编译bluez-utils-3.32,请注意多加一个参数--enable-gstreamer,这样在编译后就会有一个libgstbluetooth.so 的gstreamer的插件,将其放入/usr/lib/gstreamer目录下
| gst-launch filesrc location=mp3.mp3 ! decodebin ! audioconvert ! audioresample ! sbcenc ! a2dpsink device=00:07:A4:F3:09:3C |
这样也可以听到,这就是Bluetooth中非常有名的A2DP(Advance Audio Distribution Profile),如果你还有更深的兴趣,你可以看看gst对a2dpsink及sbcenc参数的调节,呵呵。
咱们看看Totem这个Linux下默认安装的播放器怎样使用bluetooth:
| [ThinkPad]~$ gconftool-2 -t string -s /system/gstreamer/0.10/default/musicaudiosink "sbcenc ! a2dpsink device=00:07:A4:F3:09:3C" |
这其实是修改了~/.gconf/system/gstreamer/0.10/default/%gconf.xml中的musicaudiosink。这里必须要有libgstbluetooth.so,或者
| [ThinkPad]~$ gconftool-2 -t string -s /system/gstreamer/0.10/default/musicaudiosink "alsasink device=bluetooth" |
不再使用时,
| [ThinkPad]~$ gconftool-2 -t string -s /system/gstreamer/0.10/default/musicaudiosink "autoaudiosink" |
有个小小的遗憾是还无法使用耳机上“前进”,”后退“的按键。
以上很多内容来自:
http://wiki.bluez.org/wiki/HOWTO/AudioDevices
有兴趣的朋友可以看看。
Linux 下蓝牙bluez分析及使用 (1)的更多相关文章
- 在Linux下,如何分析一个程序达到性能瓶颈的原因
0.在Linux下,如何分析一个程序达到性能瓶颈的原因,请分别从CPU.内存.IO.网络的角度判断是谁导致的瓶颈?注意现在的机器CPU是多核 1.用sar -n DEV 1 10 2.用iotop命令 ...
- 几款抓包工具在windows,mac,linux下的支持分析
抓包工具的使用 几款抓包工具在windows,mac,linux下的支持分析 抓包工具简介 Chrome/Firefox 开发者工具: 浏览器内置,方便易用 Fiddler/Charles: 基于代理 ...
- 以C语言为例完成简单的网络聊天程序以及关于socket在Linux下系统调用的分析
套接字是网络编程中的一种通信机制,是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单的说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程. 端 ...
- (转)Linux 下栈溢出问题分析解决 *** stack smashing detected *** XXXX terminated
Linux 下栈溢出问题分析解决 *** stack smashing detected *** XXXX terminated 1.利用gdb 或者valgrind 定位到具体的代码 最近在Linu ...
- Android/Linux下CGroup框架分析及其使用
1 cgroup介绍 CGroup是control group的简称,它为Linux kernel提供一种任务聚集和划分的机制,可以限制.记录.隔离进程组(process groups)所使用的资源( ...
- Linux下触摸屏驱动程序分析
[摘要: 本文以linux3.5--Exynos4412仄台,剖析触摸屏驱动焦点内容.Linux下触摸屏驱动(以ft5x06_ts为例)须要懂得以下学问: 1. I2C协定 2. Exynos4412 ...
- linux下进程权限分析
转自http://blog.chinaunix.net/uid-27105712-id-3349522.html 在linux下,关于文件权限,大部分人接触比较多,也比较熟悉了解.但是对进程权限一般知 ...
- linux下编译原理分析
linux下编译hello.c 程序,使用gcc hello.c,然后./a.out就能够执行:在这个简单的命令后面隐藏了很多复杂的过程,这个过程包含了以下的步骤: ================= ...
- linux下蓝牙开发(bluez应用)
编译blueZ-5.25 需要先编译安装以下包: bluez-libs-3.36.tar.gz expat-2.1.0.tar.gz dbus-1.10.0.tar.gz glib-2.26.1.ta ...
随机推荐
- php Apache配置伪静态的介绍
以下是摘抄http://jingyan.baidu.com/article/86112f132aa7462737978718.html的,作为记录,方便以后参考 现有的在线网上视频教程对伪静态的讲解比 ...
- 【u007】血色先锋队
Time Limit: 1 second Memory Limit: 128 MB [问题描述] 巫妖王的天灾军团终于卷土重来,血色十字军组织了一支先锋军前往诺森德大陆对抗天灾军团,以及一切沾有亡灵气 ...
- [Ramda] Count Words in a String with Ramda's countBy and invert
You can really unlock the power of ramda (and functional programming in general) when you combine fu ...
- Thrift写RPC接口
Thrift总结(二)创建RPC服务 前面介绍了thrift 基础的东西,怎么写thrift 语法规范编写脚本,如何生成相关的语言的接口.不清楚的可以看这个<Thrift总结(一)介绍>. ...
- 免费的 C/C++ 编译&解释 器列表
摘自<C++编程网>,详细介绍请参考http://www.cpp-prog.com/2009/0520/118.html MicrosoftVisual C++ 2008 Express ...
- Android在网络上分析获取图片(支持bmp格式)
Android学习系列 - 在网络上显示的图像(支持bmp格公式)) 参见例如,下面的代码: /** * 至Url地址上去照片.并返回Bitmap回来 * * @param i ...
- 一个里程碑,新网站实现全站https
本地验证node服务没问题后,上传到阿里云服务器上,发现无法访问.一开始以为是SSL证书有问题,去腾讯云SSL证书重新下载,还是不行.然后改node应用文件代码app.js,猜测是crt证书应该改成p ...
- CommonJS里module.exports与exports输出模块的区别
其实是一个东西,但有些注意点,可以参考CommonJS规范
- JavaScript创建日志文件并记录时间的做法
作者:朱金灿 来源:http://blog.csdn.net/clever101 try { var WSShell = WScript.CreateObject("WScript.Shel ...
- 反编译Jar包
Jar 包(Java Archive)是对 Java 程序的打包,它可能包含源码,也可能没有. 对于有包含源码的 Jar 包,在 Eclipse 工程里设定好 source code 路径后能直接查看 ...