整个裸眼3D显示是一个很大的项目,播放器只是其中的一个工具。至于标题中的裸眼3D,并不是噱头。需要3D片源+3D播放器+3D显示器,出来的效果还是很赞的。这篇文章里,先说说播放器~当做写个总结,如果能遇到大牛给予些交流指正,也是极好的~
话不多说,先上图:
这是整个播放器的框架,可以看到用了很多不同的模块。
1. 最顶层采用的是QT,因为QT的信号槽机制使用起来特别方便,上手也比较快。
2. 最底层采用的是FFMPEG,这个没啥好说的了,做播放器的都懂的~一开始啥也不会,都是看着雷霄骅老师的博客学过来的。 其实要做一个普通的播放器并不困难,用QT自带的Multimedia类或者OpenCV,很少的代码就能做一个播放器。只不过它们把解码的过程封装得太好,如果想对底层更了解一点,或者想对数据添加一些自己的操作,还是自己用FFMPEG来解码比较好~
3. 解码出来的音频数据交给SDL来播放。这个你也可以选择其他的模块,像Directsound啥的~
4. 至于视频数据嘛,因为3D片源跟普通视频片源不一样,我们需要把解码出来的每一帧图像进行处理。我们选择的是D3D,别问我为什么不是OpenGL,因为之前D3D有写好的接口,就没用OpenGL重新写了。(如果不需要做处理的话,直接把解码出来的frame打包成QImage交给QT显示就好了,两三句代码的事。但是QT的显示能力有限,在测试过程中我们发现在普通的显示器上可以正常显示。但是在大尺寸或者高分辨率的显示器上,比如4K显示器,直接用QT来显示就比较吃力了。所以尽量还是用D3D或者OpenGL来显示吧)
播放器的整体框架和主要模块大概就这样了,至于播放器内核,多线程、音视频同步、图像处理模块等等,总结好了以后再写吧~
时间: 2024-10-16 10:38:57