基于Android平台的可视对讲系统设计

发布者:云淡风轻2014最新更新时间:2016-09-19 来源: eefocus关键字:Android系统  可视对讲  JNI 手机看文章 扫描二维码
随时随地手机看文章
Android是Google公司推出的基于Linux的开源手机操作系统,由于代码开源,受到很多手机厂家的青睐。可视对讲系统在Android操作系统未出现之前,软件研发一般采用底层语言,容易出现功能单一、产品升级困难等情况,要在对讲系统中开发出具有3D图形效果的界面更是难上加难。鉴于此,本文利用Android平台的可移植性、代码开源等优势,结合JNI、NDK技术,提出了基于Android平台的可视对讲系统的设计方案并加以实现。


JNI[1](Java Native Interface)是Java本地调用接口,它使得运行于Android平台的Java程序可以使用C、C++甚至汇编语言编写的动态链接库。在需要频繁访问内存或复杂计算的情况下,使用C动态链接库比在Android平台上使用Java语言实现相同功能更具有效率[2]。NDK[3](Native Development Kit)提供了一系列的工具,可以生成ARM二进制码的动态库,并且能自动地将生成的动态库和Java应用程序一起打包成Android系统可以直接安装的apk安装包,即NDK可以将包含JNI接口函数的C源程序文件编译生成动态库,供Android应用程序调用,提高了对现有代码的重用性,而加快了开发进度。

本文提出一种可视对讲系统设计方案,对讲双方为门口机和室内机,并将设计方案在i.MX51硬件平台进行实现。门口机进行音视频的采集、编码、传输及音频解码、播放;室内机采用Android平台,但考虑用户室内信息的保密性,室内机没有视频采集功能,室内机只进行音视频的解码、播放以及音频的采集、编码、传输。

1 可视对讲系统设计

1.1 通信流程设计

数据包传输协议使用面向无连接、资源消耗小、处理速度快的UDP协议。寻址完成建立UDP直连后,门口机首先对视频进行编码传输,直到被叫方按下接听键后,门口机才对音频数据进行传输。为了保证通话一直在线,室内机每隔一定的时间向门口机发送通话在线询问,如果收到在线确认应答则保持通话状态,否则就结束通话。可视对讲系统通信流程如图1所示。

表2中:包头为对讲数据包的标示符,命令类型、操作类型说明详见表3,时间戳主要是用于音视频的同步,数据类型分为音频和视频两种,帧序号为0~65 535。如果没有进行数据包分段,则总包数与当前包数均为1。音视频数据从第41位开始算起,音视频数据长度由数据包格式中的数据长度所指定。

 根据系统通信流程图1、结合数据包格式,本对讲系统参数如表3所示。其中命令类型、操作类型分别与表2数据包格式相对应。


1.5 音视频编解码选择

系统音频编码选用G.711编码[4]。G.711是一种由国际电信联盟订定的音频编解码方式,拥有一倍的压缩率,是语音通信中最常用的编解码方式之一。采样和量化是音频编程及声音数字化的两个关键步骤,本系统使用的音频采样频率为8 kHz、量化位数为16 bit、单声道。
FFmpeg是用于音频和视频开源方案,由于它的开源和免费以及跨平台的特点,受到开发商的青睐。FFmpeg支持包括xvid等在内的多达90种解码器,由C语言实现,不仅可以应用于PC软件平台,也可以用于嵌入式设备。本系统中视频选用xvid编解码器,视频格式为MPEG-4。(xvid是一个开放源代码的MPEG-4视频编解码器)视频标准采用NTSC制,视频尺寸为352×240,帧频为30 F/s;使用NDK提供的交叉编译工具将包含JNI接口函数的音视频编解码源文件统一编译成为动态链接库,供Android平台调用。

2 系统实现

2.1 系统软硬件平台

系统硬件平台为i.MX51 EVK。i.MX51 EVK是由Freescale公司自主研发的,中央处理器基于ARM Cortex A8核心的i.MX51处理器;主频可扩展到1 GHz;处理器内部集成了DDR/DDR2内存控制器、OpenGL/OpenVG图形核心、ATA控制器、以太网控制器等,支持720 p高清视频播放;指令缓存和数据缓存为32 KB,二级缓存为256 KB;其容量指标是之前ARM11产品的2倍,可大大提高CPU的处理能力。同时处理器内部还集成了矢量运算的浮点运算及信号处理加速器,为多媒体信息娱乐终端提供了强大的处理核心支持[5]。

