视频播放方法、装置、计算设备以及存储介质与流程

文档序号:11216409阅读:673来源:国知局
视频播放方法、装置、计算设备以及存储介质与流程

本发明涉及多媒体技术领域,特别是涉及一种视频播放方法、装置、计算设备以及存储介质。



背景技术:

随着互联网技术和多媒体技术的快速发展,视频在线播放业务被越来越多的用户使用。用户可以使用个人电脑、移动终端以及智能电视等多种形式的终端通过多种方式浏览在线视频资源。例如,用户可以通过腾讯视频、优酷、爱奇艺等视频播放软件点播视频,通过今日头条、新浪微博等新闻资讯类app浏览视频资讯,通过uc浏览器、qq浏览器、百度浏览器等浏览器app观看视频,还可以通过斗鱼tv、虎牙tv等直播平台观看视频直播。

由于互联网上的视频资源较多,为了提高用户的浏览体验,现有的视频播放软件或视频播放网站大多是以视频列表的形式向用户展示可供观看的视频资源。图1示出了视频列表的一个例子。如图1所示,视频列表中各条视频相继排列,用户可以上下滑动操作来滚动视频列表,并通过点击视频封面中的播放键(在其他示例中,点击视频标题或视频封面的任意位置)来观看相应的视频。这种通过视频列表向用户展示视频资源的方式可以使用户直观、清楚地预览多个视频资源。

但由于系统(例如,android系统)天然属性的限制,视频列表中的每个视频项都需要配备一个播放容器,使得在视频列表中各视频项被点播时,很容易造成ui线程被挂起,导致anr(应用程序无响应),大大影响用户浏览体验。由此,需要一种在确保视频顺畅显示的情况下尽量避免anr的技术方案。



技术实现要素:

为了解决如上的至少一个问题,本发明提出了一种新的播放机制的视频播放方案。具体地,本发明通过一个自建的播放容器来代替播放列表中的多个播放容器,并且优选将自建容器的播放内容覆盖原始播放内容并跟随滚动事件滚动,由此在提升页面响应效率的同时保持页面的自然顺畅的显示。这一滚动跟随方案还可以与固定小窗方案相结合,以提供更为完善的视频列表播放体验。

根据本发明的一个方面,提供了一种视频播放方法,包括:获取页面上待播放视频的播放内容和播放位置信息;在自建窗口中播放获取的播放内容,其中根据播放位置信息使自建窗口覆盖播放位置的至少一部分;监听所述页面上的滚动事件;以及使得所述自建窗口跟随所述滚动事件进行滚动。

由此,通过创建用于播放视频的自建窗口可以实现单一播放容器对页面中各视频的无anr播放,并且通过自建窗口的跟随滚动提升窗口显示的自然度。上述页面优选为至少包括两个或以上视频项的视频列表页面,以便能够从本发明的技术方案中受益。

自建窗口优选完全覆盖待播放视频的播放位置,由此使得播放效果更加自然。

优选地,上述滚动跟随可以仅仅在播放位置完全或部分处于屏幕内显示时进行。而当上述播放位置完全离开屏幕时,可以使得覆盖显示的自建窗口跳转至屏幕内的固定位置并对播放内容进行完整显示。由此,在视频播放的完整度和自然顺畅度之间取得良好的平衡。

优选地,监听页面上的滚动事件可以包括:预先获取页面的可滚动类型信息;根据获取的可滚动类型信息以及监听到的滚动事件计算滚动距离;以及使得自建窗口跟随滚动滚动距离。由此,在视频播放过程中,用户对页面中执行滚动操作时,不会影响视频的正常观看。

优选地,预先获取页面的可滚动类型信息可以包括:循环遍历页面上待播放视频区域的上级viewgroup,并获取可滚动的viewgroup,可滚动的viewgroup包括listview、recyclerview和viewpager。

优选地,该视频播放方法还可以包括:预先建立自建窗口,其中自建窗口被布置在最上层布局。自建窗口可被隐藏,并在需要播放视频时取消上述隐藏。由此确保在需要时对自建窗口的恰当显示。

优选地,预先建立自建窗口还可以包括:为自建窗口提供默认的视频控制参数;和/或为自建窗口提供可供编辑的视频控制参数选项。由此,可以进一步完善自建窗口的视频播放功能。

