在Symbian平台上实现H264的RTSP流的播放

 

1.  S60用多媒体框架(MMF)实现视频和音频的回放和录制,其拥有一个插件架构,可使用多种类型的用于媒体回放和录制的插件,比如RealPlayer引擎是针对MMF控制器的插件,支持视频和音频回放及流。
2.  s60内置播放器采用Realplayer引擎。 不支持HTTP流媒体,因为在显示之前必须把所有的视频数据一次性读入缓存。
3.  S60的常用格式是 MP4(编解码标准为H.263MPEG4)3GP(H.263MPEG4) 
4.  S60平台支持C++进行多媒体开发,下表总结了如何用C++实现多媒体应用
用例
Symbian C++
使用S60媒体播放器和RealPlayer引擎播放本地文件和RTSP流。
使用AppArc APIRApaLsSession)启动S60媒体播放器应用。
使用定制的用户界面和RealPlayer引擎播放本地文件和RTSP流。
创建自己的用户界面并使用CVideoPlayerUtility API播放和控制文件或URL
使用自己的播放器播放本地文件。
创建自己的播放器。使用CMdaAudioOutputStream进行音频渲染(1),使用CDirectScreenAccess API 进行视频渲染。
使用自己的播放器实施流视频内容。
使用network APIs( RSocketServRConnectionRSocket) 连接到网络(2)。 然后使用CMdaAudioOutputStream进行音频渲染,使用CDirectScreenAccess API 进行视频渲染。
 
5.  从上表得出结论,CVideoPlayerUtility用来开发视频剪辑的播放和录制。如果要开发一个读取本地文件或RTSP流而且格式为MP43GPRmvb的播放器,使用CVideoPlayerUtility就够了。 但如果需要读取网络数据流,就必须用network APIs连接到网络获取数据,接着用CDirectScreenAccess API绘制屏幕,当中主要步骤有RTP传输,mpeg4/h264解码,yuv2rgb转换。如果不用symbianAPI,流媒体传输可移植live555,视音频解码可用ffmpeg

 

 

 

随着目前手机监控市场的快速发展,手机监控因其可以实现真正的 lt;/span>“AnyTimeAnyWhereAnyDevice”(任何时间、任何地点)而收到越来越多安防企业的重视。目前的智能手机操作系统主要被SymbianWinceLinux占有。要真正实现手机监控的”AnyDevice” 任何设备),最少要支持上述三种的手机操作系统。由于Wince Window开发平台的相似性,目前Wince平台上的H264的解码库有很多开源的代码可以参考, 网上可以参考的代码主要有ffmpegJMT264x264等。我在网上搜索了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 decoderAAC audio decoder可以在网上寻找纯C的代码,稍加移植即可使用。建议可以先在Window平台下面调试通过在移植到symbian平台上面。

Symbain中,RGB颜色的实际存储方式实际上是BRG顺序。如红色实际上保存为0x0000FF而非0x00FF0000。所以如果有其他平台用到Symbian中的颜色的话,请注意转换。Ffmpeg解码输出鱼yuv420,在PC上可以转换成RGB565显示, Symbian上需要转换成BGR565

转换的部分可以参考MobiFLV项目的YUVToRGB.hYUVToRGB.cpp两个文件, 作者对转换的过程采用了查表优化,效率很不错,另外该类支持按比例对视频进行缩放,效果不错。

视频显示可以使用CFbsBitmap进行贴图显示,但这样的效率不是最高。使用CDirectScreenAccess类直接写屏,可以得到更高是效率。音频直接调用系统的CMdaAudioOutputStream 类进行播放即可。

播放的效果如下图所示,


                                                           竖屏

                                                             横屏

以上的程序连接的rtsp地址为rtsp://88.107.126.1:3838/live.3gp,图像质量为CIF 5FP/S,32KB。该视频服务器位于英国,有兴趣的朋友可以试试看。该程序还实现了对远端的云台控制,控制镜头的移动和缩放,丰富了手机监控的功能。

程序在E71N81N95上面测试通过。

缺点  当接入点选择cmwap时,无法连接视频流, 因为服务器端没有做RTSP流代理功能,客户端需要做移动网关的穿透。考虑到cmwap的速度很慢和未来网络的发展,实现的意义并不是很大,所以放弃了该部分的工作。

有兴趣的朋友可以联系我,一起交流学习。

 

你可能感兴趣的:(在Symbian平台上实现H264的RTSP流的播放)