基于MTK平台的无线语音终端设计

2020-12-01 03:15谢超蒋达先
软件导刊 2020年10期
关键词:无线通信

谢超 蒋达先

摘 要:为了解决现代安防通信设备安装复杂、排除故障难度高的问题,提出一款基于MTK平台的无线语音终端,其以MTK8516嵌入式ARM开发板为硬件平台,Linux系统为软件平台,通过移植开源流媒体软件live555,以RTSP为主要通信协议实现语音通信功能。相比传统有线通信,无线语音终端有着诸多优点,如无需架设线路,信号范围广,不受地形影响,以及语音信号质量高、排除故障方便等。系統测试结果表明,该终端能够方便、快捷地满足人们在医院、办公场所等局域网内语音通话的要求,具有低成本、低功耗、高可靠性的优点。

关键词:无线通信;MTK8516;Linux;live555;语音终端

DOI:10. 11907/rjdk. 201229

中图分类号:TP319文献标识码:A 文章编号:1672-7800(2020)010-0196-04

Abstract: In order to solve the problem of complex installation of modern security communication and high difficulty in troubleshooting, a wireless voice terminal based on WiFi is proposed. It uses MTK8516 embedded ARM development board as the hardware platform and Linux system as the software platform. By transplanting the open source streaming media software live555, the voice communication function is realized with RTSP as the main communication protocol. Compared with traditional wired communication, wireless voice terminal has many advantages, such as no need to set up lines, wide signal range, no affection by terrain, high quality of voice signal and convenient troubleshooting. Experiments prove that the terminal conveniently and quickly meets the requirements of people for voice calls in local area networks such as hospitals and offices, and has the advantages of low cost, low power consumption, and high reliability.

Key Words: wireless communication;MTK8516;Linux;live555;voice terminal

0 引言

社会经济在21世纪的发展异常迅速,人们也越来越迫切地需要更加方便、快捷的通信方式[1]。随着国家对网络基础设施建设愈加重视,各种通信终端设备的应用更加广泛[2],各种无线产品在现代生活中发挥着越来越重要的作用[3-5]。

传统语音通信终端应用大多为有线通信[6-7]。如文献[8]提出一种基于MCS-51与DTMF技术的医院护理对讲系统,该系统由一个主机负责调度,还有多个分机。主机与分机之间的通信方式为CAN(Controller Area Network,控制器局域网络)总线通信,全部使用MCS-51单片机进行调度,主机通过分机上的唯一地址编号识别各个分机,并为分机提供电源。如铁路系统、办公场所等都使用的有线通信;文献[9]-[11]介绍基于红外线的语音通信系统,但红外线的缺点是穿透力不够强,信号衰减较快;文献[12]-[14]介绍基于蓝牙的语音通信系统,相比WiFi通信,其缺点是传输速度慢、电波覆盖范围小。

本文设计了基于MTK平台的无线语音终端,通过WiFi实现设备之间的互联,借助于无线芯片技术和嵌入式实时操作系统,大大简化了无线终端设备安装流程,还解决了传统无线通信技术存在的红外穿透力不够强、信号衰减较快,以及蓝牙传输速度慢、电波覆盖范围小,且价格昂贵的问题。

1 系统总体设计

本系统设计的基于MTK8516嵌入式开发平台的无线语音终端,主要有以下几个模块:

(1)音频信号采集模块。麦克风语音输入控制与连网音频产品包括一系列广泛的接口,如2通道的PDM输入、6通道的TDM麦克风阵列、4通道的I2S*2等,无需额外的DSP,支持回声消除与声源定位。

(2)音频编解码模块。从多路麦克风阵列模块采集实时语音信号,将其作为编解码器的音频源,采用内置PowerAQ对音频信号进行编解码处理。

(3)WiFi模块。开发板集成了WiFi(2.4GHz 802.11 bgn),采集到音频数据编码后,通过UDP/TCP网络协议和实时传输协议RTP实现语音信号通信。

(4)控制模块。MT8516 集成了四核 64 位的 ARM Cortex-A35 MPCoreTM,其运行速度高达 1.3 GHz。系统总体框架如图1所示。

2 系统软件实现

