视频会议系统多画面软件的设计与分析
0 引言
视频会议的发展经历了一个从无到有、从不成熟到基本成熟的过程。在这个发展过程中,又相继出现了电视会议、桌面会议、多媒体会议等多种远程会议系统。视频会议系统发展的关键技术之一是视频编码。利用低比特率的视频编解码方案H.263 建议,可将视频图像最少压缩到大约20 kbps,以使其能在普通电话线上通过28.8 kbps 的V.34Modem 传送音频信号。事实上,在音视频编码协议不断改进与发展的同时,视频会议本身的协议也实现了更新换代,目前已出现了基于分组交换网的H.323 建议。视频会议向高性能、多功能、协同性、智能化和集成化方向发展的另一个关键技术是多画面合成技术。
由于传统采用RGB 格式存储数据流以用于多画面合成的方法十分浪费资源。因此,为了在有限的频带条件下最大限度地提高资源利用率,本文提出了一种在不影响画面质量的同时解决其资源利用问题的新方案。事实上。视频会议多画面软件已经应用到生活的诸多领域。而且将会有更广泛地使用。
1 数据流的捕获
Windows 下捕获数据包的结构如图l 所示,其中NDIS 的NDIS (Network Driver Interface Specification)是Microsoft 和3Com 公司联合制定的网络驱动规范,该规范提供有大量的操作函数。它可为上层的协议驱动提供服务,从而屏蔽了下层各种网卡的差别。NDIS 向上可支持多种网络协议,例如TCP/IP、NWLink IPX/SPX、NETBEUI 等,向下则可支持不同厂家生产的多种网卡。
利用 winpcap 进行网络数据包的捕获和过滤的设计步骤如下:
(1)打开网卡,设置网卡为混杂模式;
(2)回调函数Network Tap,得到监听命令后从网络设备驱动程序处收集数据包,并把监听到的数据包传送
给过滤程序;
(3)当Packet filter 监听到数据包到达时,NDIS 中间驱动程序调用分组驱动程序,该程序可将数据传递给每一个参与进程的分组过滤程序;
(4)由Packet filter过滤程序决定丢弃或接收数据包,并将接收的数据拷贝到相应的程序;
(5)通过分组过滤器后,再将未过滤掉的数据包提交给核心缓冲区,当系统缓冲区满后,再将数据包拷贝到用户缓冲区。监听程序可以直接从用户缓冲区中读取捕获的数据包;
(6)关闭网卡。
2 视频数据流的解码
捕获到的视频数据流。通常在网络传输中都采用H.263视频编码建议,其图像格式为CIF格式。H.263-CIF格式的数据流是一种压缩编码图像格式,这种格式在网络传输过程中可节省频带资源,可在有限的带宽下最大限度地提高资源利用率。但是,CIF格式必须经过处理才能应用于多画面合成。只有通过解码使捕获到的视频数据流变成YUV(RGB)格式后,此图像格式才可直接运用于多画面合成,而且此格式的图像合成也比较方便、快捷。为了使图像由H.263格式转变为YUV(RGB)格式,应运用H.263解码器进行解码。其编解码算法的概要图如图2所示。
3 多画面合成
视频数据流经过解码之后,可将其变成YUV(RGB)格式。下一环节即是视频数据流的合成(多画面合成),这也是本文的关键技术。在视频会议系统中,参加会议的与会者或许不只两、三个,所有与会者可能分布全国乃至世界各地。为了使每个与会者都能进行面对面的直接交流,就需要在同一时间看到所有的与会者,因此,多画面合成技术必不可少。通过多画面合成能使N个不同的视频画面实时地在同一台显示器上显示,这样,每一位与会者就都可以运用该软件看到其他成员。
YUV主要的采样格式有YCbCr4:2:O、YCbCr4:2:2、YCbCr4:1:1和YCbCr4:4.:4。其中YCbCr4:1:1比较常用,其含义是每个点保存一个8 bit的亮度值(也就是Y值),每2x2个点保存一个Cr和Cb值,这样,图像在人的视觉中不会起太大的变化。RGB (R,G,B都是8 bit unsigned)模型的4个点需要8×3=24 bits,而现在仅需要8+(8/4)+(8/4)=12 bits,平均每个点占12 bits。这样就把图像的数据压缩至一半。YUV411为每个像素都提取Y分量,UV分量在水平方向上每4个像素采样一次。YUV420并非V分量采样为0,而只是跟YUV411相比,在水平方向上提高了一倍的色差采样频率,并在垂直方向上以U/V间隔的方式减小了一半色差采样。
经过解码即可得到YUV格式的数据流,H.263-CIF的图像格式亮度取样像素个数、亮度取样行数为352x288,图像是由许多像素点组成的,即一幅H.263-CIF图像占有352×288个像素点,经过解码。这些值将不变化,即YUV格式的亮度取样像素个数、亮度取样行数也为352×288、也占有352×288个像素点。现在假设视频数据是YUV420格式.它的采样格式为4:2:0。在对YUV420格式的视频数据进行存储时,可按照图3所示的存储格式,先存储所有的Y,之后存储U,再存储V,并且每个像素点占用一个Y,平均四个像素点占用一个U和V。每个像素点占用一个字节,则一幅图像所占用的字节数将是352×288×(1+1,4+1/4)。
评论