搜档网
当前位置:搜档网 › 基于Android系统的FFmpeg多媒体同步传输算法研究

基于Android系统的FFmpeg多媒体同步传输算法研究

基于Android系统的FFmpeg多媒体同步传输算法研究
基于Android系统的FFmpeg多媒体同步传输算法研究

收稿日期:2011-03-11;修回日期:2011-06-22基金项目:国家自然科学基金(61070189)作者简介:胡成(1983-),男,硕士研究生,主要研究方向为信息

安全以及多媒体技术;任平安,副教授,硕士生导师,主要研究领域

为信息安全。

基于Android 系统的FFmpeg 多媒体

同步传输算法研究

成,任平安,李文莉

(陕西师范大学计算机科学学院,陕西西安710062)

要:FFmpeg 是一个开源跨平台多媒体数据解决方案,常被移植到各种嵌入式系统中。将FFmpeg 移植到Android 系统

中,

能够增加Android 系统对编解码格式标准的支持,但由于目前手机处理能力低,内存小等硬件配置因素,严重影响FFm-peg 对音视频流的解码效率,导致解码出的音视频数据无法同步。通过研究基于时间戳的多媒体音视频同步算法模型,将其引入到FFmpeg 中,并在Android 平台进行算法实验。实验证明,基于时间戳多媒体音视频同步算法模型能够有效地保证多媒体数据的同步。

关键词:FFmpeg ;多媒体;时间戳;音视频同步;Android 中图分类号:TP301.6

文献标识码:A

文献编号:1673-629X (2011)10-0085-03

FFmpeg Multimedia System Based on Android Synchronous Transmission Algorithm

HU Cheng ,REN Ping-an ,LI Wen-li

(School of Computer &Science ,Shaanxi Normal University ,Xi ’an 710062,China )

Abstract :FFmpeg is an open source multi-media data solution.It is independent to platform and often be ported to a variety of embed-ded systems.Porting FFmpeg to Android platform will increase the codec standards supported by Android.However ,the low processing power ,low memory and limited hardware configuration of the mobile phone ,seriously affected the codec efficiency of FFmpeg.And fi-nally led to audio and video data can not be synchronized.By studying the timestamp-based multimedia audio and video synchronization algorithm model and introduced it into FFmpeg ,this paper validated the effectiveness of it on Android platform.The experiments showed that the timestamp-based model of multimedia audio and video synchronization algorithm can effectively ensure the synchronization of multimedia data.

Key words :FFmpeg ;multimedia ;timestamp ;audio and video synchronization ;Android

0引言

FFmpeg 是一个开源跨平台多媒体数据解决方案,它包含非常先进的音视频编解码库Libavcodec ,支持超过90种编解码标准及RTSP 、

HTTP 、MMS 等多种网络传输协议。FFmpeg 通过C 语言实现,常被移植到各种嵌入式系统中

[1]

。Android 系统是Google 公司开

发的基于Linux 系统的开源手机操作平台,该平台由操作系统、中间件、用户界面和应用软件组成,号称是首个为移动终端打造的真正开放和完整的移动软件

[2]

。将FFmpeg 移植到Android 系统中,能够增加An-droid 系统对编解码格式标准的支持,提高Android 系统对多媒体信息处理能力,改善用户体验。但由于目前手机处理能力低、内存小等硬件配置因素,严重影响FFmpeg 对音视频流的解码效率,导致解码出的音视频数据无法同步。

1基于时间戳的多媒体同步传输模型

多媒体数据同步传输从广义上包含内容同步、空

间同步和时间同步。内容同步是指同一数据不同表示方式之间的同步。空间同步是指在某一时间点上不同媒体在显示设备上的位置关系。从狭义上,是各种媒体在时间上的同步关系

[3]

。在实际传输过程中,存在

单个媒体流中相邻媒体单元所经历的时延抖动及音频和视频的相关媒体单元的时间差,即偏移。有媒体内偏移和媒体间偏移两种,相应地存在着偏移许可范

第21卷第10期2011年10月

计算机技术与发展

COMPUTER TECHNOLOGY AND DEVELOPMENT

Vol.21No.10Oct.2011

[4]

,如音视频媒体内最大时延均为0.25s ,最大时延抖动均为10ms ;音视频媒体间偏移在不同条件下也有相关的范围,如视频动画在相关的条件下,允许偏移范围是?120ms ,而音频在背景音乐条件下,允许偏移范围是?500ms ,这些参数很大程度上依赖于具体的应用。基于时间戳的多媒体同步传输模型从狭义范围内保证各路媒体数据在时间上的同步

[5-7]

在多媒体流时间信息中,音频流通过采样率表示当前音频数据速度,视频流通过帧率表示当前视频帧数据时间。作为一种时间信息的重要补充,多媒体流时间信息中提供DTS (Decoding Time Stamp )和PTS (Presentation Time Stamp )用于各路多媒体流的同步。以MPEG 编码标准为例,

MPEG 的语法结构主要分三层:传输(Transport stream )层、

PES (Packetized Elemen-tary Stream )层,和ES (Elementary Stream )层。MPEG 算法的特点是在空域和时域上都进行压缩编码。在三层码流结构中都带有表示时间的信息。ES 中有Tem-poral-reference ,

PES 中有显示时间标签和节码时间标签,而传输层中有节目参考时钟

[8 10]

。图1是传输流、

PES 流、ES 流之间关系示意图

图1

传输流、

PES 流、ES 流之间关系示意图针对传输的多媒体数据流,选择一个参考时钟,以参考时钟为基准对每个数据块打上时间戳,在播放显示多媒体数据时,读取数据块的时间戳,同时参考当前参考时钟上的时间来安排播放

[11,12]

。基于时间戳的

多媒体同步传输算法模型如图2所示

图2基于时间戳的多媒体同步传输算法模型

当对解码完的多媒体数据(音频或视频)进行显示播放时,提取多媒体数据块中的时间戳信息,对比当前的参考时间,如果多媒体数据块的时间戳小于当前

的参考时间,就尽快播放当前数据,甚至直接丢弃当前多媒体数据;如果多媒体数据块的时间戳大于参考时间,则该数据块就立即转入挂起状态,等待播放

[13 15]

2

FFmepg 音视频同步算法实现

2.1

FFmepg 多媒体解码流程

FFmpeg 提供了一系列多媒体数据处理函数,利用

这些函数可以完成音视频文件的解码播放功能。FFmpeg 对音视频数据的解码流程如图3所示

图3FFmpeg 音视频数据的解码流程

首先通过av_register_all ()函数完成FFmpeg 系统支持的编解码格式注册,

然后通过av_open_input_file ()函数打开本地或者处于网络服务器端多媒体文件。打开多媒体文件后,利用av_find_stream_info ()找到多

