引言
随着3G移动通信技术的普及,利用3G网络进行视频传输在很多行业的应用越来越广泛。同时,随着对视频质量要求的不断提高,单路3G信道所能够提供的带宽已不能满足视频传输需求。对于720P的高清实时视频,采用H.264编码,经过计算至少需要2.8 Mbps的带宽。目前,电信3G的理论上行带宽为1.8 Mbps,联通为5.7 Mbps。在实际应用中,由于受信号强度变化、接入用户增多以及网卡设备差异等因素的影响,3G实际带宽很难达到理论,带宽不足已经成为影响高清视频传输的关键因素之一。
本文针对3G网络在实际视频传输过程中带宽不足的问题,利用现有的策略路由、虚拟隧道和多网卡绑定3种成熟的网络技术,提出了一种基于带宽聚合技术的3G视频传输系统设计方案。该设计方案采用嵌入式Linux操作系统,在TMS320DM3730开发板上实现,通过多张3G网卡聚合,在客户端和服务器端形成一条聚合逻辑通道,从而扩展传输带宽。实验结果表明,该系统能够有效聚合3G带宽,提高实时传输视频质量。
1 硬件设计
本系统使用TI公司的TMS320DM3730(以下简称DM3730)作为微处理器。DM3730微处理器集成了3D图形处理器,包括1 GHz的ARM CortexA8 核和800 MHz的TMS320C64x+DSP核两部分;支持视频加速器(IVA)、USB 2.0以及高清720P视频编解码功能;使用Logitech C170高清摄像头,最大分辨率为1 024×768,带CMOS传感器,最大帧数为30帧。系统使用的3G网卡为中兴AC2787,支持理论最大下行带宽为3.1 Mbps,上行带宽1.8 Mbps。服务器端采用普通PC机。系统硬件框图如图1所示。

图1 硬件框图
2 系统设计
3G视频传输系统由以TMS320DM3730开发板和3G网卡为核心的3种模块构成。视频处理模块以DM3730开发板为基础构建,通过USB摄像头采集视频并由处理器进行编码打包发送至3G传输通道。3G传输模块由多张3G网卡构成并与开发板相连,通过传输通道将数据发至因特网。视频播放模块构建于普通PC机,与因特网直接连接,收到视频数据后对其进行处理并播放。系统模块设计如图2所示。

图2 3G视频传输系统模块设计图
图2所示系统模块设计只是在逻辑上对系统进行模块分类,其中3G传输模块与视频处理模块都是基于DM3730开发板实现的。根据每个模块详细功能进行系统流程设计,图3为系统设计流程图。

图3 系统设计流程图
2.1 无线网络拨号
3G是蜂窝移动通信技术的一种,它能够同时传送声音及数据信息,支持高速数据传输。目前我国3大电信运营商(电信、联通和移动)分别使用CDMA2000、WCDMA和TDSCDMA这3种国际标准。本系统根据当地实际情况选取CDMA2000作为系统所用3G标准,3G接入互联网是通过PPP协议拨号实现的。PPP(点到点协议)是一种提供全双工操作的链路层协议,能够按照顺序传递同等单元的数据包。
PPP拨号流程如图4所示。

图4 PPP拨号流程图
用户首先通过拨号接入ISP,拨号被调制解调器确认后会建立一条物理连接(底层UP)。拨号客户端向路由器发送一系列携带PPP参数的LCP分组,路由器会对参数进行选择并进行相应的网络配置。客户端可以从NCP得到一个新的临时IP地址,从而成为互联网上的一个主机。3G PPP拨号是通过AT指令集实现的,AT指令集是指从终端设备向终端适配器发送的指令集合。客户端通过AT指令可与ISP服务器进行拨号交互,从而完成拨号。
2.2 带宽聚合
带宽聚合是本系统的核心,通过带宽聚合可以将多张3G网卡绑定成一张虚拟网卡,在客户端和服务器端形成一条高带宽的逻辑通道。3G网卡拨号后,需要进行策略路由定制、虚拟隧道建立以及多网卡绑定。以下将以两张3G网卡为例介绍带宽聚集全过程。
2.2.1 策略路由定制
策略路由是一种根据自定义策略进行路由包转发的机制。单条ISP通常使用基于目标的路由规则来实现,策略路由可根据目标地址和源地址进行策略定制,通常用于多条链路的数据包路由。相比于传统的路由,灵活性有很大的增强。本系统使用多条链路进行视频传输,在建立虚拟隧道之前,需要定制策略路由。
定制策略路由之前,需要对不同策略建立相应的路由表。普遍做法是不同的策略单独使用一个路由表,当然也可以不同策略使用同一张路由表。当数据包进行路由时,路由机制会根据其对应的路由表中的策略进行筛选,不符合策略的按照默认路由进行转发,符合某条策略的按照策略进行转发。策略路由分为两种:目标地址路由和源地址路由。本系统服务器地址唯一,客户端有多个IP地址,因此使用源地址路由技术。
2.2.2 虚拟隧道建立
虚拟隧道技术是在公共网络的基础设施之间,建立专用网络实现加密数据通信,任何通过虚拟隧道的数据包都将被隧道协议加密传输。传输过程中,原来的传输内容将被全部封装到新的加密包中。本系统使用Vtun开源软件,在客户端与服务器之间建立多条虚拟隧道。Vtun虚拟隧道建立过程与虚拟隧道通信过程如图5所示。

