用例
|
Symbian C++
|
使用S60媒体播放器和RealPlayer引擎播放本地文件和RTSP流。
|
使用AppArc API(RApaLsSession)启动S60媒体播放器应用。
|
使用定制的用户界面和RealPlayer引擎播放本地文件和RTSP流。
|
创建自己的用户界面并使用CVideoPlayerUtility API播放和控制文件或URL。
|
使用自己的播放器播放本地文件。
|
创建自己的播放器。使用CMdaAudioOutputStream进行音频渲染(1),使用CDirectScreenAccess API 进行视频渲染。
|
使用自己的播放器实施流视频内容。
|
使用network APIs( RSocketServ、RConnection、RSocket) 连接到网络(2)。 然后使用CMdaAudioOutputStream进行音频渲染,使用CDirectScreenAccess API 进行视频渲染。
|
随着目前手机监控市场的快速发展,手机监控因其可以实现真正的 lt;/span>“AnyTime、AnyWhere、AnyDevice”(任何时间、任何地点)而收到越来越多安防企业的重视。目前的智能手机操作系统主要被Symbian、Wince和Linux占有。要真正实现手机监控的”AnyDevice”( 任何设备),最少要支持上述三种的手机操作系统。由于Wince和 Window开发平台的相似性,目前Wince平台上的H264的解码库有很多开源的代码可以参考, 网上可以参考的代码主要有ffmpeg、JM、T264,x264等。我在网上搜索了Symbian上的H264的解码库,发现根本没有开源的项目可以参考,所以本文主要关注在Symbian平台下实现上述功能。
系统的结构如下图所示:
视频服务器实现了双码流,这样即可以保证普通监控的要求,又可以保证满足手机监控等特殊需求。考虑到实际网络的带宽,解码能力等因素,手机上推荐使用CIF或者QCIF的分辨率,帧率最好控制在15帧以下。
软件的框架如下图所示:
Net Engine模块主要负责向视频服务器获取数据, 实现了一个RTSP协议, 将控制信息和音视频的数据分别从RTSP包和RTP包中取出,送往视频流队列当中。具体的RTSP协议的协商可以参考RFC的文档。
Stream Data Queue模块主要用于负责存储音视频的数据, 没有什么需要详细说明的。
H264 video decoder模块主要负责视频数据的解码。解码库采用的是移植过的ffmpeg, 这是这个程序当中花费时间最长的部分,对ffmpeg的移植最主要要主要内存对齐,并且有些在PC上可以用的参数在Symbian平台下需要进行断点调试修改后才可以使用。
AMR audio decoder和AAC audio decoder可以在网上寻找纯C的代码,稍加移植即可使用。建议可以先在Window平台下面调试通过在移植到symbian平台上面。
在Symbain中,RGB颜色的实际存储方式实际上是BRG顺序。如红色实际上保存为0x0000FF而非0x00FF0000。所以如果有其他平台用到Symbian中的颜色的话,请注意转换。Ffmpeg解码输出鱼yuv420,在PC上可以转换成RGB565显示, 在Symbian上需要转换成BGR565。
转换的部分可以参考MobiFLV项目的YUVToRGB.h和YUVToRGB.cpp两个文件, 作者对转换的过程采用了查表优化,效率很不错,另外该类支持按比例对视频进行缩放,效果不错。
视频显示可以使用CFbsBitmap进行贴图显示,但这样的效率不是最高。使用CDirectScreenAccess类直接写屏,可以得到更高是效率。音频直接调用系统的CMdaAudioOutputStream 类进行播放即可。
播放的效果如下图所示,
竖屏
横屏
以上的程序连接的rtsp地址为rtsp://88.107.126.1:3838/live.3gp,图像质量为CIF ,5FP/S,32KB。该视频服务器位于英国,有兴趣的朋友可以试试看。该程序还实现了对远端的云台控制,控制镜头的移动和缩放,丰富了手机监控的功能。
程序在E71,N81,N95上面测试通过。
缺点 : 当接入点选择cmwap时,无法连接视频流, 因为服务器端没有做RTSP流代理功能,客户端需要做移动网关的穿透。考虑到cmwap的速度很慢和未来网络的发展,实现的意义并不是很大,所以放弃了该部分的工作。
有兴趣的朋友可以联系我,一起交流学习。