系统软件平台采用Linux操作系统、eclipse集成开发环境。Android SDK[6]版本为2.2,Android NDK版本为android-ndk-r6。使用串口进行调试。

2.2 Android平台在i.MX51 EVK上的移植

系统采用4 GB的SD卡存放引导程序、内核、根文件系统等镜像。引导程序采用U-Boot,Linux内核版本为2.6.31。移植流程:Android源码可以从http://source.android.com获取到,编译好U-Boot、Linux内核、根文件系统以及Android系统镜像[7]后,设置i.MX51板上的S1 Boot Switch模式为1100000001,使用ATK工具进行镜像的下载。下载后系统镜像在SD卡上分布图如图3所示。

图3中,MBR主要存储SD卡的分区信息表,起始地址为0 KB。引导程序、内核、根文件系统的起始地址分别为1 KB、1 MB、4 MB。System和Recovery分别各占一个分区,System为Android操作系统的镜像文件所占分区,Recovery分区主要是用来备份和还原系统。

2.3 音视频编解码实现

2.3.1 音频编解码实现

音频编码与解码的区别仅在于调用的C库函数不一样,音频编解码调用的C库函数分别为G711Encoder、G711Decoder(本文以解码为例)。音频解码具体流程如下:

(1)音频Java本地调用函数

在使用音频解码的类中编写Java本地调用函数:
public native void G711Decoder(byte[]pcm,byte[]code,int size,int lawflag);

(2)生成头文件

C库与Java间需要一个后缀为“.h”的头文件来衔接,这个头文件通过javah命令生成,javah工具包含在JDK中。JDK是Java的核心,包含Java运行环境、Java工具、Java基础类库。

(3)JNI接口函数

JNI接口函数编写在C语言文件中,与音视频解码源码一起打包生成动态链接库。在接口函数中声明4个无符号指针变量:decode指向待解码的数据、depcm指向解码后的数据、enpcm指向待编码的数据、encode指向编码后的数据。解码代码如下:
void Java_com_qsa_play_G711Decoder
(JNIEnv*env,jobject this,jbyteArray pcm,jbyteArray code,jint size,jint lawflag)
{
depcm=(unsigned char*)(*env)->
GetByteArrayElements(env,pcm,0);
decode=(unsigned char*)(*env)->
GetByteArrayElements(env,code,0);
G711Decoder(depcm,decode,size,lawflag);
(*env)->ReleaseByteArrayElements(env, pcm,
(jbyte)depcm,0);
(*env)->ReleaseByteArrayElements(env,code,(jbyte)
decode,0);
}
其中,depcm=(unsigned char*)(*env)->GetByteArrayElements(env,pcm,0)用来获取Java层传递的待解码字节数组的首地址,G711Decoder()函数实现音频解码,(*env)->ReleaseByteArrayElements(env,pcm, (jbyte)depcm,0)释放传递的数组成员,进行资源回收。

(4)使用NDK中ndk-build命令编译生成动态链接库

ndk-build命令是ndk命令工具集中的一个命令,与Linux下shell编程中的make命令相似,它会查找文件夹中的后缀为“.mk”的Makefile文件,根据该文件的依赖文件,将源文件编译成动态链接库。

2.3.2 视频编解码实现

视频的编解码流程与音频编解码流程基本相似,视频编解码调用的C库函数分别为avcodec_encode_video、avcodec_decode_video2。限于篇幅,在此重点介绍Android平台视频的解码及显示。

在解码视频数据前,要先做一系列的准备工作:

 (1)给出主要的数据结构

static AVPacket avpkt;
static AVFrame*picture;
static AVFrame*pFrameRGB;
static AVCodec*codec;
static AVCodecContext*c= NULL;
static struct SwsContext*img_convert_ctx;
AndroidBitmapInfo info;
void*pixels;

(2)初始化流程

①注册解码器
avcodec_init();
av_register_all();
②初始化AVPacket、AVCodecContext、AVFrame
av_init_packet(&avpkt);
c=avcodec_alloc_context();
picture=avcodec_alloc_frame();
其中,AVFrame是数据流在编解码过程中用来保存数据缓存的对象,从数据流中读取到的数据首先保存到AVPacket中。一个AVPacket最多只包含一个AVFrame,而一个AVFrame可以包含好几个AVPacket。AVCodecContext用于动态记录一个解码器的上下文信息。
③设置视频解码器
codec=avcodec_find_decoder(MPEG-4);
avcodec_open(c,codec);
④视频解码流程

