摘 要:针对多屏融合之间的文件共享存在设备互联和实时传输的问题,介绍了WiFi Display技术的各层构架、技术规范和RTP/RTCP协议,分析和实现了WiFi Direct连接、屏幕镜像、编码模块H.264的优化和数据传输。通过手机将屏幕的内容实时地传送到电脑、电视机上,满足了用户间多屏互动的需求。
关键词:WiFi Display;无线;屏幕互动; 实时传输协议/实时控制协议
随着智能手机、平板电脑的出现,人们能够更方便地跨时空获取信息,同时设备的屏幕显示分辨率也从240像素提高到1040像素,达到全高清分辨率,但手机的屏幕大小是一个重要的瓶颈。将手机的图片、影音文件传输到电视上成为当今必须解决的问题[1],而无线传输技术使这一问题的解决成为可能。WiFi Direct可在无需路由器的的情况下,以点对点实时的形式互联,从而传送不同设备系统中的文件,方便用户便利地实现文件打印、资源共享和显示等任务。
1 WiFi Display简介
Miracast是WiFi联盟对支持WiFi Display功能的设备认证名称。随着手机处理功能的提高,多媒体编解码技术的完善,具备了解码高清图像的能力。但由于手机的便携性,使得屏幕不可能做到太大,也就无法充分展示视频图像的高清效果。如果采用微型投影的方法,将手机作为投影仪,将手机里的图像投影到墙上,则可以不受物理尺寸的限制。但该方案受到了技术本身的成熟度以及手机电池等因素的限制。
WiFi Display技术是媒体之间文件共享的业务,可以方便地将手机上的文件投影到电脑、电视机上。通信中的多个设备分别担任服务器和客户机的互动模式,WiFi Display可在没有连接有线时进行影像无线显示,方便地享受高画质影像效果。通过压缩3D视频,进行WiFi传输,数据的传输率达到300 Mb/s,传送的影像采用压缩方式,压缩/解压处理采用H.264格式。高通和博通等半导体厂商已经发布了支持WiFi Display的整合芯片组[2]。
2 WiFi Display体系结构
WiFi Display是一种无需WLAN连接也可在设备间直接通信的标准,底层以WiFi Direct(WiFi直连)为基础,上层由协议栈软件构成。设备终端的服务发现和连接通过WiFi Direct进行处理,管理数据流的传输层则通过WiFi Display进行处理。
2.1 WiFi Display的主要设备和协议栈
WiFi Display主要设备如图1所示。
2.2 RTP/RTCP协议
多媒体数据需要将应用层、传输层、网络层的数据报文进行封装,以便传输。RTP(Real-time Transport Protocol)是一种应用层传输实时数据的协议, RTCP(RTP Control Protocol)的功能是保证媒体数据的同步、服务质量QoS的监视与反馈以及多播组中成员的标识。在RTP会话过程中,设备终端周期性地传送RTCP数据包[3]。RTCP包头中含有已发送的数据包的数量及丢失数据包的数量等统计资料。因此,可以利用这些信息动态地改变传输速率,甚至改变有效载荷类型。多媒体数据在传输过程中的封装格式如图3所示。
数据接收端保持数据同步播放主要依靠如下技术:
(1)RTP数据报文的数据序号用于排序RTP报文分组,以消除重复分组,保持流文件同步并连续地播放。
(2)RTP数据报文的时戳字段可作为流间同步标识,以保持视频和音频流间同步并连续地播放。
(3)发送者可以根据接收者反馈的RTCP数据来实施端到端的强制性同步控制, 改善当前网络传输的服务质量。
3 多屏融合软件实现
WiFi Display的软件实现遵循TCP/IP协议。物理层采用WiFi协议,在没有接入点(AP)的情况下采用WiFi Direct协议;网络层采用IP协议,在传输层数据传输采用UDP协议。
3.1 WiFi Direct实现
WiFi Direct是两个不同设备直连时传输数据的主要模块。主要设计如下:模块WiFiActivity类实现可用设备的发现和连接及断开连接,并且显示设备连接的详情,应用程序通过创建类BroadcastReceiver的继承类模块WiFiBroadcastReceive来通知WiFi的状态及事件[4]。模块WiFiBroadcastReceive类作为一个广播接收器,监听WiFi Direct事件并把结果传递给模块WiFiActivity,通过WifiP2pManager类的行为描述函数来请求可用的节点,在请求连接成功后获得组用户的IP。模块DeviceList用来实现显示活动的节点和状态。表示设备的5种状态:设备可用(AVAILABLE)、无可用设备(UNAVAILABLE)、设备已邀请(INVITED)、设备已连接(CONNECTED)、设备连接失败(FAILED)。模块DeviceDetail用来显示被选择设备的细节,同时进行驱动设备连接、断开和数据传输。当设备连接时,应用程序通过WiFiP2pConfig.deviceAddress函数获取设备的地址及WiFiP2pConfig.wps.setup函数来设置WPS的连接方式。
3.2 屏幕镜像实现
手机通过SurfaceFlinger类将各层UI数据混屏并投递到显示设备中显示。SurfaceFlinger类支持多个显示设备,系统定义了一个DisplayType的枚举类型,其中包括代表手机屏幕的主要显示设备,代表高精晰度多媒体接口(HDMI)等外接设备的外部显示设备及以WiFi Display设备定义的虚拟显示设备。如图4所示。
SurfaceFlinger类定义变量保存了系统中当前所有的显示设备。其中mDrawingState用来控制当前正在绘制的显示层的状态,mCurrentState表示当前所有显示层的状态,DisplayDevice表示显示设备。变量mFrameBufferSurface是FrameBufferSurface类型,若显示设备不属于虚拟显示设备类型,则该变量不为空。显示数据通过网络传递给真正的显示设备,对于源设备端的SurfaceFlinger来说,不存在FrameBuffer变量。故当设备为虚拟显示设备时,其对应的变量mFrameBufferSurface则为空。SurfaceFlinger类将遍历系统中所有的显示设备,来完成各自的混屏工作,由DisplayManagerService函数统一管理系统中的显示设备,WindowManagerService函数管理系统中每个UI层的位置和属性。当手机把播放内容传送至远端设备时,弹出的密码框就不能投递到显示设备上。
3.3 编解码模块H.264的优化及实现
编码模块主要功能是通过从应用层获取传输流文件,并对其压缩编码,将产生的编码码流通过客户端传输出去。通过调用方法SetPreviewcallback(new H264Encoder(int width, int height))实现流文件的编码。编码模块接收到传递的参数width(宽度)和height(高度)时,即可给缓冲区大小buffer分配width×height字节。利用BeginEncode(int width, int height)编码,同时输出码流,EndEncode( )编码结束。
解码模块的主要功能是实现解码压缩流文件。首先要将FFmpeg移植到Android手机中,Init( )和SetFFmpeg( )实现初始化和设置FFmpeg。通过函数FindStream( )和FindDecoder( )查找音视频流文件和解码器。Convert( )实现码流解码,如果解码未结束,则继续执行函数Convert( ),否则关闭解码器,释放资源。
3.4 数据传输实现
数据封装主要是在应用层采用RTP协议封装,传输层采用UDP协议封装,网络层采用IP协议封装[5-6]。传输时最大传输单元为1 500 B,当数据大于1 460 B时,采用IP数据报分片。
RTP侧重数据传输的实时性,此协议提供的服务包括数据顺序号、时间标记、传输控制等。RTCP与RTP一起工作,负责对RTP的通信和会话进行带外管理(如流量控制、拥塞控制、会话源管理等)。
数据传输的流程如图5所示,实现步骤如下:
(1) RTP_INITIAL(RTPSession *session)对RTP会话进行初始化操作,利用Create(int u)函数方法指明会话所采用的端口号。如果调用失败,具体的出错信息则可以通过调用 RTPGetErrorString()函数得到。同时调用函数SetTimestampUnit(double u)方法来实现设置时戳单元,完成RTP会话的初始化。
(2)创建RTP连接,由函数CreateSocket( )完成,先调用socksrv = socket(AF_INET,SOCKET_DGRAM,0)来创建套接字,创建成功后用函数bind(socksrv,(SOCKADDR*)&addrSrv, sizeof(SOCKADDR))绑定套接字。
(3)当RTP会话建立之后,函数AddDestination( )、DeleteDestination() 和ClearDestinations()建立和删除目标地址。然后通过SetDefaultPayloadType()函数来设置负载类型,SetDefaultMark()设置标识,SetDefaultTimeStampIncrement() 函数设置时戳增量。
(4)接收RTP数据包时,遍历携带有数据的源,接收时由函数RTPDataReceive(RTPSession *session, int u, char *payload, int *num, struct sockaddr *addr)完成,将接收到的RTP数据包由RTCP按顺序连接起来。
(5)判断传输会话是否结束,若是,则结束这次会话。
3.5 测试结果
本文通过将FFmpeg类进行优化并移植到Android平台作为视频流文件的编解码库。由于视频传输要消耗大量的带宽,因此利用H.264压缩效率高的特点,对其进行优化可以实现文件的实时传输,减少延迟时间。经测试,本文方法解决了对于适应客户端内存不足,硬件资源有限的问题,提高了系统处理器资源的利用率。最终实现了多屏环境下的文件实时、高清传输显示。
本文基于RTP/RTCP协议的多屏互动中多媒体文件的网络传输实时共享技术,详细介绍了WiFi Direct的实现方法。通过屏幕镜像,流文件的H.264优化编解码模块和应用RTP/RTCP实现数据传输。WiFi Direct可以兼容现有的WiFi设备,使设备能够互联。终端设备采用了开放源码,具有很强的跨平台性以及先进、可靠、便利的优点。在无线局域网传输速度不高的情况下,本文的多屏融合技术必将在图片分享、高清在线视频、电视游戏和商务演示中具有广阔的发展前景。
参考文献
[1] 张欣宇. 三屏互动业务解决方案研究[D]. 北京:北京邮电大学,2011.
[2] WiFi Alliance. Wi-Fi CERTIFIED Miracast:Extending the WiFi experience to seamless video display[EB/OL].[2012-09-19].http://www.wi-fi.org/knowledge-center/white-pa-pers/wi-fi-certified-miracast?-extending-wi-fi-experience-seamless-video.
[3] 张海军,吴克捷,杨印根,等.一个基于RTP/RTCP的手机报警系统[J].电子技术应用, 2008,34(10):142-145.
[4] 谷丁云.基于WiFi Direct的对等的移动社交网络软件平台设计与原型实现[M]. 南京:南京邮电大学出版社,
2013.
[5] 林强,黄建华,毛军鹏. 基于多源的P2P流媒体传输系统的设计[J].电子技术应用,2007,33(5):91-93.
[6] 吴想想.基于Android平台软件开发方法的研究与应用[M].北京:北京邮电大学出版社,2011.