优选地,预先建立自建窗口还可以包括:在子线程中预先建立自建窗口。由此,通过在子线程中执行自建窗户口的建立事件,可以保证主线程的响应能力,避免由主线程的阻塞而引起anr的发生。

优选地,子线程监听自建窗口播放过程中的完整状态,并将每个状态从子线程发布到主线程中。由此,通过将子线程监听到的视频播放状态post到主线程,可以进一步避免anr的发生。上述自建窗口可以在不同的时刻建立,以满足实际应用中的具体要求。

根据本发明的另一个方面,还提供了一种视频播放装置,包括:播放信息获取单元,用于获取页面上待播放视频的播放内容和播放位置信息;内容播放单元,用于在自建窗口中播放获取的播放内容,其中根据播放位置信息使自建窗口覆盖播放位置的至少一部分;页面事件监听单元,用于监听页面上的滚动事件;以及窗口跟随单元,用于使使得所述自建窗口跟随所述滚动事件进行滚动。上述页面优选是可滚动的包括至少两个视频的视频播放列表页面。

优选地,所述内容播放单元可以使得所述自建窗口完全覆盖所述播放位置并在所述自建窗口中播放获取的播放内容。

优选地,所述窗口跟随单元可以在所述播放位置至少有一部分在屏幕内显示时,使得所述自建窗口跟随所述滚动事件进行滚动。

优选地,上述装置还可以包括:窗口固定单元,用于在所述播放位置完全或部分不在屏幕内显示时,使得所述自建窗口在所述屏幕内固定并完整显示。

优选地,页面事件监听单元可以用于:预先获取页面的可滚动类型信息;根据获取的可滚动类型信息以及监听到的滚动事件计算滚动距离;以及使得自建窗口跟随滚动滚动距离。

优选地,预先获取页面的可滚动类型信息可以包括:循环遍历页面上待播放视频区域的上级viewgroup,并获取可滚动的viewgroup,可滚动的viewgroup包括listview、recyclerview和viewpager。

优选地,该视频播放装置还可以包括:窗口预建单元,用于预先建立自建窗口,其中自建窗口被布置在最上层布局中。优选地,所述窗口预建单元可以隐藏自己预先建立的所述自建窗口,并且所述内容播放单元取消对预先建立的所述自建窗口的隐藏并在所述自建窗口中播放获取的播放内容。

优选地,窗口预建单元为自建窗口提供默认的视频控制参数;和/或为自建窗口提供可供编辑的的视频控制参数选项。

优选地,窗口预建单元在子线程中建立自建窗口。所述自建窗口可以在如下时刻建立:在播放视频的应用被启动时;在进入包括可播放视频的页面时;或者在所述包括可播放视频的页面内视频第一次被点击播放时。

优选地,子线程监听自建窗口播放过程中的完整状态,并将每个状态从子线程发布到主线程中。

根据本发明的又一个方面,还提供了一种计算设备,包括:处理器;以及存储器,其上存储有可执行代码,当可执行代码被处理器执行时,使处理器执行上文述及的方法。

根据本发明的再一个方面,还提供了一种非暂时性机器可读存储介质,其上存储有可执行代码,当可执行代码被电子设备的处理器执行时,使处理器执行上文述及的方法。

本发明的视频播放方法、装置、计算设备以及存储介质,通过创建用于播放视频的自建窗口可以实现单一播放容器对页面中各视频的无anr播放,并且通过自建窗口的跟随滚动提升窗口显示的自然度。上述跟随播放方案可以与小窗播放方案相结合,以便给出在视频播放的完整度和自然顺畅度之间具有良好的平衡的整体播放方案。

附图说明

通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。

图1是示出了现有技术中视频播放列表的例子。

图2是用于实现本发明实施例的环境的示意图。

图3是示出了根据本发明一实施例的视频播放方法的示意性流程图。

图4和5分别示出了自建窗口保持跟随和跳转为小窗的例子。

图6是示出了根据本发明一实施例的视频播放装置的结构的示意性方框图。

图7是示出了根据本发明一实施例的计算设备的结构的示意性方框图。

具体实施方式

下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。

