一般播放器的结构框图如图1所示,要将移植一个具有完整功能的开源播放, 结合本人成功移植过gstreamer和vlc到Novatek 667平台的经验, 必须要考虑图1中所有模块的移植。图中的vendor表示设备厂家,soc表示芯片厂家。
图1 播放器的一般结构
下面结合linux及android平台的vlc,gstreamer的移植经验,介绍一下linux及android平台下的移植方案。
1. Linux平台下的移植
Linux平台下的移植如图2所示:
1.1 软解码的支持
如果需要支持软件解码方案,如图2所示,video render模块式需要关注的重点,对于vlc而言,可以采用sdl+directfb,也可以直接采用directfb. 本人在novatek平台,采用的就是directfb的来显示视频;对于gstreamer而言,采用directfbvideosink就可以了。Audio render利用alsa模块来进行音频的输出,一般的芯片平台都是可以支持的。
1.2 硬件解码支持
如图1所示,如果在linux平台上支持硬件解码,无论是移植vlc还是gstreamer,都需要编写decoder插件,其中vlc decoder插件的写法相对简单。vlc, gstreamer等开源播放器并没有考虑关于视频层和osd层的问题,所有的视频和字幕、图文在解码后,进行叠加(overlay)后