昨天搞到零点才弄出来效果。本来不知道,原来Theora是一个纯开源项目。对Linux支持比较好,所以他的安装也应该遵循“Linux软件包安装规范”。那就是“永无止境”的包依赖。。于是乎,编译TheoraVideoPlugin必须先编译libtheora(http://theora.org/),ptypes(http://www.melikyan.com/ptypes/),libogg和libvorbis(http://www.vorbis.com/)。
整理一下,我基本上编译了如下动态库:
1. ptypes-2.1.1
2. libogg-1.1.4
3. libtheora-1.1.1
4. libvorbis-1.2.3
最后就是TheoraVideoPlugin,我使用的是SVN版(http://ogrevideo.svn.sourceforge.net/viewvc/ogrevideo/trunk)
关于依赖,TheoraVideoPlugin自己的描述如下:
*****************************************************************************
This PlugIn uses the following resources:
Ogre - see above // 这是最基本的了
Ogg / Vorbis / Theora www.xiph.org
C++ Portable Types Library (PTypes - http://www.melikyan.com/ptypes/ )
*****************************************************************************
一路编译,基本没什么大问题。为了保持一致,我都选择release版(其他还有debug,optimized debug和SSE/SSE2)。
然后把得到的h/lib/dll整理出来,放到编译器找得到的地方,就可以开工了~~
看了一下TheoraVideoPlugin自带的demo,很简单,不过运行时老出错。于是就想,如果lib没问题,那就自己手动写一个吧。
1. 首先创建一个TheoraVideoManager的全局实例(这个和OGRE里的Root一样,都是继承自OGRE的Singleton~)
2. 设置输入文件名TheoraVideoManager::setInputName("konqi.ogg");可以使用OGRE的资源管理器,很方便
3. 创建视频到一个已定义的纹理上。哦,对了,首先你需要有个OGRE的纹理实例,可以手动写,也可以加载Material文件里的。
createDefinedTexture("video_mat",ResourceGroupManager::DEFAULT_RESOURCE_GROUP_NAME);
4. 在FrameListener里调用TheoraVideoManager的frameStarted(),因为他也是继承自FrameListener的。
是啊,就这么简单。呵呵,当然,这只是将视频赋予了一个纹理通道上。要显示嘛,弄个Plane绑到场景节点上,把材质赋予给他,就OK了~
好了,留个截图。可以去睡觉了~~