一种可在不同视频流间快速切换播放器的实现方法与流程

文档序号:18618859发布日期:2019-09-06 22:17阅读:1063来源:国知局
一种可在不同视频流间快速切换播放器的实现方法与流程

本发明涉及视频播放相关技术领域,尤其是指一种可在不同视频流间快速切换播放器的实现方法。



背景技术:

在传统的播放器实现下,当用户正在观看一个视频时,如果要切换到下一播放器,通常需要先关闭释放前一个播放器所占用的资源(解码器、解复用器、网络资源等),然后分配一个新的播放器实例来接收新的视频流数据。在硬件的不断更新换代之下,这个过程正变得越来越小,但是由于视频技术规格以及硬件的一些特性,使得这个过程不可能完全消除,在不同终端设备上这个过程通常会耗费几百毫秒到数秒的时间,这对于观看视频的用户来说是一种非常不好的体验。

正常情况下,一个视频播放器的生命周期如下:

1.设置并解析视频流地址,与服务器交互;

2.获取视频流地址,并读取视频解码所需要的基本信息;

3.初始化视频解码器和视频输出设备;

4.持续接收并解析视频流,送入解码器解码;

5.解码器开始输出数据,到输出设备完成渲染(用户看到第一帧画面);

6.接收到关闭指令,开始释放相关资源(流接收、解复用);

7.关闭视频解码器和输出设备;

8.释放播放器其余资源,完成关闭。

这个业界通用的流程有其合理性:不同视频流一般来说会采用不同的编码方式和参数,这种情况下解码器和输出设备必须重新初始化不然无法正常工作;网络连接等流接收资源就更不用说了,肯定是无法复用的。但是正因为其通用的特性,使得其无法实现高效的切换效果。而且由于解码器厂家的差异,关闭-重新初始化的耗时有可能相当大,造成整体体验下降。



技术实现要素:

本发明是为了克服现有技术中存在上述的不足,提供了一种能够实现高效切换效果的可在不同视频流间快速切换播放器的实现方法。

为了实现上述目的,本发明采用以下技术方案:

一种可在不同视频流间快速切换播放器的实现方法,将播放器的释放、播放器的创建和对解码器实例的处理进行三者分离,具体操作步骤如下:

(1)播放器的释放:先关闭播放器,后关闭视频流接收,完成关闭;

(2)播放器的创建:先创建播放器,后开始接收视频流,获得视频编码信息,获取关键帧,实现视频流接收;

(3)对解码器实例的处理:先预读取视频流信息,后视频流信息比对,判断信息是否匹配,如果不匹配,则释放关闭解码器后,创建并初始化解码器,进入解码状态,解码并产生输出;如果匹配,则直接进入解码状态,解码并产生输出;

其中:步骤(1)、步骤(2)和步骤(3)三者互不干扰,并同时进行实现并行化处理。

本发明对播放器流程进行优化,将解码器/输出设备实例与播放器实例进行分离,也就是说,一条流播放结束的时候,我们并不会关闭/释放视频解码器和输出设备。这样做的好处是,当切换到下一个视频流,并且这个视频流的编码信息与原先播放的流其实是一样的,那么我们就无需进行比较耗时的关闭解码器-重新创建和初始化解码器操作(在特定设备上,耗时可能达到几百毫秒),直接利用现有解码实例解码即可,从而使得用户在终端上在不同视频间切换时可以得到更快的体验。通过预读取视频流信息,解码器的初始化可以不再依赖于数据接收,把串行的过程变为并行,从而达到加速目的。

作为优选,在步骤(3)中,针对视频流信息比对:为了能提前知道上一个视频流或者下一个视频流的编码信息进行快速比对,引入了频道信息缓存机制,通过这个缓存机制,所有视频流的编码格式以及解码所需参数信息都被保存在本地数据库内,使用时可在无需接收数据的情况下直接通过查询本地数据库得到任意已知视频流的相关信息。

作为优选,本地数据库的更新由epg更新或者每次播放该视频触发,同时播放器在播放过程中仍然会对数据进行检测。

作为优选,播放器在播放过程中对数据进行检测时,检测到解码参数变更,将会退出解码状态,然后释放关闭解码器,创建并初始化解码器并且更新本地数据库,进入解码状态,解码并产生输出。

作为优选,在步骤(2)中,将获取的视频编码信息跟步骤(3)中的本地数据库缓存的视频信息进行比对匹配,在匹配命中成功时,则直接复用解码器。

本发明的有益效果是:使得用户在终端上在不同视频间切换时可以得到更快的体验,解码器的初始化可以不再依赖于数据接收,把串行的过程变为并行,从而达到加速目的。

附图说明

图1是本发明的结构示意图。

具体实施方式

下面结合附图和具体实施方式对本发明做进一步的描述。

如图1所述的实施例中,一种可在不同视频流间快速切换播放器的实现方法,将播放器的释放、播放器的创建和对解码器实例的处理进行三者分离,具体操作步骤如下:

(1)播放器的释放:先关闭播放器,后关闭视频流接收,完成关闭;

(2)播放器的创建:先创建播放器,后开始接收视频流,获得视频编码信息,获取关键帧,实现视频流接收;将获取的视频编码信息跟步骤(3)中的本地数据库缓存的视频信息进行比对匹配,在匹配命中成功时,则直接复用解码器。

(3)对解码器实例的处理:先预读取视频流信息,后视频流信息比对,判断信息是否匹配,如果不匹配,则释放关闭解码器后,创建并初始化解码器,进入解码状态,解码并产生输出;如果匹配,则直接进入解码状态,解码并产生输出;

针对视频流信息比对:为了能提前知道上一个视频流或者下一个视频流的编码信息进行快速比对,引入了频道信息缓存机制,通过这个缓存机制,所有视频流的编码格式以及解码所需参数信息都被保存在本地数据库内,使用时可在无需接收数据的情况下直接通过查询本地数据库得到任意已知视频流的相关信息;通过这个机制,解码器的初始化可以不再依赖于数据接收,把串行的过程变为并行,从而达到加速目的。为了保证播放器的可靠性,本地数据库的更新由epg更新或者每次播放该视频触发,同时播放器在播放过程中仍然会对数据进行检测;这样即使数据库中并没有这条流的信息,或者说存的是错误的信息,都不会影响视频流的正常播放,只是让视频流的切换速度回落到正常情况而已。播放器在播放过程中对数据进行检测时,检测到解码参数变更,将会退出解码状态,然后释放关闭解码器,创建并初始化解码器并且更新本地数据库,进入解码状态,解码并产生输出。

其中:步骤(1)、步骤(2)和步骤(3)三者互不干扰,并同时进行实现并行化处理。

本发明对播放器流程进行优化,将解码器/输出设备实例与播放器实例进行分离,也就是说,一条流播放结束的时候,我们并不会关闭/释放视频解码器和输出设备。这样做的好处是,当切换到下一个视频流,并且这个视频流的编码信息与原先播放的流其实是一样的,那么我们就无需进行比较耗时的关闭解码器-重新创建和初始化解码器操作(在特定设备上,耗时可能达到几百毫秒),直接利用现有解码实例解码即可。

从图1可见,前一个播放器的释放,下一个播放器的创建,以及对解码器实例的处理,三者互不干扰,可同时进行,把耗时的#t3.4/3.5,#t2.3/2.4实现了并行化处理。另外,解码器这块自己实现了本地数据库缓存视频信息进行比对匹配,在匹配命中成功时,可直接复用解码器。在一些特定场景下可实现非常高的命中率,比如:iptv直播、内容高度规格化的视频网站。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1