如图1所示,为了方便用户的视频观看与浏览,现有的视频播放列表中通常从上到下的排列着多个视频,例如,图中所示的该视频列表中的第n个和其后的第n+1个视频。用户可以对视频列表进行滚动,例如,通过对触屏的上下滑动,并且例如通过点击选择感兴趣的视频进行观看。上述布置虽然有助于用户的方便浏览和观看,但从操作系统(例如,android系统)的功能实现来看,由于需要为视频列表中的每个视频项提供播放容器(即,包含了播放器的视图控件),很容易造成ui线程(例如,本文中的主线程)的阻塞,从而导致极为影响用户体验的anr。

针对于此,发明人深入研究后提出,可以通过建立一个自建窗口而将页面中原本需要的多个播放容器缩减为一个,并优选在子线程中实现其整个生命周期,从而大大减轻操作系统应对视频列表的负担。另外,上述自建窗口可以覆盖原有的播放区域并跟随用户的滚动操作滚动,使得用户感受不出其实并非在原始视频窗口而是在上层的自建窗口中观看视频。上述跟随滚动方案还可以与小窗播放方案相结合,例如,在原始视频窗口将要完全立刻屏幕显示时跳转至小窗播放,由此为用户提供一个更为完整全面的视频列表播放体验。

至此以视频播放列表为例,就本发明的视频播放方案的基本原理做了简要说明。需要说明的是,本发明的视频播放方案可以应用于多种类型的提供视频播放资源的页面。其中,本发明述及的页面可以是网页,也可以是嵌入在应用中的页面,例如,可以是腾讯视频等视频网站提供的网页,也可以是新浪微博、百度贴吧等资讯类网页,还可以是适于安装在移动终端上的今日头条等app中的页面。并且,页面可以按照图1所示,以视频列表形式向用户展示可播放的视频资源,也可以以其它形式向用户展示可播放的视频资源。

下面将结合图2至图5详细说明本发明的视频播放方案。本发明实施例所提供的视频播放方案可应用于如图2所示的环境中。图2是用于实现本发明实施例的环境的示意图。在一个实施例中,环境中的移动终端10可以经由网络40实现与服务器20的信息收发。服务器20可以通过访问数据库30来获取移动终端10所需的内容。移动终端之间(例如,10_1与10_2或10_n之间)也可以经由网络40彼此通信。网络40可以是广义上的用于信息传递的网络,可以包括一个或多个通信网络,诸如无线通信网络、因特网、私域网、局域网、城域网、广域网或是蜂窝数据网络等。在一个实施例中,网络40也可以包括卫星网络,由此将移动终端10的gps信号传送给服务器20。应当注意,如果向图2中添加或从图2中去除附加模块,不会改变本发明的示例实施例的底层概念。另外,虽然为了方便说明而在图中示出了从数据库30到服务器20的双向箭头,但本领域技术人员可以理解的是,上述数据的收发也是可以通过网络40实现的。

移动终端10是可用来进行网络访问的任何合适的便携式电子设备,包括但不限于智能电话、平板电脑或是其他便携式客户端。服务器20则是能够通过网络访问的提供交互服务所需信息的任何服务器。图中虽然示出了多个移动终端10-1…n以及单个服务器20和数据库30,并且在随后的描述中会选择其中的一个或部分移动终端加以描述(例如,移动终端10-1),但是本领域技术人员应该理解的是,上述1…n个移动终端旨在表示真实网络中存在的多个移动终端,示出的单个服务器20和数据库30旨在表示本发明的技术方案涉及服务器及数据库的操作。对特定编号的移动端以及单个服务器和数据库加以详述至少为了说明方便,而非暗示对移动端和服务器的类型或是位置等具有限制。

图3是根据本发明一个实施例的视频播放方法的示意性流程图。该方法可由图2所示的移动终端10执行。

参见图3,方法始于步骤s310,获取页面上待播放视频的播放内容和播放位置信息。

