数字电视中基于GStreamer框架的流媒体播放器提升画质的方法与流程

文档序号:16520147发布日期:2019-01-05 09:54阅读:723来源:国知局

本发明涉及流媒体播放技术,特别涉及数字电视上基于gstreamer的流媒体播放器利用芯片平台硬件解码加速及视频画面pq画质调节技术。



背景技术:

近年来,随着移动互联网的飞速发展,消费类电子产品呈现出了爆发式增长,而数字电视中流媒体播放却存在如下缺陷:

【缺陷一】尤其是数字电视上对流媒体播放的要求越来越高,不仅要支持各种格式的媒体播放,以及各种协议的流媒体数据,而传统的android系统原生实现的流媒体框架媒体支撑能力较弱,不能很好的支撑市场上各种播放业务的需求;

【缺陷二】另外,芯片方也往往各自为战,大都基于自身硬件平台提出一套解决方案,导致电视厂商要各个平台都要适配,花费大量人力财力;

【缺陷三】gstreamer框架虽然灵活,但是在android平台其视频输出仅支持基于opengles方式输出,解码后的数据需要作纹理拷贝,性能低下。而且在surfacetexture上输出的视频纹理,无法充分利用芯片方硬件pq画质调节,输出的画面色彩还原度不佳,画质效果低劣。



技术实现要素:

本发明的目的是提供一种数字电视中基于gstreamer框架的流媒体播放器提升画质的方法,解决目前数字电视中流媒体播放存在缺陷的问题。

本发明解决其技术问题,采用的技术方案是:数字电视中基于gstreamer框架的流媒体播放器提升画质的方法,包括如下步骤:

步骤1、交叉编译使得gstreamersdk和androidframework实现api可互操作;

步骤2、在libmediaplayerservice层基于gstreamer重新实现mediaplayerinterface.h头文件约束,实现播放器videoplayer;

步骤3、实现硬解码插件vdecplugin,使其调用基于原生androidmediacodecapi实现视频流硬解码功能,将解码出视频帧的序列索引index与mediacodec分配的framebuffer键值对作key/value匹配,并且硬解插件开放anativewindowinterface,使得硬解码插件可以与上层给定的surfaceview绑定;

步骤4、实现视频输出插件vsinkplugin,以步骤3中vdecplugin中实现的key/value键值对作为输入,在surfaceview上渲染视频帧;

步骤5、将步骤3与步骤4中实现的vdecplugin和vsinkplugin插件的rank值设为最高256,使得gstreamer框架在自动构建pipeline时,以第一优先级智能加载;

步骤6、基于java的app应用,利用标准的mediaplayersetdisplay接口,传递surfaceview对象到步骤2中实现的videoplayer播放器中,同时将java对象映射到c/c++的anativewindow接口,并将此对象传递给步骤3中的vdecplugin以及gstreamer框架;

步骤7、结合上述步骤1~6,使得gstreamer能够与android标准组件surfaceview交互。

本发明的有益效果是,通过上述数字电视中基于gstreamer框架的流媒体播放器提升画质的方法,使用surfaceview充分利用芯片平台硬件解码加速及视频画面pq画质调节功能,使得高清、极高清视频播放更流畅,画面显示更加绚丽,极大的提升了用户使用体验;另外,遵循googleandroid硬件编解码模块libstatefright通用事实标准,因此不特定于某一个芯片平台,支持包括但不限于mtk,mstar,海思等平台电视解决方案,具有较强的通用性,解决了因平台限制,每个硬件平台视频输出需要单独适配的问题,节约成本,因此极大的提高了生产力。

具体实施方式

下面详细描述本发明的技术方案。

本发明所述数字电视中基于gstreamer框架的流媒体播放器提升画质的方法,包括如下步骤:

步骤1、交叉编译使得gstreamersdk和androidframework,实现api可互操作;

步骤2、在libmediaplayerservice层基于gstreamer重新实现mediaplayerinterface.h头文件约束,实现播放器videoplayer;

步骤3、实现硬解码(hwdecoder)插件vdecplugin,使其调用基于原生androidmediacodecapi实现视频流硬解码功能,将解码出视频帧的序列索引index与mediacodec分配的framebuffer键值对作key/value匹配,并且硬解插件开放anativewindowinterface,使得硬解码插件可以与上层给定的surfaceview绑定,此步骤为关键步骤,同时需要考虑媒体框架因为各种原因导致dropframe时,索引对应的帧buffer能够归还给底层buffer的拥有者;

步骤4、实现视频输出插件vsinkplugin,以步骤3中vdecplugin中实现的key/value键值对作为输入,实现在surfaceview上渲染视频帧目的,并且考虑重复帧输出时如何保证索引所对应帧buffer的唯一性;

步骤5、将步骤3与步骤4中实现的vdecplugin和vsinkplugin插件的rank值设为最高256,使得gstreamer框架在自动构建pipeline时,能够以第一优先级智能加载;

步骤6、基于java的app应用,利用标准的mediaplayersetdisplay接口,传递surfaceview对象到步骤2中实现的videoplayer播放器中,同时将java对象映射到c/c++的anativewindow接口,并将此对象传递给步骤3中的vdecplugin以及gstreamer框架;

步骤7、结合上述步骤1~6,使得gstreamer能够与android标准组件surfaceview交互,从而路由调用到芯片厂商硬件解码以及画质pq调节功能,通过通用的标准组件,取代传统的硬件解码加速及画质pq调节的私有接口调用。



技术特征:

技术总结
本发明提出一种数字电视中基于GStreamer框架的流媒体播放器提升画质的方法,属于多媒体播放技术领域。本发明解决了目前数字电视中流媒体播放存在缺陷的问题,其技术方案要点为:交叉编译使得GStreamer SDK和Android framework实现API可互操作;实现播放器;实现硬解码插件,使其调用基于原生Android MediaCodec API实现视频流硬解码功能,将解码出视频帧的序列索引index与MediaCodec分配的frame buffer键值对作key/value匹配,并且硬解插件开放,使得硬解码插件可以与上层给定的SurfaceView绑定;使GStreamer能够与Android标准组件SurfaceView交互。

技术研发人员:周沙金
受保护的技术使用者:四川长虹电器股份有限公司
技术研发日:2018.10.10
技术公布日:2019.01.04
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1