PUSH推送技术
20吉林大学学报(信息科学版)第30卷自然音源得到的音频信号必须变换成数字音频信号后,才能送到处理器中作进一步处理。在声卡驱动上,从安全性角度考虑,应用程序在L而是通过内核提供的驱动程序完inux下无法直接对声卡设备进行操作,
10]。成对声卡的各种操作[
)系统调用o函数获得对声卡的访问权,同时为随后的系统调用做好准备,其函数原型:en(intoen pp
(,,);参数p对于本系统constchar*pathnameintflasintmodeathname是将要被打开的设备文件名称, g
/为/参数f指明新创建文devdslas标志设备打开方式;mode为可选参数。当指定设备文件不存在时,p;g
),,函数从声卡读取数据,其函数原型:件具有的权限。系统调用read(intread(intfdchar*bufsize_t
);参数f通过o参数b保存从声卡获得的数countd是设备文件的标识符,en函数调用获得;uf是缓冲区,p
参数c如果调用成功,将返回从声卡读取的实际字节数,如果调用据;ount限定从声卡获得的最大字节数;
失败,将返回-故系统调用w函数原型:1。因为设计声音为双向通信,rite函数向声卡写入数据,size_t
(,,_);其参数和rwriteintfdconstchar*bufsizetcountead函数一样。系统调用ioctl对声卡进行控制,
在此设置采样率,量化位数以及声道数目和控制方式。
)视频以及图像显示。在显示设备的图形用户界面利用l帧缓冲2inux内核中的一种驱动程序接口,
[1]),接口。当L利用F驱动(FramebufferDriverinux抽象出FrameBuffer设备时1ramebuffer机制模仿显
卡的功能,将显卡硬件结构抽象掉后,便于在程序设计上利用用户态进程实现对屏的直接写功能,使设计简明,便于维护升级。基于这种理念的设计本质上是为了避免考虑物理显存的位置、换页机制,将对显示
统一化,用户将F将其映射到进程地址空间后,就设备的操作抽象化、ramebuffer看成是显存的一个映像,
能直接进行读写操作,而写操作立即反应在屏幕上。这样的设计更加方便,而且效果可以达到预期指标。
)视频信息的传输。设计网络环境中实时传输流媒体数据是运用3
[12],,单播)或一对多(组播)传RTP。利用它能一对一(unicastmulticast
播。R见TP是在传输协议基础上作为应用程序的一部分加以实现的(
)。图2
——考虑到成本问题,设计采用开源的R面向对TP库—JRTPLIB(
。以下给出设计程序实现的主要过程。象的RTP库)
)初始化:使用J首先生成1RTPLIB进行实时流媒体数据传输前,
()再调用C方法对RTPSession类的一个实例表示此次RTP会话,reate
13]。R()其进行初始化操作[方法只有一个参数,TPSession类的Create
[3]。用来指明此次RTP会话所采用的端口号1
)()数据接收:首先调用R方法接收R2TPSession类的PollDataTP
)或者R数据报。由于同TCP(RealimeTransortControlProtocol-T p图2 结构层Fi.2 Structurelaer gy
,()一R源)调用R和GTP会话中允许有多个参与者(TPSession类的GotoFirstSourceWithDataotoNext-
()方法遍历携带有数据的源。从R调用RSourceWithDataTP会话中检测出有效数据源后,TPSession类
(),的G并从中抽取R将其释放。etNextPacketTP数据报,RTP数据报处理完后,
)数据控制:在使用时可以由J3JRTPLIB是个高度封装后的RTP库,RTPLIB完成传输。只要Poll-()()或S方法被成功调用,并在需要DataendPacketJRTPLIB就能自动对到达的RTCP数据报进行处理,
[4]。时发送R确保整个RTCP数据报,TP会话过程的正确性1
2 调 试
在调试阶段,进行了声音、图片以及视频等多媒体信息实时推送测试。测试结果表明,在接收终端和控制中心的距离在2视频能顺畅播放,图片推送十分理想。00m以内声音的实时性和真实性比较理想,
下面给出图片测试的过程以及效果图。
);将所有设备连接好,在主控机窗口添加被推送内容(见图3选择被推送图片后,选择已连接的I用P(
户终端提出请求的I点击“发送数据”按钮即可将多媒体信息打包推送出去。P地址)
当用户终端接收到来自P终端根据数据包信息判断后,提取CControl从数据库推送过来的信息时,