此处述及的页面是指显示在移动终端上的带有视频播放资源的可滚动页面,其可以是移动终端通过浏览器访问的网页,也可以是安装在移动终端上的app中的页面。页面可以提供一个或多个视频资源,优选为包括至少两个视频的可滚动视频播放列表页面,例如,图1所示页面。待播放视频可以是页面中用户期望播放的视频,可以根据用户对页面执行的拖动、点击等操作确定页面上的待播放视频,例如,图1中用户想要点击的视频n。对于待播放视频,可以将待播放视频在页面中的位置信息视为待播放视频的播放位置信息,并且可以根据待播放视频在页面中的属性设置信息确定其播放位置信息。在这里,播放位置是相对于页面而非屏幕显示而言的,页面的滚动会影响屏显的位置但不会改变播放位置。待播放视频的播放内容可以根据页面中指示的待播放视频的地址通过网络在线获取。

在步骤s320,在自建窗口中播放获取的播放内容。

在这里,可以将自建窗口看做是有别于上述页面而自行建立的窗口。自建窗口可以位于页面中,也可以位于页面之上,并且用于提供对用户可见的视频播放区域。自建窗口可以获取页面中各视频的播放权限(例如,通过其所属的子线程,如下将详述),使得页面中的视频均可以在该自建窗口中进行播放。优选可以将自建窗口布置在最上层布局中,以使得自建窗口不会被遮挡。作为本发明的一个可选实施例,可以预先建立自建窗口,并且自建窗口的初始状态可以设置为隐藏状态,然后响应于步骤s320的执行,可以取消对预先建立的自建窗口的隐藏。由此,在用户仅浏览页面而未点播视频的情况下,自建窗口被隐藏,不会影响用户正常的浏览体验,而通过将自建窗口布置在最上层布局中则可以保证视频的播放始终对用户可见。

在建立自建窗口的过程中,可以为自建窗口提供默认的视频控制参数,并且/或者,还可以为自建窗口提供可供编辑的视频控制参数选项。此处述及的视频控制参数可以是诸如音量控制、进度控制、声音控制等与视频播放相关的参数。

自建窗口的初始位置可以是一个任意值,在获取了待播放视频的播放位置信息后,可以根据待播放视频的播放位置信息,重新设定自建窗口的位置。例如可以将自建窗口移动到待播放视频的播放位置,以覆盖待播放视频,也可以将自建窗口移动到部分覆盖播放位置的位置。优选地,使得所述自建窗口完全覆盖所述播放位置,使得用户完全感觉不到是在不同于原始视频窗口的上层窗口中观看视频。

在步骤s330,监听页面上的滚动事件,并且在步骤s340,使得自建窗口所述自建窗口跟随所述滚动事件进行滚动。

这里述及的页面上的滚动事件指的是用户例如通过上下滑动触摸屏而引起的滚动事件。在这里,滚动事件主要是指基于用户的输入而引起的页面中的页面内容的滚动。通过监听滚动事件可以(实时)获取页面中发生滚动的位移。根据本发明的应用场景不同,监听页面上的滚动事件的具体实现也不尽相同。例如,在本发明中的页面为基于浏览器访问的网页时,可以根据网页中滚动条的滚动参数来确定滚动距离。再例如,在本发明中的页面为安卓系统下嵌入在应用中的页面(例如图1所示的页面)时,由于页面中可能存在多种类型的可滚动的view(视图),例如listview(列表视图)、recyclerview(复用视图)、viewpager(滑动视图),此时页面上的滚动事件大多是针对view的滚动,因此可以监听view的滚动,根据view的滚动参数确定具体的滚动距离。具体实现上,可以预先获取页面的可滚动类型信息,这里可以通过循环遍历页面上待播放视频区域的上级viewgroup(视图组),以获取可滚动的viewgroup,可滚动的viewgroup可以包括listview、recyclerview、viewpager等多种类型。在获取了可滚动类型信息后,可以根据所获取的可滚动类型信息以及监听到的滚动事件计算滚动距离,并使自建窗口(实时)跟随滚动所计算的滚动距离。

为了使得在页面上发生滚动事件时,不影响视频的正常观看。可以在执行步骤s330的过程中,执行步骤s340,使得自建窗口跟随滚动事件滚动并保存完整显示。换句话说,监听步骤和跟随步骤通常可以交替进行,以确保自建窗口对滚动操作的实时跟随。