图5 Vtun原理图
图5中的虚拟网卡TAP/TUN是虚拟隧道建立后生成的。虚拟网卡的建立首先是通过客户端与服务器端的物理网卡建立Socket连接,接下来服务器端和客户端会根据相应的配置文件设置虚拟网卡的特征,配置虚拟网卡的网络地址和内核路由等,最后在通信两端生成虚拟网卡。
虚拟隧道建立后,客户端和服务器端就可以通过虚拟隧道通信了。客户端与服务器端的通信过程为:
① 客户端的应用程序将数据通过TCP/IP协议栈发送到虚拟网卡TPA/TUN。
② Vtun从虚拟网卡读取数据包,虚线表示直接从虚拟网卡读取数据而不对数据进行处理。
③ 隧道封装。Vtun进程对读取的数据加密,然后通过建立的虚拟隧道将数据发送,发送使用物理网卡eth0。
④ 数据包路由过程。
⑤ 隧道解封过程。
⑥ Vtun将数据写到虚拟网卡。
⑦ 应用程序从虚拟网卡接收数据。
2.2.3 多网卡绑定
本系统使用的是Linux中的bonding技术进行多网卡绑定。bonding技术可以将多块网卡接口绑定虚拟成为一块网卡,从用户角度看这个聚集的虚拟网卡就像是一个单独的以太网接口设备。bonding原理如图6所示。

图6 bonding原理图
其中,eth0和eth1为实际的网卡,其MAC地址分别为MAC0和MAC1。Bond0为使用bonding技术后生成的虚拟网卡,其MAC地址为MAC2。bonding技术将eht0和eth1的MAC地址均设置为相同,这样Bond0从两张网卡收到的数据被视为来自同一网卡,达到流量聚合的目的。用户在使用过程中将把Bond0视为实际网卡。本系统在实际实现中绑定的网卡并非实际网卡,而是建立虚拟隧道中生成的虚拟网卡,具体过程将在系统实现中进行描述。bonding技术一共有7种模式,分别是轮询策略、主从备份策略、XOR策略、广播策略、IEEE 802.3ad动态链路聚合、自适应传输负载均衡以及自适应负载均衡。这7种模式适用于不同的传输环境,本系统选用的3G网卡设备以及运营商都相同,因此选择负载均衡模式。
3 系统实现
依据系统的模块设计和系统设计流程,主要介绍3G拨号和3G带宽聚合的实现过程。这两部分都是基于TMS320DM3730开发板实现的。
3.1 3G拨号实现
3G拨号利用PPP拨号程序实现,为了能在开发板上进行PPP拨号,编译内核时需要选择PPP选项,并且移植pppd拨号程序。PPP拨号原理如下:
① pppd程序首先调用chat会话程序;
② chat会话程序启动后,将进行拨号、启动服务器端的pppd程序以及验证身份,完成后chat会话程序结束;
③ 由pppd程序与服务器端的pppd程序进行握手,建立PPP连接。
连接建立、连接质量控制、网络层协议配置、连接终止等步骤由pppd程序完成。服务器端pppd的启动过程以及连接建立过程中的交互由chat程序完成。本系统中pppd程序调用的参数脚本写在pppon程序中,chat程序的交互参数写在pppondialer中。pppon配置文件略——编者注。
3.2 3G带宽聚合实现
3G带宽聚合通过3个步骤实现,以下过程均以两张网卡为例:
① 策略路由过程。通过shell命令在Linux系统中实现,命令略——编者注。
② 虚拟隧道建立过程。通过Vtun开源软件进行实现,实现过程主要是vtun.conf文件进行配置。客户端和服务器端内容基本一致,服务器端配置略——编者注。
③ 多网卡绑定过程。本系统使用Bond0模式,即负载均衡模式。由于已经建立了虚拟隧道,只用绑定客户端和服务器端的虚拟网卡,绑定成功后在客户端和服务器端各自再生成一个虚拟网卡Bond0,最终传输视频时使用这两张网卡进行通信。Bond的具体过程需要在系统文件添加配置文件etc/sysconfig/networkscripts/ifcfgbond0,文件内容略——编者注。
3.3 视频传输过程实现
本系统利用GSstreamer进行视频采集、编解码、RTP传输以及播放,传输层使用UDP协议。GStreamer是一个开源的多媒体框架库,利用它可以构建一系列的媒体处理模块。GStreamer核心函数库是一个处理插件、数据流和媒体操作框架。利用管道技术,开发人员可以根据自己的需求编写相应的插件。DM3730开发板自带GStreamer,因此只需在服务器上安装相应插件。
4 系统测试
本系统测试开发板运行的嵌入式Linux系统内核版本为2.6.37,服务器端运行系统为ubuntu10.04,内核版本为2.6.32。测试环境位于学校教学楼,3G信号较弱。摄像头采集分辨率为720P,帧率设置为25 fps。摄像头保持固定,分别进行单张网卡传输和3张网卡绑定传输测试,并将测试结果进行对比,测试结果如图7所示。从中可以看出3张网卡绑定传输的传输质量明显好于单张网卡传输。

图7 测试结果对比图
结语
针对高清实时视频通过3G网络传输带宽不足的问题,本系统设计并实现了一种基于TMS320DM3730处理器的视频传输系统,通过多块3G网卡的绑定,有效聚合了带宽,满足了视频传输过程中对带宽的需求。