本文中的MTK8516开发板采用以Linux为内核的Yocto开发平台。移植了开源软件live555并经过交叉编译后,MTK8516开发板和PC机同时作为发送端与接收端进行通信测试。

2.1 Yocto平台搭建

Yocto平台作为一个开源协作项目,可以不用过多地考虑硬件体系结构,而是通过提供组件和框架,为嵌入式产品提供定制的Linux系统[15]。

Yocto项目基于Poky编译体系,其包括OpenEmbedded编译系统,以及编译使用的Metadata(Configuration文件及Recipe文件等)[16]。可以理解为,整个Yocto平台是一个包含各种规则及工具的“机器”,通过添加Configuration文件、所需菜单文件及patch,这台“机器”即会按照人们的需求生成整个系统的image。Yocto开发环境结构如图2所示。

需要重点关注的是metabase中的recipe文件,在Yocto Project里对应的是以.bb 结尾的文件。.bb文件指定这一模块从哪里获得代码(网络或本地),如何config(配置),如何编译,生成的文件如何部署到文件系统中,相当于makefile文件。最后生成的image存储在Output Image Data中。

在平台搭建过程中,首先要确定环境配置,至少要预留40G硬盘空间,内存至少8G,最好为16G。其次,Yocto平台可以选择全部编译,也可以选择部分编译。若全部编译,最后生成的就是定制的Linux系统镜像文件;若部分编译,可以单独编译某一个模块(以.bb为单位),例如后面需要的应用程序live555,可以在部分编译成功后,再选择全部编译,从而节省编译时间,也可以单独测试某一模块,可在makefile文件或.bb文件中实现全部编译或部分编译。

2.2 live555移植

live555 作为一个流媒体开源项目,使用的开发语言为C++。其主要由几个用于多媒体流的库组成,live555 的库可用于MPEG、h.265、h.264、h.263+、DV或JPEG视频以及各种音频格式[17]。它们还可以很容易地扩展到支持其它音频或视频编解码器的格式,并可用于构建基本的RTSP或SIP客户机和服务器[18]。主要使用其中的4个目录,分别对应live555的4个模块:

(1)UsageEnvironment模块。其主要包含一些基本数据结构,以及实现功能所需的一些常见工具。编译后生成的静态库是UsageEnvironment.lib。

(2)Groupsock模块。主要是与RTSP、RTP等协议相关的类的定义及实现,Yocto平台交叉编译后生成的静态库是groupsock.lib。

(3)liveMedia模块。Yocto平台交叉编译后生成的静态库是liveMedia.lib,该模块是live555最重要的部分。

(4)BasicUsageEnvironment模块。Yocto平台交叉编译后生成的文件为BasicUsageEnvironment.lib,该模块主要用于实现UsageEnvironment模块中的一些功能。

对live555源码进行修改与编译后,使用ZELUS平台自带的编译工具BITBAKE(相当于Linux下的make指令),将源码编译成开发板可识别的文件,得到可执行文件。

基于Yocto平台的.bb文件rtspserver.bb部分关键代码如下:

WORKONSRC = “${TOPDIR}/../src/apps/aud-base/rtspserver”//源码地址

do_install() {

install -d ${D}${libdir}

install -d ${D}${bindir}

install -m 755 ${S}/testH264/rtsp_server ${D}${bindir}

}

${D}指存放編译后生成binary的地址;${bindir}指文件系统的 /usr/bin;${S}指source code存放的位置;install -d 指建立一个folder;install -m  指将文件收集到指定目录下,并修改权限,755为文件访问权限。

最后成功编译通过,在/home/ahua/zelus-8516-sdk/build/tmp/work/aarch64-poky-linux文件夹下生成rtspserver文件夹,以及可在开发板上执行的可执行文件,如图3所示。

2.3 RTSP协议