在一个实施例中,可以为上述跟随操作限定具体范围,并且可以与小窗播放相结合以实现一个更为自然且完整的播放方案。例如,自建窗口可以仅在原始播放位置完全在屏幕中显示的情况下保持跟随,而其显示不完整时跳转为固定位置的小窗播放。例如,自建窗口也可以在原始播放位置只要有部分还在屏幕中显示的情况下保持跟随,而其显示不完整时跳转为固定位置的小窗播放。

图4和5分别示出了自建窗口保持跟随和跳转为小窗的例子。用户例如可以点击图1所示的视频n封面上的播放按钮,使得视频n开始播放。本发明的自建窗口可以获取视频n的具体播放内容并完整覆盖该视频的默认播放位置,使得在用户看来该视频就像是由其默认视频播放容器进行播放的一样。随后用户可以对页面进行列表滚动操作,使得播放位置只有部分在屏幕内显示,这时仍然保持自建页面的跟随显示,如图4所示。而当视频n的播放位置完全不在屏幕内显示时,自建窗口的跟随播放可以转为小窗播放,如图5所示。这里的“播放容器”可以理解为包含了播放器的视图控件。而小窗播放则可以是固定位置播放,并且其大小可以相应调整,例如图5所示的右下角缩小显示。

虽然在此示出了跟随播放与小窗播放操作相结合的实施例,但本领域技术人员可以理解的是,本发明的跟随播放可以不与小窗播放相结合。例如,可以在放位置完全不在屏幕内显示时单纯保持或是停止自建窗口的显示等。

本发明的视频播放方案可以优选地应用于安卓系统中,例如可以应用于安卓系统下的应用开发,如今日头条、腾讯视频等提供视频播放资源的app开发。在将本发明的视频播放方法应用于这类场景中时,为了避免会严重影响用户体验的anr对话框的出现,可以在由子线程建立自建窗口,并将自建窗口的完整生命周期全部放在该子线程执行。另外,还可以由子线程执行步骤s330的监听操作,即可以由子线程监听自建窗口播放过程中的完整状态,并将监听到的每个状态发布到主线程。

根据具体的应用场景,可以在恰当的时刻建立本发明的自建窗口,例如在播放视频的应用被启动时;在进入包括可播放视频的页面时;在所述包括可播放视频的页面内视频第一次被点击播放时;或者其他合适的时刻。在自建窗口由子线程创建时,该子线程本身也可以在合适的时间点或是情况下创建。

至此,结合图3-5就本发明的视频播放方法做了详细说明,另外,本发明的视频播放方法还可以实现为一种视频播放装置。图6是示出了根据本发明一实施例的视频播放装置的结构的示意性方框图。其中,视频播放装置600的功能模块可以由实现本发明原理的硬件、软件或硬件和软件的结合来实现。本领域技术人员可以理解的是,图6所描述的功能模块可以组合起来或者划分成子模块,从而实现上述发明的原理。因此,本文的描述可以支持对本文描述的功能模块的任何可能的组合、或者划分、或者更进一步的限定。

下面仅就视频播放装置600可以具有的功能模块以及各功能模块可以执行的操作做简要说明,对于其中涉及的细节部分可以参见上文描述,这里不再赘述。

参见图6,视频播放装置600包括播放信息获取单元610、内容播放单元620、页面事件监听单元630以及窗口跟随单元640。

播放信息获取单元610用于获取页面上待播放视频的播放内容和播放位置信息,内容播放单元620用于在自建窗口中播放获取的播放内容,其中根据播放位置信息使自建窗口覆盖所述播放位置的至少一部分。页面事件监听单元630用于监听页面上的跟随事件。窗口跟随单元640用于所述自建窗口跟随所述滚动事件滚动。

在一个实施例中,内容播放单元620可以使得所述自建窗口完全覆盖所述播放位置,由此使得用户不会感受到原始播放容器上的自建窗口,使得上述播放更为自然顺畅。

在一个实施例中,可以为上述跟随操作限定具体范围。例如,窗口跟随单元640可以在播放位置至少有一部分在屏幕内显示时,使得所述自建窗口跟随所述滚动事件进行滚动。跟随操作还可以与小窗播放相结合以实现一个更为自然且完整的播放方案。例如,视频播放装置600还可以包括窗口固定单元,用于在所述播放位置完全或部分不在屏幕内显示时,使得所述自建窗口在所述屏幕内固定并完整显示。

