vlc和gstreamer的跨平台移植

一般播放器的结构框图如图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)后,在osd层显示。但是对于机顶盒和智能电视而言, 考虑到效率,视频一般在视频层显示,而图文和字幕一般在osd层显示。因此,如果考虑到效率问题,还需要修改render插件
这里写图片描述

                         图2  vlc&gst linux移植

2. Android平台下的移植

2.1 方案一:进行decoder接口私有化定制化, decoder接口与Linux平台一致

这里写图片描述

                      图 3 vlc&gst android移植方案一

优点:
Linux android平台可以统一一套代码,效率高,可以支持高码率视频播放。
缺点:
平台相关性比较强,跨平台型较差

2.2 方案二:: decoder基于OMX进行开发(ACODEC)

优点:
decoder接口相对比较标准,开发速度快,跨平台性好。
缺点:
在surface view上进行视频图像的缩放、颜色空间的转换、显示,效率低
这里写图片描述

                     图 4 vlc&gst android移植方案二

2.3 方案三: decoder基于OMX进行开发,但是解码后的数据直接从底层输出到scale和render模块(参考Novatek平台novatek的stg的代码)

优点:
decoder接口相对比较标准,效率高,跨平台性一般。
缺点:
解码后的数据输出非标准,需要对scale及显示的接口进行客制化
这里写图片描述

                          图5 vlc&gst android移植方案三

3. 结论

由于目前x86 linux及android平台没有视频层的概念,无论是视频还是图片都是在OSD层显示,并且通过OSD层来实现视频和图片的缩放。不论是android还是linux平台的开源播放器都是在此基础上开发的,很多设备厂家都没有实现omx的硬件的render接口。 所以,目前在TV及STB中没有非常完美的播放器实现方案: 与平台的接口标准化且效率高。因此,基于以上现实,在做方案选择时候,必须有所取舍。

你可能感兴趣的:(vlc和gstreamer的跨平台移植)