基于FFMPEG的跨平台播放器实现(二)linux
上一节讲到了在Android平台下采用FFmpeg+surface组合打造播放器的方法,这一节讲一下Windows平台FFmpeg + D3D、Linux平台FFmpeg+SDL的组合方法。git
1、FFmpeg + D3Dgithub
D3D(Direct3D ):是微软为提升3D游戏在Windows中的显示性能而开发的显示程序接口,它提供了丰富的3D功能库,是游戏普遍采用的标准,开发者都会用到dx9sdk、dx10sdk等不一样版本的SDK,能够到微软官网下载。其性能没必要多说,把用来开发游戏的SDK用到播放器上应该没什么问题吧!windows
不过D3D的用法稍微复杂,并且能够参考的文档不太多,只能啃SDK文档了 ,基本流程如图1:函数
图1性能
2、FFmpeg+SDL开放源代码
SDL(Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发库,使用C语言写成。SDL提供了数种控制图像、声音、输出入的函数,让开发者只要用相同或是类似的代码就能够开发出跨多个平台(Linux、Windows、Mac OS X等)的应用软件。目前SDL多用于开发游戏、模拟器、媒体播放器等多媒体应用领域。线程
相比于D3D,SDL的用法则简单许多,不须要本身建立CopySurface线程,按顺序调用接口就行,如图2:3d
图2blog
3、接口封装
我采用编译宏Ifdef 控制windows、linux的编译,控制D3D、SDL的使用,达到封装细节、跨平台的效果,具体方法如图3:
图3
4、运行效果
图4
图5
5、说明
代码上传到了https://github.com/dongguadan中的playsdk目录 。须要说明的是,时间戳的概念没有体现的工程中,因此帧于帧之间的时间没有控制好,致使画面不流畅,后面会改进。另外关于SDL、D3D的一些使用细节,还须要再深刻地研究一下。