CN114222182B - 一种视频播放方法及装置 - Google Patents

一种视频播放方法及装置 Download PDF

Info

Publication number
CN114222182B
CN114222182B CN202111535810.3A CN202111535810A CN114222182B CN 114222182 B CN114222182 B CN 114222182B CN 202111535810 A CN202111535810 A CN 202111535810A CN 114222182 B CN114222182 B CN 114222182B
Authority
CN
China
Prior art keywords
video
queue
created surface
currently created
gop
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN202111535810.3A
Other languages
English (en)
Other versions
CN114222182A (zh
Inventor
陈小波
田细亚
李云龙
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hunan Happly Sunshine Interactive Entertainment Media Co Ltd
Original Assignee
Hunan Happly Sunshine Interactive Entertainment Media Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hunan Happly Sunshine Interactive Entertainment Media Co Ltd filed Critical Hunan Happly Sunshine Interactive Entertainment Media Co Ltd
Priority to CN202111535810.3A priority Critical patent/CN114222182B/zh
Publication of CN114222182A publication Critical patent/CN114222182A/zh
Application granted granted Critical
Publication of CN114222182B publication Critical patent/CN114222182B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/44012Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving rendering scenes according to scene graphs, e.g. MPEG-4 scene graphs
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/434Disassembling of a multiplex stream, e.g. demultiplexing audio and video streams, extraction of additional data from a video stream; Remultiplexing of multiplex streams; Extraction or processing of SI; Disassembling of packetised elementary stream
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/40Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
    • H04N21/43Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
    • H04N21/44Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
    • H04N21/44004Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving video buffer management, e.g. video decoder buffer or video display buffer
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/81Monomedia components thereof
    • H04N21/8166Monomedia components thereof involving executable data, e.g. software
    • H04N21/8193Monomedia components thereof involving executable data, e.g. software dedicated tools, e.g. video decoder software or IPMP tool

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • General Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本发明提供一种视频播放方法及装置。通过在启动视频播放时,通过对当前创建的surface和当前创建的surface对应的key进行判断,在当前创建的surface和当前创建的surface对应的key发生变化时,确定当前为在视频播放过程中切换出去再切换回来的播放状态,然后再根据视频包的来源,确定如果视频包来自于缓存GOP队列则为旧的,已经播放过的视频,则丢弃,若非来自于GOP队列则为新的视频,渲染所述视频帧输出并与当前创建的surface绑定。从而解决现有视频播放过程中切换出去再切换回来时,导致黑屏或者前后画面不连续等播放体验差的问题,实现改善以及提升用户播放体验的目的。

Description

一种视频播放方法及装置
技术领域
本发明涉及移动终端流媒体播放技术领域,尤其涉及一种视频播放方法及装置。
背景技术
基于当前的视频播放技术,在视频启播的时候需要设置给播放器渲染模块一个view组件,view组件是创建UI时最基础的组件。当视频解码输出时需要在这个view组件上进行画面渲染。
目前,在使用android平台的移动终端中,通常视频解码播放时使用硬解码mediacodec。在视频使用mediacodec硬解码播放的过程中,所使用到的view组件主要包括surfaceview组件和textureview组件。在mediacodec创建后,在进行configure配置时需要绑定用于画面渲染的surface,其中,surface来源于surfaceview生命周期。但是,在视频播放过程中一旦通过菜单键进行前后台切换或者切换到别的应用后切换回来播放,来回切换的操作会导致surface发生销毁再创建的过程。
而在现有技术中,android平台在surface发生销毁时会停止播放器播放视频,而在surface再次被创建时则会通过设置再次使播放器重新启播,但是在这个停止播放再重新启播的过程中,会导致出现黑屏或者前后画面不连续的问题,导致播放体验差。
发明内容
有鉴于此,本发明实施例提供一种视频播放方法及装置,以解决现有视频播放过程中切换出去再切换回来时,导致黑屏或者前后画面不连续等播放体验差的问题。
为实现上述目的,本发明实施例提供如下技术方案:
本发明实施例第一方面公开了一种视频播放方法,所述方法包括:
当启动视频播放时,获取当前创建的surface和所述当前创建的surface对应的key;
若所述当前创建的surface经由编解码器进行配置,获取视频包;
判断所述当前创建的surface是否为非空,以及所述当前创建的surface是否与上一次创建的surface为同一个对象,以及所述当前创建的surface对应的key是否与所述上一次创建的surface对应的key相同;
若任一判断为否,将所述当前创建的surface设置为true;
对所述视频包进行解码,得到解码后的视频帧;
判断所述视频帧的来源是否为缓存GOP队列;
若是,则丢弃所述视频帧;
若否,则渲染所述视频帧,并输出至设置为true的当前创建的surface。
可选的,还包括:
若所述当前创建的surface未经由编解码器进行配置,获取解复用视频队列中的视频包;
判断来自解复用视频队列中的视频包是否为关键帧;
若所述来自解复用视频队列中的视频包是关键帧,清空缓存GOP队列,并将所述来自解复用视频队列中的视频包添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1;
若所述来自解复用视频队列中的视频包不是关键帧,则将所述来自解复用视频队列中的视频包直接添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1。
可选的,所述获取视频包,包括:
判断所述缓存GOP队列的参数buffer_index与参数buffer_deep是否相等;
若相等,由解复用视频队列中获取视频包;
若不相等,获取所述缓存GOP队列中的第一个视频包,所述缓存GOP队列的参数buffer_index递增1。
可选的,还包括:
若所述当前创建的surface为非空,所述当前创建的surface与上一次创建的surface为同一个对象,所述当前创建的surface对应的key与所述上一次创建的surface对应的key相同,对所述视频包进行解码,得到解码后的视频帧。
可选的,还包括:
在渲染所述视频帧并输出的过程中,当接收到暂停播放触发指令时,将所述当前创建的surface和所述当前创建的surface对应的key设置为空。
本发明实施例第二方面一种视频播放装置,其特征在于,所述视频播放装置包括:数据模块、解复用模块、解码模块和渲染模块;
所述数据模块,用于当启动视频播放时,获取当前创建的surface和所述当前创建的surface对应的key;若所述当前创建的surface经由所述解码模块进行配置,获取视频包;判断所述当前创建的surface是否为非空,以及所述当前创建的surface是否与上一次创建的surface为同一个对象,以及所述当前创建的surface对应的key是否与所述上一次创建的surface对应的key相同;若任一判断为否,则通过所述解复用模块和所述解码模块将所述当前创建的surface设置为true;
所述解码模块,用于对所述视频包进行解码,得到解码后的视频帧,判断所述视频帧的来源是否为缓存GOP队列,若是,则丢弃所述视频帧;若否,则执行所述渲染模块;
所述渲染模块,用于渲染所述视频帧,并输出至设置为true的当前创建的surface。
可选的,所述数据模块,还用于,若所述当前创建的surface未经由所述解码模块进行配置,获取所述解复用模块输出的视频队列中的视频包;判断所述解复用模块输出的视频队列中的视频包是否为关键帧;若所述解复用模块输出的视频队列中的视频包是关键帧,清空缓存GOP队列,并将所述解复用模块输出的视频队列中的视频包添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1;若所述视频包不是关键帧,则将所述解复用模块输出的视频队列中的视频包直接添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1。
可选的,所述获取视频包的数据模块,具体用于:
判断所述缓存GOP队列的参数buffer_index与参数buffer_deep是否相等;若相等,由所述解复用模块输出的视频队列中获取视频包;若不相等,获取所述缓存GOP队列中的第一个视频包,所述缓存GOP队列的参数buffer_index递增1。
可选的,所述数据模块,还用于:
若所述当前创建的surface为非空,所述当前创建的surface与上一次创建的surface为同一个对象,所述当前创建的surface对应的key与所述上一次创建的surface对应的key相同,执行所述解码模块;
所述解码模块,用于对所述视频包进行解码,得到解码后的视频帧。
可选的,所述解码模块,还用于在所述渲染模块渲染所述视频帧并输出的过程中,接收到暂停播放触发指令时,将所述当前创建的surface和所述当前创建的surface对应的key设置为空。
基于上述本发明实施例提供的一种视频播放方法及装置。通过在启动视频播放时,获取当前创建的surface和所述当前创建的surface对应的key,若所述当前创建的surface经由编解码器进行配置,获取视频包;判断所述当前创建的surface是否为非空,以及所述当前创建的surface是否与上一次创建的surface为同一个对象,以及所述当前创建的surface对应的key是否与所述上一次创建的surface对应的key相同;若任一判断为否,将所述当前创建的surface设置为true;对所述视频包进行解码,得到解码后的视频帧;判断所述视频帧的来源是否为缓存GOP队列;若是,则丢弃所述视频帧;若否,则渲染所述视频帧,并输出至设置为true的当前创建的surface。在本方案中,在启动视频播放时,通过对当前创建的surface和对应所述surface的key进行判断,在当前创建的surface和对应所述surface的key发生变化时,确定当前为在视频播放过程中切换出去再切换回来的播放状态,然后再根据视频包的来源,确定如果视频包来自于缓存GOP队列则为旧的,已经播放过的视频,则丢弃,若非来自于GOP队列则为新的视频,渲染所述视频帧输出并与当前创建的surface绑定。从而解决现有视频播放过程中切换出去再切换回来时,导致黑屏或者前后画面不连续等播放体验差的问题,实现改善以及提升用户播放体验的目的。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。
图1为本发明实施例提供的一种视频播放方法的流程示意图;
图2为本发明实施例提供的一种视频播放装置的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
在本申请中,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
由背景技术可知,在现有技术中,android平台在surface发生销毁时会停止播放器播放视频,而在surface再次被创建时则会通过设置再次使播放器重新启播,但是在这个停止播放再重新启播的过程中,会导致出现黑屏或者前后画面不连续的问题,导致播放体验差。
因此,本发明实施例公开了一种视频播放方法及装置,通过在启动视频播放时,通过对当前创建的surface和当前创建的surface对应的key进行判断,在当前创建的surface和当前创建的surface对应的key发生变化时,确定当前为在视频播放过程中切换出去再切换回来的播放状态,然后再根据视频包的来源,确定如果视频包来自于缓存GOP(Group ofPictures,图片群)队列则为旧的,已经播放过的视频,则丢弃,若非来自于GOP队列则为新的视频,渲染所述视频帧输出并与当前创建的surface绑定。从而解决现有视频播放过程中切换出去再切换回来时,导致黑屏或者前后画面不连续等播放体验差的问题,实现改善以及提升用户播放体验的目的。具体通过以下实施例进行详细说明。
如图1所示,为本发明实施例公开的一种视频播放方法的流程示意图,所述方法主要包括如下步骤:
S101:当启动视频播放时,获取当前创建的surface和所述当前创建的surface对应的key。
在S101中,至少有两种播放状态对应启动视频播放,一种是处于首次启动视频播放的播放状态,另一种是在视频播放过程中切换出去再切换回来的播放状态。
可选的,在同一应用中,从当前播放的视频切换至另一视频,再切换回来的播放状态。可选的,从当前播放的视频应用切换到其他应用再切换回来的播放状态。
例如,在短视频应用中,从上下或者左右滑动当前播放的视频切换至另一视频再切换回来的播放状态。
在当前视频播放过程中收到其他应用的信息,切换至其他应用再切换回来的播放状态。
在具体执行S101的过程中,当启动视频播放时,会添加view,该view是指surfaceview或textureview。
在添加view后,通过生命周期回调surfaceCreated对应创建一个surface,拿到当前创建的surface,并对该当前创建的surface生成一个唯一对应的key。
S102:判断当前创建的surface是否经由编解码器进行配置,若是,则执行S103,若否,则执行S104。
在S102中,判断当前创建的surface是否是经过编解码器进行配置生成的。若是,则执行S103,若否,则执行S104至S107。
S103:若所述当前创建的surface经由编解码器进行配置,获取视频包,并执行S108。
在具体执行S103的过程中,确定当前创建的surface经由编解码器进行配置之后,需要获取视频包,而视频包的来源有可能是来自缓存GOP队列,也可能是来自于解复用视频队列。
因此,首先,判断所述缓存GOP队列的参数buffer_index与参数buffer_deep是否相等。
若相等,则由解复用视频队列中获取视频包。
若不相等,获取所述缓存GOP队列中的第一个视频包,所述缓存GOP队列的参数buffer_index递增1。
这里需要说明的是,缓存GOP队列在缓存视频包时,以GOP为一个循环,缓存GOP具有参数buffer_index和参数buffer_deep,获取视频包时,从第一个开始取,取走后buffer_index进行增加1。缓存视频包时,若当前缓存的视频包不是关键帧,则添加至缓存GOP队列时参数buffer_deep递增1。若参数buffer_index和参数buffer_deep相等时,将所述当前创建的surface的变量isConfigure设置为false,在下一个执行流程中,直接从解复用视频队列中获取视频包。
S104:若所述当前创建的surface未经由编解码器进行配置,获取解复用视频队列中的视频包。
S105:判断所述来自解复用视频队列中的视频包是否为关键帧,若是,则执行S106,若否,则执行S107。
S106:清空缓存GOP队列,并将所述来自解复用视频队列中的视频包添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1。
S107:将所述来自解复用视频队列中的视频包直接添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1。
在执行S105至S107的过程中,先判断当前加入的来自解复用视频队列中的视频包是否为关键帧,若当前来自解复用视频队列中的视频包是关键帧,则清空缓存GOP,即将参数buffer_index和参数buffer_deep都归零,然后将该当前来自解复用视频队列中的视频包加入到缓存GOP队列,此时,参数buffer_deep增1。若当前来自解复用视频队列中的视频包不是关键帧,则直接添加到缓存GOP队列,此时,buffer_deep增1。
由此可知,当遇到为关键帧的来自解复用视频队列中的视频包时,重置缓存GOP队列中的参数buffer_index和参数buffer_deep为零。也就是说,缓存GOP队列中缓存的第一个包为关键帧视频包,因此,可以从当前来自解复用视频队列中的视频包追溯到上一个关键视频包。
当遇到为非关键帧的来自解复用视频队列中的视频包时,直接将该来自解复用视频队列中的视频包添加至缓存GOP队列,缓存GOP队列的参数buffer_deep递增1。
S108:判断所述当前创建的surface是否为非空,以及所述当前创建的surface是否与上一次创建的surface为同一个对象,以及所述当前创建的surface对应的key是否与所述上一次创建的surface对应的key相同。若任一判断为否,则执行S109。若均为是,则执行S110。
需要说明的是,在渲染所述视频帧并输出的过程中,当接收到暂停播放触发指令时,将所述当前创建的surface和所述当前创建的surface对应的key设置为空。也就是说,在视频播放过程中切换出去时,surface和所述当前创建的surface对应的key设置为空,而由S101可知,当又切换回来的时候,此时通过生命周期回调surfaceCreated对应创建的surface为空的surface,但其对应的key则不一定为空。
因此,在具体执行S108的过程中,判断所述当前创建的surface不是非空时,即为空,则需要执行S109。
和/或,判断当前创建的surface与上一次创建的surface不是同一个对象时,则需要执行S109。
和/或,判断当前创建的surface对应的key与所述上一次创建的surface对应的key不相同。则需要执行S109。
而,若所述当前创建的surface为非空,所述当前创建的surface与上一次创建的surface为同一个对象,所述当前创建的surface对应的key与所述上一次创建的surface对应的key相同,则执行S110。
S109:将所述当前创建的surface设置为true。
在具体实现S109的过程中,将当前创建的surface的变量isConfigure设置为true。然后,再执行S110。
S110:对所述视频包进行解码,得到解码后的视频帧;
在具体执行S110的过程中,得到解码后的视频帧,该视频帧中携带有视频帧索引index。
该视频帧索引index用于指示视频帧是来自缓存GOP队列还是解复用视频队列。
S111:判断所述视频帧的来源是否为缓存GOP队列,若是,则执行S112,若否,则执行S113。
在具体实现S111中,通过所述视频帧的视频帧索引index确定视频帧的来源。
S112:丢弃所述视频帧。
在具体实现S112的过程中,因为经由S111判断视频帧的来源于缓存GOP队列,则说明该视频帧所对应的视频内容是在播放过程中缓存的,属于播放过的内容,因此丢弃掉。
S113:渲染所述视频帧,并输出至设置为true的当前创建的surface。
在具体实现S113的过程中,因为经由S111判断视频帧的来源非缓存GOP队列,那么可以确定该视频帧来源于解复用视频队列,说明该视频帧所对应的视频内容属于未播放过的内容,因此渲染所述视频帧并输出,同时与设置为true的当前创建的surface进行绑定。
需要说明的是,在离开播放页时,也就是说切换出去时,会触发surface销毁冲虚,此时则需要与原先绑定的surface进行解绑,并设置该surface为空。再次切换即返回播放时,触发surface的创建。
在本发明实施例公开的一种视频播放方法中,通过在启动视频播放时,获取当前创建的surface和当前创建的surface对应的key,若所述当前创建的surface经由编解码器进行配置,获取视频包;判断所述当前创建的surface是否为非空,以及所述当前创建的surface是否与上一次创建的surface为同一个对象,以及所述当前创建的surface对应的key是否与所述上一次创建的surface对应的key相同;若任一判断为否,将所述当前创建的surface设置为true;对所述视频包进行解码,得到解码后的视频帧;判断所述视频帧的来源是否为缓存GOP队列;若是,则丢弃所述视频帧;若否,则渲染所述视频帧,并输出至设置为true的当前创建的surface。
在本方案中,在启动视频播放时,通过对当前创建的surface和当前创建的surface对应的key进行判断,在当前创建的surface和当前创建的surface对应的key发生变化时,确定当前为在视频播放过程中切换出去再切换回来的播放状态,然后再根据视频包的来源,确定如果视频包来自于缓存GOP队列则为旧的,已经播放过的视频,则丢弃,若非来自于GOP队列则为新的视频,渲染所述视频帧输出并与当前创建的surface绑定。从而解决现有视频播放过程中切换到出去再切换回来时,导致黑屏或者前后画面不连续等播放体验差的问题,实现改善以及提升用户播放体验的目的。
基于上述本发明实施例公开的一种视频播放方法,本发明实施例还对应公开了一种视频播放装置,如图2所示,为本发明实施例公开的一种视频播放装置的结构示意图。
所述视频播放装置主要包括:数据模块201、解复用模块202、解码模块203和渲染模块204。
其中,解复用模块202、解码模块203和渲染模块204均属于播放单元。
所述数据模块201,用于当启动视频播放时,获取当前创建的surface和当前创建的surface对应的key;若所述当前创建的surface经由所述解码模块203进行配置,获取视频包;判断所述当前创建的surface是否为非空,以及所述当前创建的surface是否与上一次创建的surface为同一个对象,以及所述当前创建的surface对应的key是否与所述上一次创建的surface对应的key相同;若任一判断为否,则通过所述解复用模块202和所述解码模块203将所述当前创建的surface设置为true。
所述解码模块203,用于对所述视频包进行解码,得到解码后的视频帧,判断所述视频帧的来源是否为缓存GOP队列,若是,则丢弃所述视频帧;若否,则执行所述渲染模块204。
所述渲染模块204,用于渲染所述视频帧,并输出至设置为true的当前创建的surface。
在一可选的实施例中,所述数据模块201,还用于若所述当前创建的surface未经由所述解码模块203进行配置,获取所述解复用模块202输出的视频队列中的视频包;判断所述解复用模块输出的视频队列中的视频包是否为关键帧;若所述解复用模块输出的视频队列中的视频包是关键帧,清空缓存GOP队列,并将所述解复用模块输出的视频队列中的视频包添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1;若所述解复用模块输出的视频队列中的视频包不是关键帧,则将所述解复用模块输出的视频队列中的视频包直接添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1。
在一可选的实施例中,所述获取视频包的数据模块201,具体用于:
判断所述缓存GOP队列的参数buffer_index与参数buffer_deep是否相等;若相等,由所述解复用模块202输出的视频队列中获取视频包;若不相等,获取所述缓存GOP队列中的第一个视频包,所述缓存GOP队列的参数buffer_index递增1。
在一可选的实施例中,所述数据模块201,还用于:
若所述当前创建的surface为非空,所述当前创建的surface与上一次创建的surface为同一个对象,所述当前创建的surface对应的key与所述上一次创建的surface对应的key相同,执行所述解码模块203。
所述解码模块203,用于对所述视频包进行解码,得到解码后的视频帧。
在一可选的实施例中,所述解码模块203,还用于在所述渲染模块204渲染所述视频帧并输出的过程中,接收到暂停播放触发指令时,将所述当前创建的surface由true变更为false,将所述当前创建的surface和所述当前创建的surface对应的key设置为空。
在本发明实施例公开的视频播放装置中,所述数据模块当启动视频播放时,获取当前创建的surface和所述当前创建的surface对应的key;若所述当前创建的surface经由所述解码模块进行配置,获取视频包;判断所述当前创建的surface是否为非空,以及所述当前创建的surface是否与上一次创建的surface为同一个对象,以及所述当前创建的surface对应的key是否与所述上一次创建的surface对应的key相同;若任一判断为否,则通过所述解复用模块和所述解码模块将所述当前创建的surface设置为true。解码模块对所述视频包进行解码,得到解码后的视频帧,判断所述视频帧的来源是否为缓存GOP队列,若是,则丢弃所述视频帧;若否,述渲染模块渲染所述视频帧,并输出至设置为true的当前创建的surface。
在本方案中,在启动视频播放时,数据模块通过对当前创建的surface和所述当前创建的surface对应的key进行判断,在当前创建的surface和所述当前创建的surface对应的key发生变化时,确定当前为在视频播放过程中切换出去再切换回来的播放状态,然后再根据视频包的来源,确定如果视频包来自于缓存GOP队列则为旧的,已经播放过的视频,则丢弃,若非来自于GOP队列则为新的视频,渲染模块通过渲染所述视频帧输出并与当前创建的surface绑定。从而解决现有视频播放过程中切换出去再切换回来时,导致黑屏或者前后画面不连续等播放体验差的问题,实现改善以及提升用户播放体验的目的。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于系统或系统实施例而言,由于其基本相似于方法实施例,所以描述得比较简单,相关之处参见方法实施例的部分说明即可。以上所描述的系统及系统实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性劳动的情况下,即可以理解并实施。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

Claims (10)

1.一种视频播放方法,其特征在于,所述方法包括:
当启动视频播放时,获取当前创建的surface和所述当前创建的surface对应的key;
若所述当前创建的surface经由编解码器进行配置,获取视频包;
判断所述当前创建的surface是否为非空,以及所述当前创建的surface是否与上一次创建的surface为同一个对象,以及所述当前创建的surface对应的key是否与所述上一次创建的surface对应的key相同;
若任一判断为否,将所述当前创建的surface设置为true;
对所述视频包进行解码,得到解码后的视频帧;
判断所述视频帧的来源是否为缓存GOP队列;
若是,则丢弃所述视频帧;
若否,则渲染所述视频帧,并输出至设置为true的当前创建的surface。
2.根据权利要求1所述的方法,其特征在于,还包括:
若所述当前创建的surface未经由编解码器进行配置,获取解复用视频队列中的视频包;
判断来自解复用视频队列中的视频包是否为关键帧;
若所述来自解复用视频队列中的视频包是关键帧,清空缓存GOP队列,并将所述来自解复用视频队列中的视频包添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1;
若所述来自解复用视频队列中的视频包不是关键帧,则将所述来自解复用视频队列中的视频包直接添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1。
3.根据权利要求1所述的方法,其特征在于,所述获取视频包,包括:
判断所述缓存GOP队列的参数buffer_index与参数buffer_deep是否相等;
若相等,由解复用视频队列中获取视频包;
若不相等,获取所述缓存GOP队列中的第一个视频包,所述缓存GOP队列的参数buffer_index递增1。
4.根据权利要求1所述的方法,其特征在于,还包括:
若所述当前创建的surface为非空,所述当前创建的surface与上一次创建的surface为同一个对象,所述当前创建的surface对应的key与所述上一次创建的surface对应的key相同,对所述视频包进行解码,得到解码后的视频帧。
5.根据权利要求1所述的方法,其特征在于,还包括:
在渲染所述视频帧并输出的过程中,将所述当前创建的surface和所述当前创建的surface对应的key设置为空。
6.一种视频播放装置,其特征在于,所述视频播放装置包括:数据模块、解复用模块、解码模块和渲染模块;
所述数据模块,用于当启动视频播放时,获取当前创建的surface和对应所述当前创建的surface对应的key;若所述当前创建的surface经由所述解码模块进行配置,获取视频包;判断所述当前创建的surface是否为非空,以及所述当前创建的surface是否与上一次创建的surface为同一个对象,以及所述当前创建的surface对应的key是否与所述上一次创建的surface对应的key相同;若任一判断为否,则通过所述解复用模块和所述解码模块将所述当前创建的surface设置为true;
所述解码模块,用于对所述视频包进行解码,得到解码后的视频帧,判断所述视频帧的来源是否为缓存GOP队列,若是,则丢弃所述视频帧;若否,则执行所述渲染模块;
所述渲染模块,用于渲染所述视频帧,并输出至设置为true的当前创建的surface。
7.根据权利要求6所述的装置,其特征在于,
所述数据模块,还用于,若所述当前创建的surface未经由所述解码模块进行配置,获取所述解复用模块输出的视频队列中的视频包;判断所述解复用模块输出的视频队列中的视频包是否为关键帧;若所述解复用模块输出的视频队列中的视频包是关键帧,清空缓存GOP队列,并将所述解复用模块输出的视频队列中的视频包添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1;若所述解复用模块输出的视频队列中的视频包不是关键帧,则将所述解复用模块输出的视频队列中的视频包直接添加至所述缓存GOP队列,所述缓存GOP队列的参数buffer_deep递增1。
8.根据权利要求6所述的装置,其特征在于,所述获取视频包的数据模块,具体用于:
判断所述缓存GOP队列的参数buffer_index与参数buffer_deep是否相等;若相等,由所述解复用模块输出的视频队列中获取视频包;若不相等,获取所述缓存GOP队列中的第一个视频包,所述缓存GOP队列的参数buffer_index递增1。
9.根据权利要求6所述的装置,其特征在于,
所述数据模块,还用于:
若所述当前创建的surface为非空,所述当前创建的surface与上一次创建的surface为同一个对象,所述当前创建的surface对应的key与所述上一次创建的surface对应的key相同,执行所述解码模块;
所述解码模块,用于对所述视频包进行解码,得到解码后的视频帧。
10.根据权利要求6所述的装置,其特征在于,
所述解码模块,还用于在所述渲染模块渲染所述视频帧并输出的过程中,接收到暂停播放触发指令时,将所述当前创建的surface和所述当前创建的surface对应的key设置为空。
CN202111535810.3A 2021-12-15 2021-12-15 一种视频播放方法及装置 Active CN114222182B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111535810.3A CN114222182B (zh) 2021-12-15 2021-12-15 一种视频播放方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111535810.3A CN114222182B (zh) 2021-12-15 2021-12-15 一种视频播放方法及装置

Publications (2)

Publication Number Publication Date
CN114222182A CN114222182A (zh) 2022-03-22
CN114222182B true CN114222182B (zh) 2024-02-09

Family

ID=80702414

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111535810.3A Active CN114222182B (zh) 2021-12-15 2021-12-15 一种视频播放方法及装置

Country Status (1)

Country Link
CN (1) CN114222182B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115941914B (zh) * 2023-01-06 2023-05-23 湖南马栏山视频先进技术研究院有限公司 一种基于视频帧分析的视频渲染系统

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130105374A (ko) * 2012-03-14 2013-09-25 삼성전자주식회사 영상처리장치 및 그 제어방법
CN104202675A (zh) * 2014-09-03 2014-12-10 乐视致新电子科技(天津)有限公司 智能终端及其快速频道切换方法和装置
CN110213659A (zh) * 2019-07-01 2019-09-06 杭州当虹科技股份有限公司 一种可在不同视频流间快速切换播放器的实现方法
CN110891193A (zh) * 2018-09-11 2020-03-17 广州虎牙信息科技有限公司 直播视频处理方法、装置、终端及存储介质
CN112019858A (zh) * 2019-05-31 2020-12-01 腾讯科技(深圳)有限公司 一种视频播放方法、装置、计算机设备和存储介质

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20130105374A (ko) * 2012-03-14 2013-09-25 삼성전자주식회사 영상처리장치 및 그 제어방법
CN104202675A (zh) * 2014-09-03 2014-12-10 乐视致新电子科技(天津)有限公司 智能终端及其快速频道切换方法和装置
CN110891193A (zh) * 2018-09-11 2020-03-17 广州虎牙信息科技有限公司 直播视频处理方法、装置、终端及存储介质
CN112019858A (zh) * 2019-05-31 2020-12-01 腾讯科技(深圳)有限公司 一种视频播放方法、装置、计算机设备和存储介质
CN110213659A (zh) * 2019-07-01 2019-09-06 杭州当虹科技股份有限公司 一种可在不同视频流间快速切换播放器的实现方法

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
P2P点播客户端播放系统的设计与实现;李宏方;中国优秀硕士学位论文全文数据库 信息科技辑;20131130(2013年第11期);全文 *

Also Published As

Publication number Publication date
CN114222182A (zh) 2022-03-22

Similar Documents

Publication Publication Date Title
CN110162343B (zh) 应用启动方法及装置、电子设备及存储介质
CN108496198B (zh) 一种图像处理方法及设备
CN108174280B (zh) 一种音视频在线播放方法及系统
CN107483812B (zh) 一种多平台并行直播的方法及装置
JP6499324B2 (ja) ビデオを再生するための方法、クライアント及びコンピュータ記憶媒体
CN108932948B (zh) 音频数据处理方法、装置、计算机设备和计算机可读存储介质
CN104685873B (zh) 编码控制设备以及编码控制方法
CN114222182B (zh) 一种视频播放方法及装置
JP2007295568A (ja) モバイルメッセンジャーサービスの利用中にイメージを伝送する移動通信端末機及びその方法
JP2009526435A5 (zh)
CN112653913A (zh) 投屏方法、装置、客户端设备及可读存储介质
WO2019071618A1 (zh) 一种图像处理方法及设备
KR102110644B1 (ko) 통신 처리 방법 및 전자 장치
CN109660859A (zh) 一种动画展示方法和移动终端
CN107027064A (zh) 无线传屏中视频文件的处理方法及装置
CN112153396A (zh) 页面展示方法、装置、系统和存储介质
CN104053002A (zh) 视频解码方法和视频解码装置
CN111202980A (zh) 信息传送方法、流媒体云平台和计算机可读存储介质
CN110996122A (zh) 视频帧传输方法、装置、计算机设备及存储介质
CN105791987A (zh) 媒体数据播放的方法及终端
CN105992055B (zh) 一种视频解码的方法及装置
CN114285836B (zh) 一种视频播放方法、装置及介质
CN114268830B (zh) 云导播同步方法、装置、设备及存储介质
CN114567802A (zh) 一种数据显示方法和装置
CN115643429A (zh) 视频播放方法、装置、电子设备及计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant