【VC++开源代码栏目提醒】:文章导读:在新的一年中,各位网友都进入紧张的学习或是工作阶段。
网学会员整理了VC++开源代码-移动视频监控 - 学士论文的相关内容供大家参考,祝大家在新的一年里工作和学习顺利!
项目综述 对于市场上的视频监控系统,大家都有一定的了解,就是视频采集,经过无线/有线发送到服务或代理,客户从服务或代理上得到视频/音频流。
不复杂。
对于不远的将来,3G,4G 的到来,对移动的业务有一个推动,监控自然有了称动的一个特性,废话少说,先说说一般常用的架构。
客户端采集-通过无线数据网-服务器-移动客户端手机取得视频流可行性:技术环节纵观: 采集端: ARM/DSP 从视频头得到采集数据,进行开发(也有现成硬件) ,主要是编码,可以采用很多
开源跨平台编码器(ffmpeg/xvid/xh264标准流可以采用
开源(Live555/vlc,也可自定义协议 服务器: 可以用 Live555 实行 RTSP 及流媒服务器,
开源跨平台编码器, 客户监控端: 可以用 Live555/vlc 实现 RTSP, ffmpeg/xvid/xh264 编解码,由于客户端操系统的多变性,可以用采跨多种移动平台的 SDL 进行开发流的播放及界面的显示。
至于需求就不多说了, ) 至于技术系统分析及设计也不多说了,自有文档: 计划: 1,原型开发(3weeks 2 总体
设计(2weeks 3 制定开发计划,组织开发1week 4实现第一架构版(1month,严格测试 5 迭代 3 个周期 6 测试发布 Alpha 版。
原型开发---总体分析。
原型开发,重点是解决一些关键问题,处理技术风险
列表中关键项:此项目中,采集,上传到服务器的
系统都常见,关键是服务器到移动端, 服务器可以先用 RealNetworks 的 Helix Server 搭建,很简单,10分钟下载,10分钟配置。
客户端开发: 寻找跨平台的几个关键环节的部分: RTSP(including RTP/RTCP,编解码,跨移动平台的显示。
RTSP,live555是
开源以 C编写,处理起来容易,不同平台移植不错。
VLC 的看着很庞大,看了一会,觉得有点乱。
什么都有。
先做备选。
编解码,ffmpeg 资料多,看一下,也很容易懂, xvid
代码据说效率高,不过用 ffmpeg中的 h264简化
代码处理 H264应该不错。
显示, QT 写界面不错,就是查了一下,往上面绘解码视频帧不容易呀(render就用 SDL吧,这个东东跨平台,多个
常用移动平台都支持。
Symbian 也 OK,不过 Sybmain 的 DSA 也没有问题,有这样的经验。
那么就先从 RTSP 着手。
研究 Live555. 以后几天会写 live555的分析
文档,做为此项目的日志。
原型开发---RTSPLive555一,Live555开发环境搭建:二,Wince 平台的移植: 由于 Live555是一种跨平台的库,虽然没有专门 for WINCE 的,有人会说,既然跨平台,为何不支持 CE,呵呵,近来看了很多跨平台的库, 他们的
代码注释中常看到这样的话“sincewinodows OS is not POSIX it is a silly system,not supported by our product 这些人好像都看不起 windows OS,呵呵,没关系,这是他们的立场与观点,幸好移植起来并不复杂。
1,把源码依次加出到 Window CE 项目中。
进行编译,有一堆错误,没关系,只是热身。
2,首先会有 Winsock2相关的问题,没关系,找到一个与 winsock2相关的定义“”把这个宏定义为1即可。
编译此项目无法链接,当然了,wince 中的
网络库是 ws2.lib而不是ws_2.lib. 3 windows 平台不支持 strstream因此要在工程中 定义“NO_STRSTREAM宏。
三,Live555框架分析: 几个主要的类。
四,live555 Client 使用活动图:原型开发---音视频编解码多平台移植(for window/wince)音视频编解码多平台移植(for window/wince)ffmpeg --自由之路即是曲折之路 终于完成了了第二个 Client side 原型(for Wince,其中花掉我最多时间的就是 ffmpeg的对 WINCE 的移植。
其中有大半时间是由于网上的一些不完整及不正确信息所误导, 但是没有这些零星的信息,我可能花费更多的时间。
现在我把自己的移植过程分享给大家,我尽量做到事无巨细,也好让大家少走弯路,省去我们程序员们的时间。
那可是大把的银子与信心浪费。
呵呵,书归正传。
一,第一个想法,仍像从前移植平台
代码一样,先找到这种跨平台
代码的自己的特定平台的 make 文件或工程:可惜没有发现 ffmpeg 有 for windows 及 for wince 的 make 及工程。
再细读 ffmpeg 的官方网站,让人仰天大笑,其中说到,由于
VC/Visual studio 开发环境的编译器,对 C99支持不好,而 ffmpeg 又是 follow 这些 C 语言规范写的,因此,不支持
VC/VS 的编译器。
这比一些跨平台项目说 windows OS is silly OS not popular POSIX 从而不支持的说法更有趣。
其实,从 IT 行业而言,这些理由都不是那么的合逻辑,也不够严谨。
但
代码是别人写的。
我们又能如何呢?呵呵。
二,曲径通幽,既然 ffmpeg 不支持 windows 的编译器,那我们还有一个曲折的办法,它不是支持 POSIX 嘛 , 也就是支持 linux/unix 嘛 , 我们的 windows 那我们就有了我们的办法,平台上的 linux 编译器(算一种交叉编译吧,呵呵)于是大家想到了 Cyxwin 及 MingwMsys其它,Cyxwin 中编译出 windows 的平台上可用的库,还是调用了 Mingw 的编译器,于是我们就直接研究 Mingw Msys 吧,但是这个东东有一个致命的弱点,就是要安装,分别要更新一堆组件,更新到什么版本呢,天知道,都用最新的吧。
去相关的网站去下载他们(http://)不过 Mingw 的 sourceforge 网站真不是人去的,里面乱放,而且目录没有一个明确的索引,网站又慢,我是花了一天时间才找齐,后来发现 ffmpeg 有一个说明网页,可以明确下载。
请参看(http://ffmpeg.arrozcru.org/wiki/index.phptitleMSys_MinGW)其中下载地址我再列一下,以方便大家:Mingw:http://sourceforge.net/project/showfiles.phpgroup_id2435package_id240780release_id595197Mingw 插件更新:http://prdownloads.sourceforge.net/mingw/binutils-2.18.50-20080109-2.tar.gzdownloadhttp://prdownloads.sourceforge.net/mingw/mingwrt-3.15.1-mingw32-dll.tar.gzdownload http://prdownloads.sourceforge.net/mingwhttp://prdownloads.sourceforge.net/mingw/w32api-3.13-mingw32-dev.tar.gzdownload最稳定的 gcc 编译器 for mingw 插件:http://prdownloads.sourceforge.net/mingw/gcc-core-3.4.5-20060117-1.tar.gzdownloadhttp://prdownloads.sourceforge.net/mingw/gcc-g-3.4.5-20060117-1.tar.gzdownload至于安装过程,网上搜一下,不会有问题 cant miss it MSys:http://prdownloads.sourceforge.n ... 4.30-1.exedownload相关插件更新:http://prdownloads.sourceforge.net/mingw/MSYS-1.0.11-20080821-dll.tar.gzdownloadurlhttp://prdownloads.sourceforge.net/mingw/bash-3.1-MSYS-1.0.11-snapshot.tar.bz2download/urlurlhttp://prdownloads.sourceforge.net/mingw/coreutils-5.97-MSYS-1.0.11-snapshot.tar.bz2download/url urlhttp://prdownloads.sourceforge.net/mingw/make-3.81-MSYS-1.0.11-2.tar.bz2/url 至一 Msys 的安装及与 Mingw 整合在一起,网上查一下,cant
miss it三 , 开始 for windows 的 ffmpeg 编译。
这个 ffmpeg 论坛上倒有相关的指导。
请参照:http://ff
mpeg.arrozcru.org/wiki/index.phptitleStatic这里有一个静态库的编译。
按向导完成编译成静态 lib 库,可以址接进行编译链接到 windows项目中(only for windows 平台,not for wince好放到一个新的 window 项目中,编译成功,链接,一堆的库找不到,哈哈,仰天大笑,用工具一查相关引用,原来这些找不到函数,还在 mingw 的库中,也就是说要在项目中用 ffmpeg 的静态库,你还要搭上一堆 mingw 的库,就像现在市场上的搭配销售。
再笑,我先找个地方睡半天,缓解我的想扁人的冲动。
睡醒之后,换种用法,我编动态库,这下你不会不把我的所有函数给我加到我的 DLL 里吧,再换了一些 ffmpeg 的./configure 参数。
搞定。
生成了动态库,及 lib.用到项目里,编译通过。
不过,这只是万里长征第一步,我还要最痛苦的 for wince 的库。
四,for wince 的 ffmpeg: 从 linux 的
代码用 mingw 编成 for windows 那是人家 mingw 的任务, 我们也只绕了一 for道弯, wince 的 mingw 不存在呀, 怎么办, 忽然想到 linux 上的交叉编译,人家可以在
linux用定制的 gcc 交叉编译器弄出 for wince 的库,那我们何不在 Mingw 上搞出 for wince 的库,一查,网上果然仅有的解决
方案,也就是交叉编译成 for wince 的 ffmpeg,所用交叉编译器,大家可以看仔细了,网上有绝大多数的相关贴子给的交叉编译器是不正确的(下载的地址不正确)真搞不懂网上一堆人转载别人的文章,也不去验证一下,转载干嘛?,我就是由于用了网上这些人转载地址去下载编不正确的编译器,浪费了3天的时间,无功而返。
记住,下载的交叉编译器是cegccmingw 下载地址是: ()进行编译。
编译最新的库,会有一些汇编通不过。
自己对汇编不熟悉,不过要是在 linux 上交叉编译应该没问题,有兴趣的话,可以自己试那个环境,那样的话,用的交叉编译器就应该是 cegcc.没办法,为了节省我的时间,我可是要在两周内完成三个平台的原型开发的。
就拿了2007年的 ffmpeg 来编。
其中也改了不少东西才编译能通过,首先,./configure 之后,在生成的config.mak 中 , 要 修 改 “SLIB_EXTRA_CMD-lib /machine:i386 /def::.dll.def” 为“SLIB_EXTRA_CMD-lib /machine:arm /def::.dll.def”及 “EXTRALIBS -lm”改为“EXTRALIBS -lm -lws2.lib”,其中编译过程中采取了 perror 禁用,有 seek 函数禁用与替换(由于没有用 zliblinux 平台估计会没有问题.细节,可以有时间再写,有兴趣的话,可以加我 MSN。
编译成功后。
用在 C环境中。
测试普通函数通过,不过在视频编换时,效率不高。
换了一下网上的别人编译的 ffmpeg 库, (网上有一个下载,不过此 SDK 在 wince 上用时,用在 C项目中有
问题。
头文件中有重复定义, 解决办法是放在.c 文件中, Cpp 文件来调用, 由这样可以规避这些问题,但这样就存在了一些全局变量.这样的头文件是不能用在 Sybmian 平台的。
另外一种思路就是不用 ffmpeg.用 Xvid 解 mpeg4(测试下来效率好像要高于 ffmpeg毕竟是专门 for mpeg4)用 xh264解 H264拿过他们的源
代码一看,还是人家这跨平台,现成的 forwindows 平台的工程 make 文件,这才是真正的跨平台。
当然想要更多功能,ffmpeg 地位还是无人能及。
如果有人对编解码做简单的跨平台移植有兴趣,可以加我 MSN 一起
学习探计,相互学习,搞技术嘛,大家一起共享信息,会省掉多少人的多少个不眠之夜,我就是因为一些信息的不准确,害得我移了一周,每天可都
工作到凌晨2点多。
好了,今天就写到这里,至于 Symbian 平台的移植,改天再写。
原型开发---Symbian 客户端进展。
上周完成了 windows/wince 两个平台的原型开发,总结起来,ffmpeg 花了太多时间,这个跨平台库的确不够友好。
编好的 for wince 的动态库 在 windows mobile 6.X 上出现无法正常加载现象,所以现在的 wince 平台客户端,只能在 windows mobile5 ppc2003上正常运行。
期待该库新的进展。
不过我过于求功能全面化,不然完全可以改用 Xvid 及 xH264进行解码。
由于我采用的库全是跨平台,其它的 RTSP 库(live555及播放库(SDL) ,所以移动 Symbian理论上没有什么问题。
不过说到 Symbian想必大家都有些头痛,我是从 Series60 SDK0.9开始用 Symbian 的,那时
文档少得可怜,SDK 本身也一堆的问题没有解决,那时没有线程,没有 openCRSS 文 件 式 的 界 面 开 发 , 一 堆 标 新 立 异 的 API 。
全 新 不 兼 容 标 准 C 的SymbianC,连用 个 STL 都要去国外代理网站上去下载 STLPorts 来用,呵呵,想起来头就大。
已致于我没放太多时间在这个平台上,直到看到了 openC 及 QT Garden 版。
扯得有点远,近来手头项目太忙,Symbian 客户端不大。
一,完成了 ffmpeg for symbian 的编译,这个只花了一天的时间去编译及改
代码。
出现最多的,只是一些 tprintf 及 AV_DEBUG 的一些宏定义,编译器无法识别,这算不错的了,如果是 C,SymbianC对模板及一些类型定义 typeinfo 问题处理起来可就难了。
我用的是carbide 1.2编起来还算好,就是每次重编不能 clean 要手工清除一些中间文件,否则人家就罢工,不能 go on compiling.这是 symbian 开发环境一直以来的垢病,答案是:无解。
一直无解。
二,SDL 的移植,很简单,有专门的工程,编译成功,还没试三,RTSP(Live555) 我先进行了自己的整理与封装, 以减少移植中的麻烦, 毕竟是一套 C的库。
完成了一半,如果有问题我就从 VLC 或者 Darwin,或者其它
开源库中找一套简单的RTSP 来备用,不会有问题。
四,整体架构的整理与设计。
这是以后开发迭代的基石,也是我对项目的习惯,这一点上,我较喜欢所谓的 RUP 方式。
原型开发---原型跨平台界面装饰 QT一,两个操作系统的客户端已完成。
现在就尝试用一些界面工具来修饰。
SDL 当然是一套很简单的界面库,不过写起界面来,太麻烦,
代码量太大,简直就是重新写一套界面库,因为没有按界面控件,窗口元素,手工来封装,可行,但工作量,呵呵二,那就用常用的 QT 吧,根据过去的项目经验,QT 在 Mac winodows linux 上非常完美,(内存占用不小,世界上有完美吗?没有) ,移植到 Wince/Symbian 上,先看可行性,据我所知 wince 有商业版本,也可自己编译源码,QT for Symbian 现在也有一个 Garden 版,当然对5800XM 这样的有触摸屏的系统才有最大意义, 因为 QT 都是对界面重新编码,而不是沿用每个 OS 自己的界面风格太多。
期待将来的 Symbian 触摸屏吧,呵呵,非触摸屏的操作起来一定不方便。
三 ,先拿来源
代码编译 Qt for wince 这东东编起来也够麻烦的,网上有相关的介绍,可以参考。
四,我是用 QT for windows 工具,在 Vs2005中写完 for windows 的界面,再导出 QT 可以编译的.pro 项目文件,然后在用 ce 的 qmake 来编译,不过中途有导出的.pro 文件,qmake对其中一些项不能正确识别,比如对别的库的链接,要手工修改中间的 Makefile 文件,这个是细活。
五,编译完成,就是要用模块 dependency tools 来查看运行文件的依赖库,然后要一一找齐,不然,你放到移动平台上,报错莫名的错误,比如“可能组件缺失”“内存不足”真是扯淡的信息,呵呵,六,总算运行起来,记住,最好要放 release 版的 QT 库及目标程序,不然你的手机的内存可真的要不足了。
我就遇到这种情况几次,花了很多时间,才知道原因。
七,运行
程序后,发现窗口风格真是 QT 风格,窗口大的看不到边框,一点一点拉动才能正确操作,要是在没有触摸屏的 Symbian 上你还不晕死。
今天先完成视频监控客户端 QT 界面从 windows 平台 到 wince 平台的移植。
明天有时间再重构程序架构。
然后再开始增加新功能