RTSP(Real-Time Stream Protocol)协议是一个基于文本的多媒体播放控制协议,其属于TCP/IP四层协议中的应用层[19]。RTSP主要控制对象为流媒体,其主要有4种操作方式:回放、暂停、后退、前进。标准由IETF指定,协议为RFC2326。TCP/IP协议族是一个由数据链路层、网络层、传输层和应用层组成的四层协议系统。每个层执行不同功能,并由几个协议实现,上层协议使用下层协议提供的服务。RTSP作为一个应用层协议,为扩张提供了一个框架,使流媒体控制成为可能。其主要用来控制数据发送的实时特性,但其本身并不用于传输流媒体数据,而是必须依靠底层传输协议(RTP 服务器)提供的服务完成流媒体数据传输。RTSP负责定义特定的控制信息、操作方法、状态代码,并描述与RTP的交互 [20]。

RTSP报文请求常用方式如表1所示。

本文中移植的live555主要基于RTSP协议进行通信,因为开源的live555软件只能实现对本地文件的传输,但是本文终端最终需要实现MTK平台与PC机的双向语音通信功能, 需要修改Live555 testProgs(示例程序)中提供的函数testMP3Receiver.cpp以及testMP3Streamer.cpp。testMP3Receiver.cpp 函数用来接收麦克风阵列采集的语音数据,testMP3Streamer.cpp函数用于实时发送采集好的麦克风阵列数据。对原始testprog中的两个函数按照功能需求进行改写,然后使用多线程技术分别调用testMP3Receiver.cpp和testMP3Streamer.cpp。部分关键代码如下:

(1)建立基本任务:

TaskScheduler* scheduler = BasicTaskScheduler::createNew();

env = BasicUsageEnvironment::createNew(*scheduler);

(2)建立RTSP服务器:

RTSPServer* rtspServer = RTSPServer::createNew(*env, 554, NULL, 65);

if (rtspServer == NULL) {

*env <<“Failed to create RTSP server: ”<< env->getResultMsg() <<“\n”;

exit(1);

}

(3)通过HTTP隧道为RTSP创建HTTP服务器:

if (rtspServer->setUpTunnelingOverHTTP(sPort.usRTSPOverHTTP)) {

*env <<“(We use port ”<< rtspServer->httpServerPortNum() <<“ for optional RTSP-over-HTTP tunneling, or for HTTP live streaming (for indexed Transport Stream files only).)\n”;

} else {

*env <<“(RTSP-over-HTTP tunneling is not available.)\n”;

}

之后,需要将live555流媒体服务器程序与麦克风阵列音频数据采集程序结合起来。可以使用标准alsa接口获得麦克风采集的音频数据,并通过live555软件进行语音信号传输。

2.4 麦克风音频数据采集

ZelusTek智能语音开发平台的麦克风阵列通过标准的TDM接口對接到MT8516芯片,本文可以使用标准alsa接口获得麦克风采集的音频数据。开发板使用六路麦克风阵列,本开发平台的麦克风数据采集流程如图4所示。

麦克风数据采集具体流程为:

(1)初始化并打开音频采集设备:

int OpenAudioCapture(unsigned char bitsPerSample, unsigned char numChannels, unsigned int samplingFrequency)

(2)初始化缓冲区,分配存储空间:

g_pQueue = new DataQueue(); g_pQueue->set_databuffer_size(1280*6, 3);g_pQueue->init();

(3)调用音频数据采集线程:

void *AudioCaptureThread(void *arg);pcm_read(fChunkSize, fReadBuf) != fChunkSize)

(4)开始音频采集,读取音频数据:

int StartAudioCaputre(unsigned char bitsPerSample, unsigned char numChannels, unsigned int samplingFrequency);GetPCMData(int nChannel, unsigned char *buf, unsigned int *bufLen, unsigned long *pts, unsigned char byWait)

本系统为了实现PC机与MTK开发平台之间的双向语音交流,客户端和服务端都需要具有语音接收与发送功能的模块,可通过多线程技术解决这一问题。在语音通信双向模块,用pthread_create()添加一个线程,从而实现两端的双向语音功能。

3 系统测试

图5是组装好的MTK8516开发板,包括开发板主体、电源、各类可支持接口,以及多路麦克风阵列。

3.1 ADB连接MTK平台

首先使用ADB连接MTK智能语音平台和PC机,开启MTK平台电源键,启动开发板,等待15s后,系统启动完成。

然后在PC端的命令行端口输入如下指令:

$ adb shell

连接成功即可通过PC机控制MTK平台。

3.2 无线连接