媒体文件中的视频流、音频流对应的流索引ID 。avco-dec_find_decoder ()与avcodec_open ()使用视频流、音频流ID ,

完成视频解码器与音频解码器的初始化工作,

avcodec_alloc_frame ()会为解出的每帧视频开辟一个缓存,avcodec _decode _video ()开始真正的解码工作

[16]

2.2

FFmepg 音视频同步算法实现

FFmepg 提供了DTS 和PTS 参数,其中DTS 表示解码时间戳,

PTS 表示显示时间戳。当通过解包函数av_read _frame ()从多媒体数据流中获得一个数据包时,

PTS 和DTS 的信息也会保存在包中,但PTS 并不是解码出

来的原始帧的PTS ,因此无法利

用该PTS 进行多媒体数据同步。

当通过avcodec_decode_video ()函数对解出的数据包解帧时,

avcodec_decode_video ()将调用一个函数·68·计算机技术与发展第21卷

来为每一帧申请一个缓冲。因此在FFmpeg解帧时,利用一个函数来保存一个包的时间戳,来进行时间戳的校正。基于FFmpeg的音视频同步法伪代码如图4所示。

ref_clock=get_audio_clock();//根据音频播放时间获得参考时间diff=vp->pts-ref_clock;//当前帧的播放时间戳与参考时间的差值

sync_threshold=(delay>AV_SYNC_THRESHOLD)?delay:AV_ SYNC_THRESHOLD;

if(fabs(diff)<AV_NOSYNC_THRESHOLD){

if(diff<=-sync_threshold)//视频落后于参考时钟(音频){

diff=0;//不需要延时

}else if(diff>=sync_threshold)//视频领先于参考时钟(频){

diff=2*delay;//增加延时

schedule_refresh(is,(int)(diff*1000+0.5));//延时控制video_display(is);//显示视频图像

图4FFmpeg的音视频同步算法伪代码

2.3FFmpeg的移植

操作系统:Windows xp

编译环境:Cygwin1.7.6

开发平台:Android2.2

NDK版本:Android-ndk-r4b

Cygwin是Windows操作系统下的类Linux环境,是FFmpeg项目的编译环境。Android-ndk是Android 的c/c++程序集成开发平台,利用NDK可以将c/c++程序编译成Android系统能够执行的动态库文件(.so)。

编译移植步骤如下:

a)首先进行配置。在ffmpeg下创建一个config.sh 配置文件

b)在cygwin中执行config.sh文件

$chmod+x config.sh/*改变config.sh 文件的执行权限*/

$./config.sh

c)编写makefile文件。Android的makefile文件不同于一般的情况下Linux中的makefile文件,因此需要重新编写FFmpeg的makefile文件[10]。例如在ffm-peg\libavcodec下,Android.mk内容如下:

LOCAL_PATH:=$(call my-dir)

include$(CLEAR_VARS)

include$(LOCAL_PATH)/../av.mk

LOCAL_SRC_FILES:=$(FFFILES)

LOCAL_C_INCLUDES:=\

$(LOCAL_PATH)\

……

LOCAL_SHARED_LIBRARIES:=libavutil

LOCAL_MODULE:=$(FFNAME)

include$(BUILD_SHARED_LIBRARY)

编写FFmpeg工程下其它的源文件的makefile方法类似。

d)在cygwin中执行make。具体命令为:

$make

最终,FFmpeg工程被编译到Android系统中。

3实验结果

为验证基于时间戳的多媒体同步传输模型在FFmpeg应用的效果,选择三种不同码率的多媒体文件进行测试,测试环境如下:

移动终端:HTC G3

CPU主频:528MHz

内存:288MB

移动终端操作系统:Android2.2

表1是分别采用多媒体同步传输算法与不使用同步传输算法的多媒体播放器播放不同码率的flv视频格式的对比。从表1可以看出,采用音视频同步方法,可以有效的缓解高码率文件播放时带来的音视频不同步现象,达到了预期的目的。

表1音视频同步对比表

视频文件含音视频同步不含音视频同步

500kbps FLV文件很流畅,无音视频不同步很流畅,无音视频不同步

800kbps FLV文件流畅,无音视频不同步

流畅,部分画面出现音视频

不同步

1200kbps FLV文件

不流畅,出现跳帧现象,

音视频基本同步

不流畅,音视频长时间不同

4结束语

随着多媒体技术的广泛运用,用户对多媒体应用程序的要求也越来越高。文中提出了一种适用于FFmpeg的音视频同步方法,并在Android2.2软件平台上进行了系统测试,具有良好的效果,为其他移动终端嵌入式多媒体应用软件的开发给出了一些参考。

参考文献:

[1]吴张顺,张询.基于FFmpeg的视频编码存储研究与实现[J].杭州电子科技大学学报,2006,26(3):30-34.

[2]高焕堂.Google Android应用框架原理与程序设计36技[M].台北:广悦文化,2008:23-25.

[3]李笑佳,周兵,李晓强,等.视频重演中的同步技术[J].计算机工程,2005,31(2):64-66.

[4]张维明,吴玲达,老松杨.多媒体信息系统[M].北京:电子工业出版社,2002.

[5]吴炜,常义林.一种MPEG2媒体同步控制算法[J].系统工程与电子技术,2005,27(1):173-177.

[6]许延,常义林,刘增基.多媒体同步技术研究[J].西安电子科技大学学报:自然科学版,2000,27(4):504-509.

(下转第91页)

·

78

·

第10期胡成等:基于Android系统的FFmpeg多媒体同步传输算法研究

成。并通过纹理映射模拟烟花粒子的形状和颜色,非常逼真。效果图4是烟花在空中爆炸时渲染,帧刷新率达到了163fps ,画面渲染比较流畅,图5是渲染爆炸后粒子下落和消失时的渲染。两幅图基本对粒子系统周期进行了较好的渲染

[12]

