基于FFMPEG的跨平台播放器实现(二)

基于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的一些使用细节,还须要再深刻地研究一下。

相关文章
相关标签/搜索