下载好联网脚本后,借助ADB工具把脚本push到MTK平台:

$adb push wifi_connected.sh /data/

脚本push成功后,进入adbshell,执行脚本:

$ sh /data/ wifi_connected.sh SSID PWD

SSID和PWD为连接的路由器账户及密码。

3.3 麦克风数据采集及音频播放

将live555交叉编译之后push到MTK平台,然后将其与PC机进行通信。开发板能够将麦克风阵列采集到的数据经过内置音频编解码模块,通过live555软件发送给PC机。PC机也能将电脑上的音频数据发送给开发板,从而实现语音通信功能。

4 结语

本文通过MTK平台实现了无线语音终端设计,并通过开源软件live555实现了无线语音终端通信。测试结果表明,该无线语音终端能够很好地实现WiFi环境下的语音通信。不仅满足了局域网下无线通信的需求,还可以减少繁杂的线路设计。后续可在此基础上进一步开发与拓展相关功能,接入智能云语音平台,实现语音控制启动,还可通过相关算法进一步降低延迟和内外噪声干扰。

参考文献:

[1] 段宇,戴舜华,付鹏飞,等. 基于STM32的无线语音交互系统设计[J]. 电子技术与软件工程,2019(15):82-83.

[2] 黄立霞.  嵌入式无线语音终端研究与设计[D]. 成都:电子科技大学,2012.

[3] 王赛,刘子龙.  基于4G 网络的移动机器人远程控制研究[J]. 软件导刊,2019 (11):71-74.

[4] 马瑜晨,许全宜. 基于模拟和数字技术相结合的视频监控系统[J]. 电子技术与软件工程,2018,63(6):62-63.

[5] 刘欢,聂志刚. 基于嵌入式WiFi物联网的无线家居监控系统[J].  物联网技术,2018(7):36-38.

[6] 刘锦. 铁路有线通信的维护探讨[J]. 科学技术创新,2018 (15):89-90.

[7] 张威, 王瑞东.  铁路有线通信传输系统的维护和管理[J].  数字通信世界,2019(12):48.

[8] 黃修力,郑发泰. 基于MCS-51与DTMF技术的医院护理对讲系统的设计[J].  计算机测量与控制(7):187-189,192.

[9] 张绍颂.  基于单片机的红外通信系统设计[J].  武汉生物工程学院学报, 2017(2): 23-26.

[10] 林章, 林海.  射频与红外通信技术的实践应用研究[J].  物联网技术, 2019, 9(8):31-32,36.

[11] 丁国臣, 姜玉红, 王高翔.  PAM调制型语音红外通信系统的设计[J].  电脑知识与技术, 2016, 12 (29):216-218.

[12] 陈曦, 徐鹏, 许晓蕾.  基于蓝牙通信技术的嵌入式工业控制系统的开发[J].  仪表技术与传感器, 2015(1):74-76.

[13] SAIRAM K V S,GUNASEKARAN N,REDD S R. Bluetooth in wireless communication[J].  IEEE Communications Magazine,2002,97(6):1-9.

[14] REN W,MIAO Z. A hybrid encryption algorithm based on DES and RSA in bluetooth communication[C]. 2010 Second International Conference on Modeling,Simulation and Visualization Methods, 2010:221-225.

[15] 杜登科,胡爱兰,李林峰,等.  基于Yocto订制嵌入式Linux发行版[J].  微型机与应用,2016(14):68-70.

[16] BOVET D P,CESATI M. Understanding the Linux Kernel 3e[M].  Understanding the Linux kernel ,2006.

[17] 吕少君, 周渊平.  基于Live555的实时流媒体传输系统[J].  计算机系统应用, 2015 (1):56-59.

[18] 喻炜. 新型数字可视对讲系统的设计与实现[D].  长沙:中南大学,2014.

[19] RAO A, LANPHIER R, STIEMERLING M, et al. Real time streaming protocol 2.0 (RTSP)[Z].  2014.

[20] 陈亮, 裴海龙.  基于RTSP协议的实时视频服务器实现[J].  微计算机信息, 2009(15):65-66.

(责任编辑:黄 健)

猜你喜欢
无线通信
无线通信技术在测绘工程中的应用分析