图4烟花爆炸效果(1

图5烟花爆炸效果(2)

6结束语

文中利用OGRE 图形引擎的粒子系统原理,对烟

花进行了渲染,脚本和程序结合让渲染更加逼真。一方面充分对不规则模糊物体进行了很好的渲染,节省了成本,另一方面也具有较高性能的图形模拟表现,让

渲染画面清楚流畅。

由于烟花种类繁多,实现全部的烟花渲染是不可能的,这是文中不足之处。但是如果能够对粒子系统与场景管理进行很好的设置,将可以渲染出种类繁多的烟花渲染。

参考文献:

[1]Admin.OGRE 图象引擎介绍[EB /OL ].2010-06.http ://

www.azure.eom.cn /default.asp.[2]白建军,朱亚军,梁辉,等.OpenGL 三维图形设计与制作

[M ].北京:清华大学出版社,1998:378-391.

[3]鲁

萌,刘建波.三维地形显示中数据缓存与调度算法研究[

J ].微计算机信息,2010,4(1):210-212.[4]杨子华,刘宏芳.基于粒子系统模型的自然景物生成技术

应用研究[J ].计算技术与自动化,1998,17(3):20-23.[5]王宏炜,刘

越,王涌天.面向对象的通用粒子系统设计

[J ].系统仿真学报,2006,18(1):46-48.

[6]Reeves W T ,Blau R.Approximate and probabilistic algorithms

forshading and rending structured particle system [J ].Comput-er Graphics ,

1985,19(3):313-322.[7]张尚华.烟花燃放效果的仿真研究[D ].广州:中山大学计

算机与信息学院,

2006.[8]Steven P ,Reiss.An Engine for the 3D Visualization of Pro-gram Information [J ].Journal of Visual Languages &Compu-ting ,1995,6(3):127-129.[9]张

璞,陶丽娜.基于OpenGL 的岩石楔形体边坡三维分析系统[

J ].计算机技术与发展,2009,19(3):53-56.[10]张巧芳,李光耀.基于单幅图像的三维浏览图生成算法

[J ].计算机技术与发展,2010,20(1):43-47.

[11]Brundy A L ,Saltzman D H ,Emerson D ,et al.Sonographic fea-tures associated with cleft palate [J ].Clin Ultrasound ,1986,14:486-489.

[12]Monni G ,Ibba RM ,Olla G ,et al.Colour Doppler Ultrasound

and prenatal diagnosis of cleft palate [J ].Clin Ultrasound ,1995,23:檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪檪

189-192.

(上接第87页)

[7]王少燕.多媒体通信中的音视频同步问题研究与实现

[D ].西安:西安电子科技大学,2003.[8]鲁

萍,马光四.多媒体数据流实时传输速率研究及应用[D ].西安:西安建筑科技大学,2005.

[9]Moving Pictures Expert Group.MPEG-2TextModel 5.DocI-SO /IEC JTC1/SC29/WG11/N0400[S ].1993.

[10]Fibush D.Timing and Synchronization Using MPEG-2Trans-port Streams [J ].SMPTE Journal ,1996(7):395-405.[11]求是科技.Vc++音视频编解码技术及实践[M ].北京:人

民邮电出版社,2006.[12]陈

芳,沈晓军,陈

洁.多媒体同步技术的研究[

J ].北京工业大学学报,1996,22(4):110-114.[13]程文青,陈云鹤,徐

晶.一种适用于嵌入式媒体播放器的

音视频同步方法[

J ].计算机与数字工程,2007,35(2):161-163.[14]吴进,贺

辉,洪

辉.多媒体数据流实时传输技术的研

究[

J ].通信技术,2009,42(1):342-344.[15]刘

芳.基于时间轴模型的音视频同步的研究与实现[D ].南京:暨南大学,2008.

[16]ZHANG Wei-ming ,WU Ling-da ,LAO Song-yang.Multime-dia Informtion System [M ].Beijing :Publishing House of Elec-tronic Industry ,2002.

·

19·第10期蔡政策等:基于OGRE 粒子系统在烟花渲染中的研究

Android4.0的多媒体框架Nuplayer介绍

Android4.x 的RTSP 框架学习 ——NuPlayer 介绍 本文介绍如下内容: 播放框架介绍 RTSP 源介绍 HTTP 流媒体的区别 要研究的点 NuPlayer 框图: NuPlayer NuPlayerDriver ALooper <<接口>> MediaPlayerInterface NuPlayer::Renderer NuPlayer::Decoder ACodec::UninitializedState AHierarchicalStateMachine ACodec ACodec::UninitializedState ACodec::LoadedToIdleState ACodec::IdleToExecutingState ACodec::ExecutingState ACodec::ExecutingToIdleState ACodec::IdleToLoadedState ACodec::FlushingState AHandler 1 * * 11* <<接口>>NuPlayer::Source *1 NuPlayer::HTTPLiveSource NuPlayer::RTSPSource ALooper 1* MyHandler * 1 ARTPConnection ARTSPConnection ALooper 1* mNetLooper for ARTPConnection ARTPSource ARTPAssembler AAVCAssembler AAVCAssembler AMPEG4AudioAssembler AH263Assembler AAMRAssembler AAMRAssembler AMPEG4ElementaryAssembler ARawAudioAssembler AnotherPacketSource <<接口>>MediaSource APacketSource * 1 * 1* 1OMX AHandler

多媒体一体机(带有安卓系统)使用说明

. .. 关于带有安卓系统的多媒体一体机使用说明 带有安卓系统多媒体一体机是智能触摸电视与电脑的结合,与以前的多媒体一体机操作上存在一 些区别,现将操作使用中注意的问题说明如下: 1、智能触摸电视与传统触摸电视有什么区别? 智能触摸电视是带有安卓操作系统的电视,就如同智能手机一样,可以安装安卓版的程序,具有可扩展性。当电脑出现问题不能用时,依然可以单独使用带有安卓系统的电视完成一些简单的应用,如播放视频、播放幻灯片等操作,但注意这些应用与电脑中的程序不一样,类似于安卓系统的手机功能。而传统触摸电视则不具备这些功能。 2、为什么触摸屏有时不灵敏? 我校的多媒体一体机使用的触摸屏采用的是红外感应的原理,电视四周边框处存在扫描感应区,如果屏幕边框脏了,如落上较多的粉笔灰,就会影响触摸感应,所以一定要及时清理电视屏四周边框污物,否则就会影响触摸感应的灵敏度。 3、如何启动多媒体一体机? 情况一:如果一体机电源插头没有插,当一插入插头,一体机连通电源后,会自动启动电视和电脑。 情况二:在接通电源,并且电视和电脑都处于关闭状态下时(也就是电视指示灯在红色时),启动一体机很方便,只需要点击电视下方面板中“电源”按钮,就会打开电视,进入安卓界面,同时电脑也会自动启动,无需单独启动电脑。启动后在安卓界面的左上角较大的窗格中会显示出电脑的界面,只需点击这个窗格,就可以切换到电脑的界面。 4、如何关闭一体机? 步骤一:正常关闭电脑。也就是点击电脑桌面左下角开始菜单中的“关机”。 步骤二:关闭电视。在关闭电脑后电视画面会先变成蓝屏再切换到安卓的界面。这时再点击电视下方面板的“电源”按钮,关闭电视。电视指示灯会变成红色。 步骤三:拔下一体机电源插头。 5、为什么一体机断电后再通电会自动启动(或一插上电插头一体机就会启动)? 由于安卓系统设计的原因,多媒体一体机的电视和电脑在切断电源后,再接通电源时,无论原来一体机是开着或是关着的,都会自动启动。这就导致在停电后,只要电源插头插着的一体机都会自动启动。这也是有些老师放学时明明关闭了一体机,而第二天来时一体机却开着的一个原因。所以注意,当使用完一体机后,特别是放学以后,一定要拔下一体机的电源插头。再次使用时,插上电源插头后,一体机会自动启动,不需要再按“电源”按钮。如若确实接通电源后一体机没有启动,再按照问题3中的方法启动。 6、为什么一体机没有声音,重新启动后才有声音? 这主要是因为一体机在关闭时,只关闭了电视,而电脑没有正常的关闭。电视的安卓系统和电脑系统都要使用到声卡,如果正常切换两个系统时,声卡的控制权会进行切换,声音不会出现问题。当电脑没有关闭,而电视关闭了以后,再打开电视时,电视的安卓系统会抢占声卡控制权,使用电脑系统没有声音。这时只需要重启电脑就会有声音了。所以一定要正确的关闭一体机。 7、为什么有时在安卓系统和电脑系统之间切换后,触摸屏会没有反应? 由于安卓系统和电脑系统使用触摸屏时都要加载触摸屏驱动,切换后驱动会重新加载,需要一定的时间,这时会导致被误认为是触摸屏失灵或死机。只需要等一会驱动加载完成后就可以正常使用了。 8、出现电脑死机时怎么办? 电脑死机后,可以长按电视面板下方“电脑”按钮10秒,电脑会强制关机,然后再按一次“电脑”按钮,再次启动电脑。如果无法以此种方式重启电脑,则需要拔下一体机插头,电视指示灯灭掉后,重新插上,一体机会自动启动。

Android蓝牙协议指南

Android蓝牙协议栈 Android蓝牙协议栈使用的是BlueZ,支持GAP, SDP, and RFCOMM规范,是一个SIG认证的蓝牙协议栈。 Bluez 是GPL许可的,因此Android的框架内与用户空间的bluez代码通过D-BUS进程通讯进行交互,以避免专有代码。 Headset和Handsfree(v1.5)规范就在Android框架中实现的,它是跟Phone App紧密耦合的。这些规范也是SIG认证的。 下面的图表提供了一个以库为导向的蓝牙栈视图。 实线框的是Android模块,红色虚线部分为合作伙伴指定模块(译者注:芯片商提供)。 下面的图表是以进程为导向视图:

移植 BlueZ是兼容蓝牙2.1的,可以工作在任何2.1芯片以及向后兼容的旧的蓝牙版本。有要有两个方面: ?串口驱动 UART driver ?蓝牙电源开/关 Bluetooth Power On/Off 串口驱动 BlueZ核心子系统使用hciattach守护进程添加你的指定硬件串口驱动。

例如,MSM7201A,这个文件是在drivers/serial/msm_serial.c。你还需要通过修改init.rc为hciattach来编辑命令 行选项。 蓝牙电源开/关 蓝牙芯片的电源开关方法1.0和Post 1.0是不同的,具体如下: ? 1.0:Android框架写0或1到/sys/modules/board_[PLATFORM]/parameters/bluetooth_power_on ?Post 1.0:Android框架使用linux rfkill API,参考 arch/arm/mach-msm/board-trout-rfkill.c例子。 编译 编译Android打开蓝牙支持,添加下面这行内容到BoardConfig.mk。 BOARD_HAVE_BLUETOOTH :=true 解决问题 调试 调试你的蓝牙实现,可以通过读跟蓝牙相关的logs(adb logcat)和查找ERROR和警告消息。Android使用Bluez,同时 会带来一些有用的调式工具。下面的片段为了提供一个建议的例子: hciconfig -a # print BT chipset address and features. Useful to check if you can communicate with your BT chipset. hcidump -XVt # print live HCI UART traffic. hcitool scan # scan for local devices. Useful to check if RX/TX works. l2ping ADDRESS # ping another BT device. Useful to check if RX/TX works. sdptool records ADDRESS # request the SDP records of another BT device. 守护进程日志 hcid(STDOUT)和hciattach(STDERR)的守护进程日志缺省是被写到/dev/null。编辑init.rc和init.PLATFORM.rc在logwrapper下运行这些守护进程,把它们输出到logcat。 hciconfig -a 和 hcitool

安卓多媒体信息发布系统说明书

多媒体信息发布系统 版本号:Ver. 4.0 操作使用说明 中文版

目录 第1章功能特性 (4) 1.1 产品简介 (4) 1.2 产品组成 (4) 1.3 产品功能 (4) 第2章系统环境 (5) 2.1 硬件环境 (5) 2.2 软件环境 (5) 第3章软件安装 (5) 3.1 服务器端 (5) 3.2 播放终端 (9) 3.3 终端设置 (9) 第4章功能说明 (10) 4.1 系统登录 (10) 4.2 快速制作节目 (11) 4.3 节目管理 (13) 4.3.1 节目制作 (13) 4.3.1.1 添加图片 (14) 4.3.1.2 添加视频 (16) 4.3.1.3 添加 Flash (17) 4.3.1.4 添加网页 (17) 4.3.1.5 添加时间 (18) 4.3.1.6 添加天气 (18) 4.3.1.7 添加 RSS (19) 4.3.1.8 添加截屏 (20) 4.3.1.9 添加 PPT (21) 4.3.1.10 添加 Word (21) 4.3.1.11 添加 Excel (22) 4.3.1.12 添加文本 (22) 4.3.1.13 文本编辑工具 (23) 4.3.1.14 其它功能按钮 (23) 4.3.2 节目列表 (23)

4.3.3 节目审核 (24) 4.4 发布管理 (24) 4.4.1 立即发布 (24) 4.4.2 插播任务 (25) 4.4.3 循环任务 (25) 4.4.4 下载状态 (26) 4.4.5 发布通知 (26) 4.5 终端操作 (26) 4.5.1 终端监控 (27) 4.5.2 开关设置 (27) 4.5.3 清除文件 (27) 4.5.4 更名分组 (28) 4.5.5 参数设置 (28) 4.6 系统操作 (28) 4.6.1 终端认证 (28) 4.6.2 用户管理 (29) 4.6.3 操作日志 (29) 4.6.4 负载设置 (30) 4.7 其它功能 (30) 4.7.1 首页 (30) 4.7.2 修改密码 (30) 4.7.3 退出 (30) 4.7.4 后退 (30)

基于Android的蓝牙遥控小车设计

成绩评定表

课程设计任务书

阐述一种通过手机蓝牙遥控小车行走的软、硬件设计。手机蓝牙作为客户端,小车上的蓝牙模块HC-05作为服务端。客户端采用Eclipse 开发环境,J2ME编程,服务端采用单片机控制。双方通过串口仿真协议进行通信,单片机驱动直流电机控制小车行动。实验结果表明,小车可以接收手机遥控信号并灵活地进行前行、倒退、左转、右转和停止等功能。 关键词:89c52,hc-05,遥控小车,Andriod

目录 1引言 (1) 1.1课题设计目的及意义 (1) 1.1.1设计的目的 (1) 1.1.2设计的意义 (2) 2 方案比较与论证 (2) 2.1无线单元方案与比较 (2) 3 硬件电路设计 (4) 3.1 总体设计 (4) 3.2 单片机模块 (5) 3.2.1 STC89C52简介 (5) 3.2.2 L298N驱动模块及原理介绍 (6) 3.2.3 蓝牙模块 (7) 4 软件设计 (8) 4.1 智能车运动控制程序 (8) 4.2 Android蓝牙客户端设计与实现 (9) 4.2.1 客户端界面设计 (10)

4.2.2 BluetoothCar类设计 (10) 4.2.3 单片机C语言代码 (10) 5 实验结果及分析 (16) 6 心得体会 (17) 参考文献 (17)

1引言 1.1课题设计目的及意义 1.1.1设计的目的 遥控小车起源于美国,由于政府对无线遥控小车研发的资助以及相关资助的推动作用,日本、美国、德国等工业大国在遥控小车技术上占据着明显优势。我国的无线遥控小车研究工作始于20世纪中后期,在国家的863、973等技术发展计划的重点支持下,国内已大范围地进行无线遥控小车的研究。在研发应用方面取得了重要发展,但是与国际先进还存在一定的差距。无线遥控实现方法包括蓝牙、红外、射频几种,其中蓝牙技术具有一定优势。目前在信息家电方面应用正在铺。遥控小车起源于美国,由于政府对无线遥控小车研发的资助以及相关资助的推动作用,日本、美国、德国等工业大国在遥控小车技术上占据着明显优势。我国的无线遥控小车研究工作始于20世纪中后期,在国家的863、973等技术发展计划的重点支持下,国内已大范围地进行无线遥控小车的研究。在研发应用方面取得了重要发展,但是与国际先进还存在一定的差距。无线遥控实现方法包括蓝牙、红外、射频几种,其中蓝牙技术具有一定优势。目前在信息家电方面应用正在铺开。各种家电共用遥控,并可组网与公众互联网相接,共享有用信息。目前蓝牙技术实现无线遥控的短板在于传输距离短和芯片

Android蓝牙编程

ANDROID 蓝牙编程 用BluetoothAdapter类,你能够在Android设备上查找周边的蓝牙设备然后配对(绑定),蓝牙通讯是基于唯一地址MAC来相互传输的,考虑到安全问题Bluetooth通讯时需要先配对。然后开始相互连接,连接后设备将会共享同一个RFCOMM通道以便相互传输数据,目前这些实现在Android 2.0或更高版本SDK 上实现。 一、查找发现 findding/discovering devices 对于Android查找发现蓝牙设备使用BluetoothAdapter类的startDiscovery()方法就可以执行一个异步方式获取周边的蓝牙设备,因为是一个异步的方法所以我们不需要考虑线程被阻塞问题,整个过程大约需要12秒时间,这时我们紧接着注册一个 BroadcastReceiver 对象来接收查找到的蓝牙设备信息,我们过滤ACTION_FOUND这个 Intent动作来获取每个远程设备的详细信息,通过附加参数在Intent字段EXTRA_DEVICE 和 EXTRA_CLASS, 中包含了每个BluetoothDevice 对象和对象的该设备类型BluetoothClass ,示例代码 private final BroadcastReceiver cwjReceiver = new BroadcastReceiver() { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (BluetoothDevice.ACTION_FOUND.equals(action)) { BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE); myArrayAdapter.add(device.getName() + " android123 " + device.getAddress()); //获取设备名称和mac地址 } } }; // 注册这个 BroadcastReceiver IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND); registerReceiver(cwjReceiver, filter); 最后android123提醒大家需要注意的是,记住在Service或Activity中重写onDestory()方法,使用unregisterReceiver方法反注册这个BroadcastReceiver对象保证资源被正确回收。 一些其他的状态变化有 ACTION_SCAN_MODE_CHANGED 额外参数 EXTRA_SCAN_MODE 和 EXTRA_PREVIOUS_SCAN_MODE以及SCAN_MODE_CONNECTABLE_DISCOVERABLE、 SCAN_MODE_CONNECTABLE和SCAN_MODE_NONE, 蓝牙模块 二、配对绑定 bnded/paired device 在Android中配对一个蓝牙设备可以调用BluetoothAdapter类的getBondedDevices()方法可以获取已经配对的设备,该方法将会返回一个BluetoothDevice数组来区分每个已经配对的设备,示例代码如下: Set pairedDevices = cwjBluetoothAdapter.getBondedDevices();

Android多媒体分析

MediaPlayer播放器调用及Parser实现过程 一、调用播放器 (Frameworks) 在mediaPlayer中,根据前面打开的文件格式,分别调用三种播放器的一种。分别为PVPlayer、MidiPlayer、VobisPlayer,下面说明具体步聚:1... 获取文件格式 在MediaScanner.java JAVA程序中,可以得到以下几个文件信息: (1)文件格式,比如MP3,MP4等。 (2)文件类别:音频,视频。 (3)文件来源:本地,网络。 得到文件相关信息后,如果系统支持,则加入到播放列表,反之则DELETE 加载的相关资源。获取具体信息的相关函数调用了MediaFile.java程序相关函数实现。 FILE:MediaScanner.java ../Frameworks/base/media/java/media MediaFile.java ../Frameworks/base/media/java/media 2.创建播放器(MediaPlayer Service) 在系统中,一共有三种播放器: (1) PVPlayer:一般的本地文件播放都用PVPLAYER (2) MidiPlayer:这个播放器目前还没有测试。 (3) VobisPlayer:通过URL网络播放。 在这一层中,主要在MediaPlayerService.cpp文件中实现,根据得到的播放格式(getPlayerType函数)创建相关的播放器(createPlayer)。如果创建了PVPlayer,则直接进入了OpenCore,如果为另外两种播放器,需要对文件的一处理程序在同路径下分别有一个文件(Midifile.cpp和vorbisPlayer.cpp). FILE:MediaPlayerService.cpp ../Frameworks/base/media/Libmedia

基于Android的多媒体播放器课程设计报告

【最新资料,WORD文档,可编辑修改】/* 1、开发环境 Android 是一种基于Linux V2.6 内核的综合操作环境。最初,Android 的部署目标是移动电话领域,包括智能电话和更廉价的翻盖手机。Android 全面的计算服务和丰富的功能支持完全有能力扩展到移动电话市场以外。Android 也可以用于其他的平台和应用程序。下面搭建Android的开发环境。 1.1 JDK安装 1、首先把所有要安装文件放在Android_software文件夹中; 2、安装jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008文件; 3、配置环境变量: (1)新建一个用户变量,变量名是JAVA_HOME,变量值为:JDK的安装路径; (2)查看系统变量Path,如果有显示路径加\bin,没有则加%JAVA_HOME%\bin; (3)查看class,如果有显示路径加\lib,没有则加%JAVA_HOME%\lib; 4、解压eclipse-jee-juno-win32文件,运行eclipse.exe,在workspace launcher 窗口中,设置项目保存路径; 1.2 Android SDK安装以及系统设置 在eclipse菜单栏的window子菜单下点击perferences,选择android,在右边的对话框中选择按钮Browse,找到SDK源文件,自动出来SDK包含的Android版本,点击Apply按钮,完成安装; 在用户变量里面,新建一个JA V A_SDK变量,值设置的值为SDK安装的路径; 在系统变量里面加入%JA V A_HOME%\bin,%JA V A_SDK%\tools,%JA V A_SDK%\platform-tools。 图1.设置环境变量 1.3 Eclipse安装以及ADT工具的安装 ADT插件的安装: (1)解压ADT文件; (2)打开eclipse菜单上help 子目录下的Install new software; (3)在弹出的Install窗口中点击Add,在弹出的窗口中,name:ADT Location:点击location按钮找到解压的ADT源文件; (4)安装成功后,重新启动eclipse; 1.4 模拟器的配置 1、运行eclipse,在window子菜单下点击AVD Manager开始配置模拟器; 2、在Android Virtual Device Manager 下点击NEW,开始创建模拟器; 3、在create new Android Virtual Manager窗口中,输入模拟器的名称、版本、 存储卡大小,手机屏幕的分辨率,输入完后,点击Create AVD,创建完成; 4、在Android Virtual Device Manager窗口中,选中模拟器后,点击start, 启动模拟器。 图2 启动模拟器 2、功能说明 2.1 软件结构与布局 设计布局框架分为三个部分:

Android平台OpenMax多媒体引擎介绍

OpenMax是一个多媒体应用程序的框架标准。其中,OpenMax IL(集成层)技术规格定义了媒体组件接口,以便在嵌入式器件的流媒体框架中快速集成加速编解码器。 在Android中,OpenMax IL层,通常可以用于多媒体引擎的插件,Android的多媒体引擎OpenCore 和StageFright都可以使用OpenMax作为插件,主要用于编解码(Codec)处理。 在Android的框架层,也定义了由Android封装的OpenMax接口,和标准的接口概念基本相同,但是使用C++类型的接口,并且使用了Android的Binder IPC机制。Android封装OpenMax的接口被StageFright使用,OpenCore没有使用这个接口,而是使用其他形式对OpenMax IL层接口进行封装。 Android OpenMax的基本层次结构如图18-1所示。 ▲图18-1 Android中OpenMax的基本层次结构 OpenMax系统的结构 1.OpenMax总体层次结构 OpenMax是一个多媒体应用程序的框架标准,由NVIDIA公司和Khronos在2006年推出。 OpenMax是无授权费的,跨平台的应用程序接口API,通过使媒体加速组件能够在开发、集成和编程环节中实现跨多操作系统和处理器硬件平台,提供全面的流媒体编解码器和应用程序便携化。 OpenMax的官方网站如下所示: https://www.sodocs.net/doc/4c809938.html,/openmax/ OpenMax实际上分成三个层次,自上而下分别是,OpenMax DL(开发层),OpenMax IL(集成层)和OpenMax AL(应用层)。三个层次的内容分别如下所示。 第一层:OpenMax DL(Development Layer,开发层) OpenMax DL定义了一个API,它是音频、视频和图像功能的集合。硅供应商能够在一个新的处理器上实现并优化,然后编解码供应商使用它来编写更广泛的编解码器功能。它包括音频信号的处理功能,如FFT和filter,图像原始处理,如颜色空间转换、视频原始处理,以实现例如MPEG-4、H.264、MP3、AAC和JPEG等编解码器的优化。 第二层:OpenMax IL(Integration Layer,集成层) OpenMax IL作为音频、视频和图像编解码器能与多媒体编解码器交互,并以统一的行为支持组件(例如,资源和皮肤)。这些编解码器或许是软硬件的混合体,对用户是透明的底层接口应用于嵌入式、移动设备。它提供了应用程序和媒体框架,透明的。S编解码器供应商必须写私有的或者封闭的接口,集成进移动设备。IL的主要目的是使用特征集合为编解码器提供一个系统抽象,为解决多个不同媒体系统之间轻便性的问题。 第三层:OpenMax AL(Appliction Layer,应用层)

Android手机蓝牙通信设计 RFCOMM协议客户端+语音传送与接收

手机蓝牙通信设计RFCOMM协议客户端+语音传送与接收 最近作相关蓝牙RFCOMM协议的东西,下面类主要是针对蓝牙串口协议的客户端,其中包含了设备的搜索,服务的搜索,以及MMAPI函数的应用,希望通过这个类,能让初学者掌握基本的设备的搜索,服务的搜索,和蓝牙串口协议以及录音和语音发送播放等: 注意HelloMidlet midlet为一个基础设计的界面类,用来调用ClientBox 类 import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.io.*; import java.util.V ector; import javax.microedition.io.Connector; import javax.microedition.io.StreamConnection; import https://www.sodocs.net/doc/4c809938.html,mand; import https://www.sodocs.net/doc/4c809938.html,mandListener; import javax.microedition.lcdui.Displayable; import javax.microedition.lcdui.Form; import javax.microedition.lcdui.Gauge; import javax.microedition.lcdui.StringItem; import javax.microedition.lcdui.TextField; //jsr082 API import javax.bluetooth.BluetoothStateException; import javax.bluetooth.DeviceClass; import javax.bluetooth.DiscoveryAgent; import javax.bluetooth.DiscoveryListener; import javax.bluetooth.LocalDevice; import javax.bluetooth.RemoteDevice; import javax.bluetooth.ServiceRecord; import javax.bluetooth.UUID; import hello.HelloMidlet; import java.io.InputStream; // import javax.microedition.media.*; import javax.bluetooth.DataElement; /** * 客户端GUI */ public class ClientBox extends Form. implements Runnable, CommandListener, DiscoveryListener {

Android蓝牙功能及RFCOMMSDP简介

A n d r o i d蓝牙功能及R F C O M M S D P简介文件管理序列号:[K8UY-K9IO69-O6M243-OL889-F88688]

A n d r o i d2.0蓝牙功能及R F C O M M、S D P简介一.Android2.0蓝牙功能简介 Google于2009年10月28日发布了AndroidSDK2.0版本。对于开发人员来说,最关心的莫过于新版本添加了哪些新特性,API有哪些改动。2.0版本发布前,最受关注的就是能否在新版本中添加蓝牙功能。Google果然不负众望,在2.0版本中加入了蓝牙功能,使Android平台功能更加强大。蓝牙模块实现了以下功能: 蓝牙的打开/关闭。 设备和服务的探索。 使用RFCOMM连接远程设备发送/接收数据。 公布RFCOMM服务和监听接入的RFCOMM连接。 新版本添加了android.bluetooth包。该包提供了一些用于管理蓝牙设备的功能类。蓝牙的APIs允许应用程序连接或断开headset(头戴式耳机),扫描其他蓝牙设备并与之配对。增强了写和修改本地服务发现协议(ServiceDiscoveryProtocol,SDP)数据库,查询其他蓝牙设备SDP数据库,在Android上建立RFCOMM通道/Socket,连接到其他设备指定Socket的控制。 注意:不是所有的Android设备都能保证有蓝牙功能。 下面是android.bluetooth包中类的简述: BluetoothAdapter代表本地蓝牙适配器。 可以使用getDefaultAdapter()方法获得默认的本地蓝牙适配 器。

基于android的多媒体播放器课程设计报告 )

/* */ 1、开发环境 Android 是一种基于Linux? V2.6 内核的综合操作环境。最初,Android 的部署目标是移动电话领域,包括智能电话和更廉价的翻盖手机。Android 全面的计算服务和丰富的功能支持完全有能力扩展到移动电话市场以外。Android 也可以用于其他的平台和应用程序。下面搭建Android的开发环境。 1.1 JDK安装 1、首先把所有要安装文件放在Android_software文件夹中; 2、安装jdk-6u10-rc2-bin-b32-windows-i586-p-12_sep_2008文件; 3、配置环境变量: (1)新建一个用户变量,变量名是JAVA_HOME,变量值为:JDK的安装路径; (2)查看系统变量Path,如果有显示路径加\bin,没有则 加%JAVA_HOME%\bin; (3)查看class,如果有显示路径加\lib,没有则加%JAVA_HOME%\lib; 4、解压eclipse-jee-juno-win32文件,运行eclipse.exe,在workspace launcher窗口中,设置项目保存路径; 1.2 Android SDK安装以及系统设置 在eclipse菜单栏的window子菜单下点击perferences,选择android,在右边的对话框中选择按钮Browse,找到SDK源文件,自动出来SDK包含的Android 版本,点击Apply按钮,完成安装; 在用户变量里面,新建一个JAVA_SDK变量,值设置的值为SDK安装的路径; 在系统变量里面加 入%JAVA_HOME%\bin,%JAVA_SDK%\tools,%JAVA_SDK%\platform-tools。 图1.设置环境变量 1.3 Eclipse安装以及ADT工具的安装 ADT插件的安装: (1)解压ADT文件; (2)打开eclipse菜单上help 子目录下的Install new software; (3)在弹出的Install窗口中点击Add,在弹出的窗口中,name:ADT Location:点击location按钮找到解压的ADT源文件; (4)安装成功后,重新启动eclipse; 1.4 模拟器的配置 1、运行eclipse,在window子菜单下点击AVD Manager开始配置模拟器; 2、在Android Virtual Device Manager 下点击NEW,开始创建模拟器; 3、在create new Android Virtual Manager窗口中,输入模拟器的名称、 版本、存储卡大小,手机屏幕的分辨率,输入完后,点击Create AVD,创建完成; 4、在Android Virtual Device Manager窗口中,选中模拟器后,点击start, 启动模拟器。 图2 启动模拟器

Android平台蓝牙通信的实现

Android平台蓝牙通信的实现 一、Android蓝牙概况 1.蓝牙的来历 蓝牙这个名称来自于第十世纪的一位丹麦国王哈拉尔蓝牙王,Blatand 在英文里的意思可以被解释为Bluetooth( 蓝牙)因为国王喜欢吃蓝莓,牙龈每天都是蓝色的所以叫蓝牙。在行业协会筹备阶段,需要一个极具有表现力的名字来命名这项高新技术。行业组织人员,在经过一夜关于欧洲历史和未来无线技术发展的讨论后,有些人认为用Blatand 国王的名字命名再合适不过了。Blatand 国王将挪威,瑞典和丹麦统一起来;他的口齿伶俐,善于交际,就如同这项即将面世的技术,技术将被定义为允许不同工业领域之间的协调工作,保持着各个系统领域之间的良好交流,例如计算机,手机和汽车行业之间的工作。名字于是就这么定下来了。 Blatand 国王 蓝牙的创始人是爱立信公司,爱立信早在1994 年就已进行研发。1997 年,爱立信与其他设备生产商联系,并激发了他们对该项技术的浓厚兴趣。1998 年2 月,跨国大公司包括诺基亚、苹果、三星组成的一个特殊兴趣小组(SIG),他们共同的目标是建立一个全球性的小范围无线通信技术,即蓝牙。而蓝牙这个标志的设计:它取自Harald Bluetooth 名字中的「H」和「B」两个字母,用古北欧字母来表示,将这两者结合起来,就成为了蓝牙的logo (见图)。

蓝牙logo 2.蓝牙开发概况 对于一般的软件开发人员来说,蓝牙是很少用到的,尤其是Android的蓝牙开发,国内的例子很少 Android对于蓝牙开发从2.0版本的sdk才开始支持,而且模拟器不支持,测试至少需要两部手机,所以制约了很多技术人员的开发 现如今,蓝牙已是每部安卓手机标配的功能,多用于蓝牙耳机和传输文件,还可以多部手机之间建立蓝牙通信,本文就通过参考SDK自带的一个BluetoothChat的例程,开发一个新的蓝牙聊天室。 在Android1 的时候,相关API 非常不完善,还不能简单的使用Bluetooth 开发,有一个开源项目可以帮助程序员使用、开发蓝牙,支持直接方法bluetooth 协议栈。在Android2 以后,框架提供了一些官方API 来进行蓝牙的通信,但目前的程序也比较不完善。本文主要讨论Android2 蓝牙通信的API 使用方法。 首先看聊天效果图: 二、Android编程介绍 (一)编程环境 Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。

基于Android的蓝牙In-band ring功能的实现

龙源期刊网 https://www.sodocs.net/doc/4c809938.html, 基于Android的蓝牙In-band ring功能的实现 作者:陈媛媛 来源:《中国新通信》2016年第08期 【摘要】蓝牙作为一种短距无线数据与语音传输的开放性全球规范,目前在整个世界范 围内都得到了很广泛的应用。它可以支持便携式计算机、移动终端以及其他电子设备之间通过建立无线电空中接口相互通信,可以方便地进行数据和语音传输。Android是基于Linux的移动操作系统,目前在终端市场占据了70%的市场份额,应用相当广泛。本文通过研究Android 系统以及蓝牙协议栈,在现有架构基础上平台实现了in-band ring功能。 【关键字】蓝牙 Android in-band ring 一、引言 蓝牙(Bluetooth)技术规范由蓝牙特别兴趣小组(SIG)制订,在使用通用无线传输模块和数据通信协议的基础上,开发交互式服务和应用,多用于便携式通信设备。 整个蓝牙协议体系结构自上而下分为高端应用层、中间协议层和底层硬件模块,结构如图1所示。 蓝牙协议栈最上层为应用层,它对应于各种应用模型的剖面(Profile)。 中间协议层由逻辑链路控制与适配协议、服务发现协议、串口仿真协议和电话控制协议等规范组成。它是蓝牙协议栈的核心部分,主要实现了逻辑链路控制与适配协议实现数据的拆装、服务质量的控制和协议复用等功能,为上层协议的实现提供相应的基础。服务发现协议主要为上层应用程序提供一种发现网络中可用的服务及其特性的特殊机制;串口仿真协议是为运行在不同设备上的两个应用程序建立一条完整的通信路径,并保持两个设备之间有一个通信段;电话控制协议则提供蓝牙设备间话音和数据的呼叫控制指令[1]。 蓝牙射频、基带层和链路管理层构成蓝牙的底层模块。蓝牙射频用于实现数据位流的过滤和无线传输;基带层主要控制跳频和蓝牙数据信息帧的传输;链路管理层则用于建立和拆除链路,以及链接的安全和控制。它们共同为上层软件模块提供相应的访问接口。两个模块之间的数据的传输必须通过蓝牙主机控制器接口(HCI)的解释才能进行[2]。

Android (MediaScanner)多媒体扫描过程

Android 多媒体扫描过程(Android Media Scanner Process) 下面是系统图 MediaScannerReceiver 会在任何的ACTION_BOOT_COMPLETED, ACTION_MEDIA_MOUNTED 或ACTION_MEDIA_SCANNER_SCAN_FILE 意图(intent )发出的时候启动。因为解析媒体文件的元数据或许会需要很长时间,所以MediaScannerReceiver 会启动MediaScannerService 。 MediaScannerService 调用一个公用类MediaScanner 去处理真正的工作。MediaScannerReceiver 维持两种扫描目录:一种是内部卷(internal volume )指向$(ANDROID_ROOT)/media. 另一种是外部卷(external volume )指向$(EXTERNAL_STORAGE). 扫描和解析工作位于JAVA 层和C++ 层。JAVA 层是启动器。MediaScanner 扫描所有目录,如下步骤: 1.JAVA 层初始化 在这一步骤中,它会根据目录是在内部卷还是外部卷打开不同的数据库。 2.Java 层预扫描 首先清除文件和播放列表的缓存条目。然后根据MediaProvider 返回的请求结果生成新文件和播放列表缓存条目。 3.C++ 层处理目录 列举出所有文件和特定的所有子目录(如果子目录包含一个.nomedia 隐藏文件,则不会被列举出来。)。被列举的文件是根据文件扩展来判断文件是否被支持。如果支持这种文件扩展,C++ 层就会回调到JAVA 层扫描文件。这种扩展就会被扫描到MediaFile.java 中列出。下面是支持的文件扩展列表。 /* Audio */ addFileType("MP3", FILE_TYPE_MP3, "audio/mpeg"); addFileType("M4A", FILE_TYPE_M4A, "audio/mp4"); addFileType("WAV", FILE_TYPE_WAV, "audio/x-wav"); addFileType("AMR", FILE_TYPE_AMR, "audio/amr"); addFileType("AWB", FILE_TYPE_AWB, "audio/amr-wb");

Android+2.0+蓝牙功能及RFCOMM、SDP简介

Android 2.0 蓝牙功能及RFCOMM、SDP简介 一.Android 2.0蓝牙功能简介 Google 于2009年10月28日发布了Android SDK 2.0版本。对于开发人员来说,最关心的莫过于新版本添加了哪些新特性,API有哪些改动。2.0版本发布前,最受关注的就是能否在新版本中添加蓝牙功能。Google果然不负众望,在2.0版本中加入了蓝牙功能,使Android平台功能更加强大。蓝牙模块实现了以下功能: ?蓝牙的打开/关闭。 ?设备和服务的探索。 ?使用RFCOMM连接远程设备发送/接收数据。 ?公布RFCOMM服务和监听接入的RFCOMM连接。 新版本添加了android.bluetooth包。该包提供了一些用于管理蓝牙设备的功能类。蓝牙的APIs允许应用程序连接或断开headset(头戴式耳机),扫描其他蓝牙设备并与之配对。增强了写和修改本地服务发现协议(Service Discovery Protocol ,SDP)数据库,查询其他蓝牙设备SDP数据库,在Android上建立RFCOMM通道/Socket,连接到其他设备指定Socket 的控制。 注意:不是所有的Android设备都能保证有蓝牙功能。 下面是android.bluetooth包中类的简述:

Android蓝牙模型原理及设备之间的连接已再【eoeAndroid特刊】第六期中有所说明,在此不做赘述。详情请参见【eoeAndroid特刊】第六期4-6节。 二.协议简述 蓝牙规范(Specification of the Bluetooth System)就是蓝牙无线通信协议标准,它规定了蓝牙应用产品应遵循的标准和需要达到的要求。蓝牙协议规范遵循开放系统互连参考模型(Open System Interconnetion/Referenced Model, OSI/RM),从低到高地定义了蓝牙协议堆栈的各个层次。 在蓝牙规范中,中介协议是为高层应用协议或程序在蓝牙逻辑链路上工作提供了必要的支持,为应用曾提供了各种不同的标准接口。这部分协议包括RFCOMM、SDP、IrDA、(PPP/IP/TCP/UDP)、(TCS/AT)等。 2.1 串口仿真协议(RFCOMM) 基于欧洲电信标准化协会(European Telecommunication Standardization Institute, ETSI)的TS07.10标准制定。该协议用于模拟串行接口环境,使得基于串口的传统应用仅作少量的修改或者不做任何修改可以直接在该层上运行。 通过提供串行端口仿真,RFCOMM 可以同时支持遗留串行端口应用程序以及其它应用程序中的OBEX 协议。RFCOMM 是ETSI TS 07.10 标准的一个子集,也具有一些蓝牙特定的适配性。 RFCOMM 协议能在两台蓝牙设备之间同时维持多达60 个连接。蓝牙设备中同时使用的连接数目取决于特定实施。 由于有了RFCOMM,完整的通信路径包括两个运行在不同设备(通信端点)上的应用程序及它们之间的通信段。上图显示了完整的通信路径 RFCOMM 旨在覆盖利用串行端口设备的应用程序。在简单的配置中,通信段是一个设

相关主题