视频解码流程如图4所示。图4中,AndroidBitmap_getinfo用于获取Android平台Bitmap对象的大小,AndroidBitmap_ lockpixels函数是对Bitmap进行加锁、互斥使用资源。如果AVPacket包中存在未解码完的数据,则调用函数avcodec_decode_ video2进行解码;若解码出一帧后需要调用函数sws_scale进行格式转换。视频数据解码完后颜色空间为YUV,需转换成RGB颜色空间。最后调用fill_bitmap函数进行数据填充及进行Bitmap的解锁和资源的释放。

视频显示采用Android平台的ImageView控件进行显示。解码线程接收到视频数据后,通过JNI调用,调用动态库中的视频解码接口函数进行解码,每解码完一帧后通过消息通知主线程进行显示图像的更新,这样就达到了视频数据动态显示的效果。

3 实现效果

Android平台在i.MX51 EVK平台上移植成功后,串口中Android 操作系统启动信息如图5所示。 从图中的启动信息可以看出,Android平台移植成功,启动信息也包含有CPU信息、内核版本、大小、加载地址、Android文件系统版本等信息。

该软件开发完成后,在Android工程的bin下生成apk文件,并复制apk文件到SD卡中,在Android系统中安装该软件,使用门口机进行拨号,编码后的音视频数据通过网线进行传输。

本文将Android手机操作系统应用于i.MX51 EVK平台,并在该平台上提出了可视对讲的设计方案,分别进行了通信流程、应用协议、功能模块等设计,最后实现了系统的设计方案。但由于视频是使用软件解码,运行效率有待提高,且语音对讲部分回声消除存在问题,有待进一步研究。

关键字:Android系统  可视对讲  JNI 引用地址:基于Android平台的可视对讲系统设计

上一篇:ARM体系结构下的程序设计经验
下一篇:基于嵌入式文件库的嵌入式MP3播放器设计

推荐阅读最新更新时间:2024-03-16 15:10

三星Galaxy S21 Ultra了被曝运行Android 12系统跑分
据外媒 SamMobile 消息,三星 Galaxy S21 Ultra 5G 手机的一条跑分信息出现在 Geekbench 5 网站,值得注意的是,手机运行的是 Android 12 系统。目前三星最新的 One UI 4.0 系统基于 Android 11 内核,而三星也没有 Android 12 预览版放出。   这款手机搭载高通骁龙 888 SoC,12GB 内存,单核成绩 1122 分,多核成绩 3469 分,属于同款 SoC 中发挥较好的成绩。   IT之家了解到,目前已经有一加、realme 等品牌官方,推出了自家的 Android 12 预览版系统。特定机型用户可以抢先下载体验,但官方不建议主力手机进行
[手机便携]
三星Galaxy S21 Ultra了被曝运行<font color='red'>Android</font> 12<font color='red'>系统</font>跑分
基于Android的车载信息娱乐系统构架
引言 车载电子行业有着巨大的市场潜力,因为车主们期望将用在手机上面的某些应用软件直接运行在自己的私家车上。但同时也面临诸多挑战,车载电子厂商需要满足不同汽车型号的要求,而且即便是同一品牌的不同车型往往也需要不同的定制。如今的车主们都希望能够像使用智能手机一样随心所欲地安装或者删除应用软件。要将手机上使用的软件移植到车载电子系统中,开发者必须面对一个严峻的挑战,即第三方应用程序必须在一个隔离的环境中运行,以此来阻止对其他车载功能模块的干扰,以及可能使车主信息泄露等威胁。同时,第三方应用软件必须跟车载其他系统有效地结合起来,以便给用户带来更加完美的用户体验。最后,第三方软件开发者必须针对车载系统的共同特征,开发一套公用平台,以方便不
[嵌入式]
Android系统入侵彩电 智能电视试水三网融合
      五易其稿的三网融合试点方案,终于柳暗花明。据中新网消息,6月6日上午国家三网融合协调小组会议闪电通过了试点方案,相关文件近日将正式公布。据悉,方案要求各地于本月18日前上报试点申请,本月25日批准开始实施。三网融合真正迎来破茧而出的时刻。   如何将广电网与互联网、通信网进行融合,基于Android操作系统的开发平台将是有益尝试。4月上旬,瑞典People of Lava推出全球首款Android(谷歌)电视,42英寸的价格在2500美元;5月21日,谷歌与英特尔、索尼共同合作将Android软件推广至电视及其他家庭娱乐设备中。谷歌电视项目负责人曾表示,谷歌智能电视采用Android 2.1系统、英特尔Atom芯片