作为本发明的一个可选实施例,页面事件监听单元430可以预先获取页面的可滚动类型信息,根据获取的可滚动类型信息以及监听到的滚动事件计算滚动距离,使得自建窗口跟随滚动滚动距离。其中,可滚动类型信息可以包括循环遍历页面上待播放视频区域的上级viewgroup,并获取可滚动的viewgroup,可滚动的viewgroup包括listview、recyclerview和viewpager。

如图6所示,作为本发明的一个可选实施例,视频播放装置600还可以包括图中虚线框所示的窗口预建单元650。

窗口预建单元650可以用于预先建立自建窗口,其中自建窗口被布置在最上层布局。窗口预建单元650可以隐藏自建窗口,内容播放单元620则可在需要播放视频时取消对预先建立的自建窗口的隐藏。

可选地,窗口预建单元650还可以为自建窗口提供默认的视频控制参数,并且还可以为自建窗口提供可供编辑的视频控制参数选项。

窗口预建单元650可以在预先建立的子线程中预先建立自建窗口,子线程可以监听自建窗口播放过程中的完整状态,并将每个状态从子线程发布到主线程中。

图7是示出了根据本发明一实施例的计算设备的结构的示意性方框图。

参见图7,计算设备700可以是台式机、便携式计算机、平板电脑、智能手机、个人数据助理(pda),或者其他类型的计算机装置,但是不限于任何特定形式。计算设备700可以包括但不限于处理器710和存储器720。

处理器710可以是一个多核的处理器,也可以包含多个子处理器。在一些实施例中,处理器710可以包含一个通用的主处理器以及一个或多个特殊的协处理器,例如图形处理器(gpu)、数字信号处理器(dsp)等等。

存储器720可以包括存储文件形式或其他形式的内容的任何类型的存储设备中的一个或多个,包括磁硬盘驱动器、固态硬驱、半导体存储设备、闪存,或者能够存储程序指令或数字信息的任何其他计算机可读可写存储介质。存储器720上可以存储有可执行代码,在本发明中,当存储器720上的可执行代码被处理器710执行时,可以使处理器710执行图3所示的视频播放方法。

具体应用

在当前的互联网领域内,无论是视频直播还是视频点播都是热点和商机所在。各大互联网公司争相在视频直播、视频点播上投入大量资源,希望能占据一席之地。但是由于安卓系统的开源本质导致安卓手机的碎片化,并且用户对相关产品的需求千变万化,因此尤其需要一个通用的播放框架来快速集成短视频功能的开发,以快速跟上需求的迭代。由此,为了便于开发者快速将视频播放功能集成到产品(app)中,可以基于本发明的视频播放方案预先设计一个通用视频播放框架(framework),即可以将本发明的视频播放方法封装到该框架中,该框架为系统的可重用设计,其可被应用开发者使用。如此,基于预先设计的视频播放框架,开发者仅需按照产品需求设计视频的ui,即可实现自定义的视频播放功能,例如列表视频播放,从而可以快速将自定义的视频播放功能集成到产品中,设计过程中不需要考虑兼容性问题,也不需要考虑页面滚动时视频的生命周期,在短时间内就可以实现良好的视频播放体验效果。

另外,为了进一步便于开发者设计,框架中还可以为提供默认的视频控制参数,例如进度控制、音量控制、声音控制等等。并且,还可以提供可供开发者编辑的视频控制参数选项。优选地,为了提高框架的可扩展性,还可以提供面向开发者的接口,该接口可以允许开发者加入针对自建窗口的自定义控制逻辑,例如开发者可以将视频控制界面的根布局添加到自建窗口中,开发者可以根据ui来自定义播放控制的界面,比如针对横竖屏增加不同的控制布局等。再例如,还可以让开发者选择是否将页面上的滚动事件透传下去,是否由滚动的列表处理页面上的滚动事件等等。

由此,基于本发明的视频播放方案实现的视频播放框架能良好的支持android平台的主流控件,让开发者能在短时间内集成到特定的产品功能中,且扩展性强,维护成本小,符合互联网多变的基因。开发者只需要提供一个视频播放区域的viewgroup(视图组)/view(视图),该框架会根据此viewgroup/view找到其所有父布局中所有能滚动的view,例如listview(列表视图)、recyclerview(复用视图)、viewpager(滑动视图)。然后监听view的滚动事件,动态移动视频的播放区域(即自建窗口的位置),达到自建窗口跟随滚动效果。

本发明的视频播放方法应用于安卓系统中的应用开发时的视频播放流程如下。

第一步:增加视频播放viewgroup(可以理解为上文述及的自建窗口的一个实现)

将容纳视频播放的viewgroup(例如,可将其称为videoplaylayout)添加到activity的最上层布局,然后将其隐藏。

第二步:传递最终播放区域的viewgroup

获取视频播放展示的区域的viewgroup(例如,可将其称为coverlayout),找到该coverlayout在屏幕中位置,将videoplaylayout设置为显示状态,移动videoplaylayout的位置到coverlayout之上。coverlayout即为上文述及的待播放视频。

第三步:得到可滚动的viewgroup,动态调整videoplaylayout位置

这里可以通过循环遍历coverlayout的父viewgroup,得到可滚动的viewgroup(例如listview),然后可以采用策略模式根据不同的可滚动视图得到对应的滚动距离,动态设置videoplaylayout在屏幕中的位置,让其跟随滚动。其中,此处述及的策略模式中可以封装用于拦截view的touch事件、根据所拦截的touch事件计算view的滚动距离的实现方法。

在将videoplaylayout动态设置在屏幕中的位置后,可以根据videoplaylayout在屏幕中的位置来回调相应的接口,设置对应播放状态。其中,此处述及的接口中可以封装有视频播放状态与位置之间的播放逻辑,位置和播放状态之间的对应关系可以是预先设定的,例如可以是在videoplaylayout滚动的距离超过预定距离后,停止其播放。

第四步:添加视频控制界面的根布局到videoplaylayout

为了提高框架的可扩展性,可以将视频控制界面的根布局添加到videoplaylayout中,开发者可以根据ui来自定义播放控制的界面。另外,框架还可以设计一套默认实现播放控制的ui,比如进度控制、音量控制、声音控制等。

第五步:播放状态回调的全局控制

可以由子线程监听视频播放过程中的完整状态,将每个状态从子线程post到主线程中,并分发给各个设置的监听逻辑中,如此可以方便开发者处理一些播放状态过程中的逻辑。具体实现上,可以将与自建窗口相关的生命周期方法放在子线程中执行,统一用单向队列管理,然后依次在android平台上发布到主线程执行。具体地,可以在预先建立的子线程中预先建立自建窗口,并且可以使用子线程监听自建窗口播放过程中的完整状态,然后可以将监听到的状态post到主线程中。如此可以保证开发者能自己控制整个视频的播放生命周期,防止anr,并为列表播放视频提供可能。

上文中已经参考附图详细描述了根据本发明的视频播放方法、装置以及计算设备。本发明通过一个自建的播放容器来代替播放列表中的多个播放容器,并且优选将自建容器的播放内容覆盖原始播放内容并跟随滚动事件滚动,由此在提升页面响应效率的同时保持页面的自然顺畅的显示。这一滚动跟随方案还可以与固定小窗方案相结合,以提供更为完善的视频列表播放体验。

此外,根据本发明的方法还可以实现为一种计算机程序或计算机程序产品,该计算机程序或计算机程序产品包括用于执行本发明的上述方法中限定的上述各步骤的计算机程序代码指令。

或者,本发明还可以实施为一种非暂时性机器可读存储介质(或计算机可读存储介质、或机器可读存储介质),其上存储有可执行代码(或计算机程序、或计算机指令代码),当所述可执行代码(或计算机程序、或计算机指令代码)被电子设备(或计算设备、服务器等)的处理器执行时,使所述处理器执行根据本发明的上述方法的各个步骤。上述代码尤其可以实现为一种可重用的播放“框架”,以方便对本方案的功能进行相应的移至和具体设定。

本领域技术人员还将明白的是,结合这里的公开所描述的各种示例性逻辑块、模块、电路和算法步骤可以被实现为电子硬件、计算机软件或两者的组合。

附图中的流程图和框图显示了根据本发明的多个实施例的系统和方法的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标记的功能也可以以不同于附图中所标记的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。

以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。

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