实现离屏视频帧合成与分解的可移植可扩展解决方案
用于处理离屏页面的视频帧合成与分解模块是视频通信、视频网络、视频安防等多媒体应用中最重要的软件组件之一。离屏页面是指没有在屏幕上显示的那些视频帧。
视频帧合成模块能够接入多个视频输入通道,每个通道可以有各自不同的属性,如像素格式、像素分辨率等。然后将来自这些通道的帧合成到单个或多个视频输出通道(同样可以有不同的属性)的输出帧上。当这种合成帧经编码并从一台设备发送出去时,接收设备中的帧分解模块将会完成相反的功能,即提取输入通道的视频帧中的合成帧。图1和图2显示了这些组件的功能描述。
本文将讨论需要使用这些模块的各种用例,在嵌入式平台上实现帧合成器/分解器的不同方法以及这些方法各自的优缺点,并推荐一种使用OpenGL ES构架和图形处理单元(GPU)的具有高度可移植性和可扩展性的设计解决方案。
2.0 用例
多媒体系统有许多不同的应用场合需要使用帧合成器/分解器功能性组件。下面的解释讨论了其中的一些使用案例。
2.1 视频通信系统
在涉及到双方进行高清视频呼叫的IP视频通信系统中(即在点到点视频呼叫中),要求每台设备与另外一台设备交换从各自摄像机捕获到的视频帧。每台设备上可能会使用不同的视频压缩技术(如MPEG、H.264等)对捕获到的摄像机图像帧进行压缩/编码。压缩后的比特流再使用各种网络协议(如RTP、UDP)在网络上传送。
在接收端,首先要接收来自发送端的编过码的数据流,然后使用MPEG、H.264等视频解压缩算法进行解码/解压缩。最终在接收端显示解码后的帧。这样,呼叫双方都至少需要具有同时解码从网络上收到的帧和编码自己的摄像机捕获到的帧的功能。
在智能手机、平板电脑等典型的嵌入式系统中,实现点到点视频呼叫所需的这些编码/解码算法因所用的处理器架构而成为可能。这些算法要么在多内核CPU或低功耗数字信号处理器(DSP)上实现,要么使用硬件视频加速器实现。
但在视频会议情况下,会有多台设备进行视频呼叫。因此如果一台设备想要参与视频会议呼叫,它需要支持一个以上的解码实例来解码从多方收到的视频,还需要一个编码实例来编码自己摄像机的内容。
由于设备存在最多一路高清帧的编码和解码电路限制,低端平板电脑和智能手机不可能支持涉及多路高清帧解码和单路高清帧编码的会议呼叫。为了让这种系统支持高清视频会议,它们需要采用所有设备能够拨入的高端视频通信桥。图3显示了这种视频桥的功能。
视频桥接收来自所有设备的多路编码过的输入视频流,然后将它们解码为帧。来自多方的解码帧再合成为单个帧。这种视频桥将为每个连接的用户设备生成合成帧。
视频桥为某个用户设备产生的合成帧包含有除该台设备自己产生的帧以外的所有其它用户设备产生的视频帧。因此为了在所有设备之间建立视频会议,必须至少有一个桥。这种桥可以是一个高端视频卡,也可以是具有更强编码和解码功能的这些设备之一。
正如我们在上述例子中看到的那样,扮演视频桥角色的嵌入式设备需要具有离屏视频帧合成组件。
2.2 外部显示器
对上述视频会议用例中与视频桥连接的每台设备来说,可能要求从输入的单路视频通道中提取/分解合成视频帧,并将它们显示到各台显示设备,或者出于演示等目的在接收终端的屏幕各窗口上显示。下面的图4就展示了这样的一个用例,其中来自用户A、C和D的帧被显示在用户A的LCD屏幕的各个独立窗口上,而来自用户B的帧显示在诸如HDMI电视机等外部显示器上。
2.3 3D视频会议
在如图5所示的3D视频会议应用案例中,要求将来自两个摄像传感器的输入帧合成在一起,经编码后在网络上以数据流的形式传输。接收端则要求提取/分解出来自每个摄像传感器的帧,以便将各个通道的帧渲染到显示器的不同通道上,实现立体观看体验。
3.0 实现
离屏帧合成器/分解器功能可以有多种实现方式:
3.1 使用独立于平台的算法
这种方法采用可以在CPU上运行的通用算法。虽然这种实现具有很好的可移植性,但会导致CPU负担过重。这是因为帧的合成/分解过程通常包含以下一些操作:
●缩放或重新调整视频帧尺寸(放大或缩小)
●输入视频帧在输出帧中的定位
●输入帧的剪切
●输出帧的剪切
●输入通道的Alpha混合
●输入/输出帧的旋转
在帧速率为30fps的视频流情况下,这些操作必须以1/30s即33.33ms的帧周期执行。如果帧的像素分辨率更高,比如720p、1080p,那么处理这些帧将成为CPU很重的负担。CPU负担的加重将导致不良的用户界面,因为I/O互动少了。如果处理器不能在如此短的帧周期内处理完一帧,那么在帧合成过程中有可能发生丢帧现象。
3.2
- 华北工控工控机在大中型视频会议中的应用(12-20)
- 高清视频会议技术全面解析(06-21)
- 视频会议的音频干扰及处理方法(06-10)
- Windows CE 进程、线程和内存管理(11-09)
- RedHatLinux新手入门教程(5)(11-12)
- uClinux介绍(11-09)