[家用电子]
谷歌安全主管说安卓系统的安全性与iOS系统一样
    新浪手机讯 11月13日消息,安卓系统一直都身处于缺乏安全性的风口浪尖之中,尽管每个月谷歌都会放出修复补丁,但与iOS系统相比,像运营商和制造商这样行动相对迟缓的中介机构让整个安卓平台有很大的不确定性。   但是安卓的安全总监Adrian Ludwig不同意这样的说法。   昨天,在曼哈顿的一个安全会议上,路德维希称,如果与竞争对手相比,谷歌一直在确保其移动平台的进步。对于所有的威胁,所有安卓系统的平台级能力是相同的。   路德维希对于其他的问题直接把谷歌新Pixel与iPhone作为对比来回应,当被问到两者的安全是否相同时,路德维希回答“当然”,他还补充安卓将会更好。   显然,从长远来看,开放生态系统的安卓将
[手机便携]
Chrome OS将取代Android成为平板专用系统
近日,谷歌最新的Chrome 64位更新版本向Chromebook提供了一些非常必要的功能。 其中包括用于平板模式下的多任务处理,新的分屏功能以及Android一样的屏幕截图功能,虽然这些虽然是相对基础的升级,但他们确实体现了Chrome OS的未来——Android平板电脑软件的替代品。 就目前而言,Chrome OS已经非常接近这个目标,而这样的功能促使其成为混合操作系统。之前网络上就曝光了一款宏碁出品的Chrome OS平板电脑,看来谷歌确实是想延伸Chrome OS的泛用性。 谷歌的Chrome和Android团队已经进行了长时间的合作,以确保推出像Chromebook这样的二合一低成本计算机设备,简直两全其美
[手机便携]
谷歌新品预测:全新Nexus和Android系统
    北京时间10月22日消息,谷歌(微博)将于10月29日在纽约召开Android新闻发布会。有消息称,将有多款Nexus产品将亮相本次大会。需要指出的是,苹果将于10月23日召开发布会,而微软的WP8发布会也已经锁定在10月29日,相信这三大科技巨头将在这个十月底掀起又一场科技盛宴的大幕。 大多数有关谷歌10月29日纽约发布会的内容此前已经经由多个渠道流传到了网络上,不过国外知名科技博客TNW撰稿人马特-布莱恩(Matt Brian)日前表示,自己已经对网络上流传的相关信息进行了证实,并透露经自己“确认”谷歌将在本次发布会上发布的产品包括有: 1. LG Nexus 4手机。该产品的外观和规格同此前网上流传的一致。该机将搭载1
[手机便携]
基于Android系统的H.264视频压缩技术实现
视频服务器在目前视频领域中的应用,主要是利用网络视频服务器构建远程监控系统。基于网络视频服务器的多通道数字传播技术,具有传统的模拟视频输出系统无可比拟的诸多优势。但要使网络视频监控得到普及还有待于解决以下问题:尽快提高视频压缩的技术水平,目前先进的压缩标准H.264可以部分解决视频质量和网络带宽占用这个矛盾。 H.264/AVC标准是一种高性能的视频编解码技术,相比以前的标准,具有更高的压缩率、高质量图像、容错功能、并有很强的网络适应性。 随着Android技术的迅猛发展和日趋成熟,其开放性、便携性、良好的兼容性、无缝结合网络通信等特点将使Android操作系统在未来工业领域中有广泛的应用。 1 系统概述 基于An
[嵌入式]
高通率先发布面向Android生态系统设计的深度传感摄像头技术
电子网消息,高通宣布扩展Qualcomm Spectra™模组项目,将能实现更加优化的生物识别功能和高分辨率深度传感,旨在满足一系列广泛的移动终端和头戴式显示器(HMD)所带来的、日益增加的拍照和视频需求。该模组项目基于Qualcomm Spectra嵌入式图像信号处理器(ISP)系列背后的前沿技术而打造。完全由Qualcomm Technologies设计,Qualcomm Spectra将通过即将推出的Qualcomm®骁龙™移动平台,为未来图形质量和计算机视觉创新铺平道路。 高通产品管理副总裁Tim Leland表示:“无论是用于计算摄影、视频录制,或是要求精确动作跟踪的计算机视觉应用,高功效的摄像头图像信号处理无疑对下
[半导体设计/制造]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved