基于PXA255和嵌入式QT的IP视频电话设计

传统的ip电话是将语音信号转变成数字信号,进行打包和压缩,在数据网上进行传输。但近年来,人们已经不满足于只能听到语音,还希望能见到对方的图像。本系统就是针对人们的这一需求,在intel的pxa255平台上利用qt/embedded图形开发工具设计的一个ip视频电话系统。

1 硬件系统结构

整个系统主要是在intel pxa255评估平台sitsang板上实现的。pxa255是基于intel的xscale架构的嵌入式处理器,该平台配备了大量的硬件资源。整个系统的硬件结构如图1所示。

2 软件系统结构

系统中采用的是基于qt/embedded 2.3.10版本的嵌入式图形库。该图形库是基于linux系统的frame buffer机制的,并使用基于该图形库的qtopia 2.2.1 pda版本的窗口环境管理系统。qt/embedded是一个完整的自包含gui和基于linux的嵌入式平台开发工具,是qt的嵌入式开发版本。

音频和视频信号的采集、压缩、播放和传输都是建立在该图形界面和嵌入式linux内核以上的,所以,在交叉编译移植嵌入式linux内核时,要正确配置对usb、video4linux、摄像头和音频设备的支持以及对frame buffer机制的支持。交叉编译嵌入式qt时,要配置使其支持多线程、jpeg算法库、音频设备以及qvfb(基于x11的虚拟frame buffer机制)。本文主要讨论ip视频电话系统的设计实现,故嵌入式linux内核和嵌入式qt的配置编译过程不再详述。整个系统的软件结构如图2所示。

3 系统的具体设计

本ip视频电话系统主要由音频采集/播放模块、视频采集/播放模块和网络传输模块组成。音频和视频模块采样本地数据,压缩处理后交给网络传输模块,由其发送到另一对话端,并从网络传输模块接收对方的音频和视频数据处理后进行播放。

3.1 网络传输模块设计

系统启动后,本地服务器端即对5000端口进行监听。若有ip电话连接进来,则接受连接,为其分配套接字资源,并根据通话类型,生成相应的音频、视频类实例来处理相应的音频、视频数据。系统可以实现视频通话,也可以只进行语音通话,即实现传统ip电话的功能,因为音频、视频数据格式不同,需要分别做不同的处理,故采用两个不同的套接字来进行处理,网络传输模块服务器端的基本流程如图3所示。

本地网络服务器端用从qserversocket类继承的子类ipphoneserver实现。qt/embedded类库已经对网络操作进行了很好的封装,所以系统只利用qt的信号和槽机制,给ipphoneserver类增加一个新的信号--voidnewconnect(int)。信号所带的参数为套接字号,并重载了qserversocket的虚子函数成员void newconnect(intsocket)。一旦发现有新的连接,它将把服务器端给新连接指定的接收套接字号(int socket)通过信号newconnect(int)发送出来,以便主程序设置对应的数据处理套接字。

在系统主程序中启动服务器,并将服务器实例的newconnect(int)信号连接到主程序的newconnect(int)槽函数上。一旦来了新的连接,server的newconnect(int)被发出,则由主程序的newconnect(int)槽函数接收套接字号并判断是音频还是视频连接后,将其指定给相应的音频或视频数据传输套接字,启动服务器的代码如下:

server=new ipphoneserver((tport->text()).toushort());connect(server,signal(newconnect(int)),slot(new-connect(int)));

具体与音频/视频模块相关连进行数据传输的套接字从qsocket类继承来的子类ippdatasock实现,它增加了一个新的qdatastream类指针成员变量ds来进行数据的传输处理,在ippdatasock的构造函数中被实例化。

为音频和视频进行数据传输的套接字实例分别为adatasock和vdatasock。若从已方发起连接,先通过qt的信号和槽机制设定相应的套接字连接、关闭和其他处理槽函数,再使用connecttohost()函数连接到远端服务器即可。音频套接字实例化代码如下:

adatasock=new ippdatasock(this); connect(adatasock,signal(connected()),slot(tconnected())); connect(adatasock,signal(connectionclosed()),slot(tclosed())); connect(adatasock,signal(readyread()),ipaudio,slot(canplay())); connect(adatasock,signal(error(int)),slot(terror(int))); adatasock->connecttohost(tserver->text(),(tport->text()).toushort());

3.2 音频采集/播放模块设计

音频采集/播放模

  • 基于PXA255和嵌入式QT的IP视频电话设计已关闭评论
    A+
发布日期:2019年07月02日  所属分类:参考设计