一种视频播放方法及装置与流程

文档序号:15744479发布日期:2018-10-23 22:52阅读:171来源:国知局

本发明实施例涉及信息处理技术,尤其涉及一种视频播放方法及装置。



背景技术:

随着互联网的不断普及和发展,移动互联网视频直播正处于如火如荼的井喷式发展当中。传统的直播大多是单向型的,比如电视台或者运营商直播,用户只需要打开终端收看即可,对于实时性并没有太大的要求。而移动互联网视频直播往往在功能上需要录制端和播放端有交互,这种交互不限于文字的互动,还包括视频的互动,因此,移动互联网视频直播实时性要求较高。

目前,移动互联网视频直播中播放实时视频的方法为,录制端采集视频数据并按照X264格式进行视频编码,通过QoS(Quality of Service,服务质量)算法将视频流数据基于TCP(Transmission Control Protocol,传输控制协议)之上的RTMP(Real Time Messaging Protocol,实时消息传输协议)推流到CDN(Content Delivery Network,内容分发网络)服务器进行分发,播放端从CDN服务器拉流解码来播放。

现有技术中因采用从CDN服务器拉流解码来播放实时视频,在网络较差或强丢包、乱序的情况下,容易导致播放出来的画面出现卡顿或画面延迟的情况。



技术实现要素:

本发明实施例提供一种视频播放方法及装置,以可靠有效地将实时画面完整播放出来,提高用户体验。

第一方面,本发明实施例提供了一种视频播放方法,包括:

实时接收视频服务器转发的,由视频发送端发送的实时生成的视频编码帧的视频帧分片,并将所述视频帧分片存储于接收缓存区中的对应帧序号内;

检测是否满足视频帧获取触发条件:若是,则根据所述接收缓存区中当前存储的视频帧分片所对应的帧序号确定实时视频的当前播放状态;

根据所述当前播放状态,生成对应的待解码数据上传至上层播放器进行解码播放;

返回执行实时接收视频服务器转发的,由视频发送端发送的实时生成的视频编码帧的视频帧分片的操作,直至满足结束播放条件。

第二方面,本发明实施例还提供了一种视频播放装置,该装置包括:

分片存储模块,用于实时接收视频服务器转发的,由视频发送端发送的实时生成的视频编码帧的视频帧分片,并将所述视频帧分片存储于接收缓存区中的对应帧序号内;

状态确定模块,用于检测是否满足视频帧获取触发条件:若是,则根据所述接收缓存区中当前存储的视频帧分片所对应的帧序号确定实时视频的当前播放状态;

解码播放模块,用于根据所述当前播放状态,生成对应的待解码数据上传至上层播放器进行解码播放;

视频帧检测模块,用于返回执行实时接收视频服务器转发的,由视频发送端发送的实时生成的视频编码帧的视频帧分片的操作,直至满足结束播放条件。

本发明实施例通过实时接收和存储视频帧分片,在检测到满足视频帧获取触发条件时确定实时视频的当前播放状态,进而根据当前播放状态生成对应的待解码数据并进行解码播放,最后返回接收和存储视频帧分片直至满足结束播放条件,利用了分片接收且根据播放状态来进行播放的优点,解决了现有技术中因采用拉流解码进行播放而导致的在网络较差的情况下容易出现画面卡顿或延迟的问题,实现了可靠有效地将实时画面完整播放出来,提高了用户体验。

附图说明

图1是本发明实施例一提供的一种视频播放方法的流程示意图;

图2是本发明实施例二提供的一种视频播放方法的流程示意图;

图3是本发明实施例三提供的一种视频播放装置的结构示意图。

具体实施方式

下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。

实施例一

图1为本发明实施例一提供的一种视频播放方法的流程示意图。该方法可适用于视频播放的情况,该方法可以由视频播放装置来执行,该装置可由硬件和/或软件组成,并一般可集成视频播放端以及所有包含视频接收和播放功能的智能终端中。具体包括如下:

S110、实时接收视频服务器转发的,由视频发送端发送的实时生成的视频编码帧的视频帧分片,并将视频帧分片存储于接收缓存区中的对应帧序号内。

可选的,接收缓存区中包含有多个帧缓存区,每个帧缓存区都对应有一个帧序号,其中每个帧序号所对应的帧缓存区均分配有对应数量的视频帧分片的分片缓存区。示例性的,视频播放端收到视频帧分片后,会将视频帧分片放入对应帧序号下的帧缓存区内的分片缓存区中进行存储。例如,实时接收到帧序号为1分片号为1-5的5个视频帧分片,则将这5个视频帧分片放入接收缓存区中帧序号为1的帧缓存区中,并按照分片号分别存储至对应的分片缓存区中。

示例性的,视频发送端将实时采集的视频数据经编码后生成视频编码帧,而对于高分辨率的视频编码帧,帧的大小往往高于基于UDP(User Datagram Protocol,用户数据报协议)的传输方式中的网络最大传输单元,因此需要对实时生成的视频编码帧进行分片处理,形成至少一个小于预设大小的视频帧分片后,以视频帧分片为传输单元进行视频数据的发送,从而有效地解决了因传输单元过大而导致的视频延迟高的问题,降低了视频的传输延迟。其中,视频帧分片的大小可设置为800字节,优选的,每个视频编码帧最多可分为500个视频帧分片。

优选的,接收缓存区中还存储有与帧序号对应的帧时间戳;其中,帧时间戳通过接收到实时视频的第一个视频帧的时间以及实时视频的接收帧间隔计算得到。

示例性的,每个帧序号对应的帧时间戳=第一个视频帧的时间+N×实时视频的接收帧间隔,其中,N为第一个视频帧所对应的帧序号与当前接收的视频帧分片所在视频帧的帧序号之差;实时视频的接收帧间隔可以为预设间隔,也可以根据视频帧分片的实际接收情况实时计算得到。例如,每收到一帧新的视频帧所对应的第一个视频帧分片,则根据该视频帧分片接收时间与当前接收缓存区中最早接收的视频帧中的第一个视频帧分片的接收时间之差,除以当前接收缓存区中已接收到的总帧数来计算实时视频的接收帧间隔。可选的,第一个视频帧的时间可以为最早接收到的视频帧分片所对应的绝对接收时间。根据实际接收情况实时计算接收帧间隔的好处在于,可以保证每帧画面所对应的帧时间戳为匀速播放,减小网络波动对播放画面的影响。

S120、检测是否满足视频帧获取触发条件,若是,则执行S130;若否,则执行S110。

可选的,视频帧获取触发条件可以是上层播放器从接收缓存区中获取一帧视频帧所需的条件。示例性的,只有当满足视频帧获取触发条件时,才能获取视频帧,以传输至上层播放器进行解码播放,否则继续接收并存储视频帧分片,直到满足视频帧获取触发条件。优选的,若当前接收的视频帧为第一帧,则进行即收即放的显示,即第一帧视频中的视频帧分片全部接收完全后,无需检测是否满足视频帧获取触发条件即可播放,以减少实时视频的播放延迟。

S130、根据接收缓存区中当前存储的视频帧分片所对应的帧序号确定实时视频的当前播放状态。

可选的,当前播放状态可分为就绪状态和缓冲状态。示例性的,若当前接收缓存区中存储有至少一个帧序号所对应的视频帧分片,则说明当前接收缓存区中至少有一帧视频帧是可以播放的,因而可确定为就绪状态;若当前接收缓存区中没有存储到一个帧序号对应的视频帧分片,则说明当前接收缓存区中无可播放视频帧,因而可确定为缓冲状态。

根据接收缓存区中当前存储情况确定实时视频的当前播放状态的好处在于,可以根据接收情况的不同采取不同的视频播放措施,以保证实时视频的完整播放,进而提高用户体验。

S140、根据当前播放状态,生成对应的待解码数据上传至上层播放器进行解码播放。

可选的,待解码数据可以是预设的视频编码帧,也可以是由接收到的视频帧分片合并得到的视频编码帧。示例性的,若当前播放状态为就绪状态,则可以将接收到的视频帧分片进行合并,进而生成相应视频编码帧的待解码数据,并上传至上层播放器进行解码播放;若当前播放状态为缓冲状态,则可以调用预设的视频编码帧以生成对应的待解码数据,并上传至上层播放器进行解码播放。其中,预设的视频编码帧可以是空数据帧,也可以是包含固定提示性文字的数据帧,例如包含有“正在缓冲”等提示性文字的待解码数据帧。

根据当前播放状态的不同生成不同的待解码数据的好处在于,可以在网络较差时保证待解码数据的完整性,可靠有效地将实时画面完整播放出来,避免出现画面卡顿的情况,从而提高了用户播放体验。

S150、检测是否满足结束播放条件,若是,则执行S160;若否,则执行S110。

可选的,结束播放条件可以是接收到由视频服务器发送的断开指令,其中,断开指令中包括了视频发送端的身份标识信息。

示例性的,在群视频中,若有客户端需要退出群视频,则会向视频服务器发送断开请求,视频服务器会根据该断开请求向群视频中的其他客户端发送包含该客户端UID(User Identification,用户身份标识)的断开指令,以指示其他客户端关闭与该客户端对应的视频传输通道。

S160、结束播放。

可选的,当满足结束播放条件时,结束实时视频的接收和播放。

示例性的,当群视频中客户端收到视频服务器发送的有关其他客户端UID的断开指令时,关闭与该客户端UID对应的传输通道,以释放该通道资源。

本实施例的技术方案,通过实时接收和存储视频帧分片,在检测到满足视频帧获取触发条件时确定实时视频的当前播放状态,进而根据当前播放状态生成对应的待解码数据并进行解码播放,最后返回接收和存储视频帧分片直至满足结束播放条件,利用了分片接收且根据播放状态来进行播放的优点,解决了现有技术中因采用拉流解码进行播放而导致的在网络较差的情况下容易出现画面卡顿或延迟的问题,实现了可靠有效地将实时画面完整播放出来,提高了用户体验。

实施例二

图2为本发明实施例二提供的一种视频播放方法的流程示意图。本实施例以上述实施例为基础进行优化,提供了优选的视频播放方法,具体是,对根据接收缓存区中当前存储的视频帧分片所对应的帧序号确定实时视频的当前播放状态进行了进一步优化。具体包括如下:

S201、实时接收视频服务器转发的,由视频发送端发送的实时生成的视频编码帧的视频帧分片,并将视频帧分片存储于接收缓存区中的对应帧序号内。

S202、检测与最小帧序号对应的帧时间戳是否小于等于允许播放相对时间戳,若是,则执行S203;若否,则执行S201。

优选的,如果与最小帧序号对应的帧时间戳(min_ts)小于等于允许播放相对时间戳(cached_ts),则确定满足视频帧获取触发条件,其中,允许播放相对时间戳(cached_ts)由前一待解码数据的生成时间(play_ts)以及当前系统时间(cur_ts)确定。

其中,最小帧序号是指当前接收缓存区中最早接收到的视频帧分片所属视频帧的帧序号,该帧序号对应的帧时间戳可以通过接收到实时视频的第一个视频帧的时间以及实时视频的接收帧间隔计算得到。

示例性的,检测最小帧序号(min_fid)对应的帧时间戳(min_ts)是否小于或等于允许播放相对时间戳(cached_ts),若是,则确定满足视频帧获取触发条件;若否,则确定不满足视频帧获取触发条件,还需继续接收视频帧分片,直到满足视频帧获取触发条件。

S203、检测接收缓存区中最大帧序号是否大于最小帧序号,且最大帧序号所对应的帧时间戳是否大于播放缓冲阈值,若是,则执行S204;若否,则执行S207。

其中,播放缓冲阈值由当前网络条件下视频帧分片传输的实际往返时间确定。

示例性的,可根据公式wait_ts>rtt+2×rtt_val来确定缓冲时间大小的范围,其中,wait_ts为缓冲时间大小,rtt为当前网络条件下视频帧分片传输的实际往返时间,rtt_val为rtt修正值。具体的,可根据定期检查接收视频帧分片时的丢包数量以及当前网络条件下视频帧分片传输的实际往返时间确定缓冲时间大小wait_ts的具体值,优选的,播放缓冲阈值为缓冲时间大小wait_ts的设定倍数,例如,播放缓冲阈值为wait_ts×5/4。

其中,最大帧序号是指当前接收缓存区中最后接收到的视频帧分片所属视频帧的帧序号,该帧序号对应的帧时间戳可以通过接收到实时视频的第一个视频帧的时间以及实时视频的接收帧间隔计算得到。

S204、确定当前播放状态为就绪状态。

示例性的,当检测到接收缓存区中最大帧序号大于最小帧序号,且最大帧序号所对应的帧时间戳大于播放缓冲阈值时,即可确定当前接收缓存区中存在至少一帧待获取的视频帧,因此可以确定当前播放状态为就绪状态,表明当前状态下可以进行视频播放。

优选的,在确定当前播放状态为就绪状态之后,还包括:获取允许播放绝对时间戳,其中,允许播放绝对时间戳为前一待解码数据的生成时间;将允许播放相对时间戳更新为当前系统时间与允许播放绝对时间戳之差再与允许播放相对时间戳之和;将允许播放绝对时间戳更新为当前系统时间。

示例性的,在确定当前播放状态为就绪状态之后,若检测到当前系统时间(cur_ts)大于允许播放绝对时间戳(play_ts),则将允许播放相对时间戳(cached_ts)更新为cur_ts-play_ts+cached_ts,并将允许播放绝对时间戳(play_ts)更新为cur_ts。

更新这些参数的目的在于,更新当前接收缓存区中最早接收的视频帧的播放情况,以便更准确地判断当前状态下是否可从接收缓存区中提取下一视频帧进行播放。

S205、判断最小帧序号对应的帧时间戳是否小于等于允许播放相对时间戳,且接收缓存区中最小帧序号所对应的所有视频帧分片是否已经接收完整,若是,则执行S206;若否,则执行S208。

可选的,当确定当前播放状态为就绪状态后,需判断当前最小帧序号对应的视频帧是否已经可以被提取至上层进行播放,即最后确定接收缓存区中最早接收的视频帧是否已接收完整且已到达可播放时间。

示例性的,具体可通过判断当前接收缓存区中的最小帧序号(min_fid)对应的帧时间戳(min_ts)是否小于或等于允许播放相对时间戳(cached_ts),且最小帧序号(min_fid)中所有的视频帧分片是否均已接收完整,若是,才会最终获取该帧视频数据。这样设置的好处在于,可以保证获取的视频帧为完整视频帧,且视频帧不会出现乱序现象,进而提高视频播放的完整性和可靠性,提高了用户播放体验。

S206、将最小帧序号对应的所有视频帧分片进行合并,并将合并结果作为待解码数据上传至上层播放器进行解码播放。

示例性的,按照视频帧分片的分片号对最小帧序号对应的所有视频帧分片进行合并,生成一个完整的视频编码帧,并将该视频编码帧作为待解码数据发送至上层播放器进行实时解码播放。

优选的,在将最小帧序号对应的所有视频帧分片进行合并,并将合并结果作为待解码数据上传至上层播放器进行解码播放之后,还包括:判断接收缓存区中最大帧序号与最小帧序号的差值是否小于等于预设阈值,或者接收缓存区中最大帧序号对应的帧时间戳是否小于等于最小帧序号对应的帧时间戳与播放缓冲阈值之和:若是,则将允许播放相对时间戳更新为最小帧序号对应的帧时间戳;若否,则将允许播放相对时间戳更新为最大帧序号对应的帧时间戳与播放缓冲阈值之差;

可选的,在将最小帧序号中的所有视频帧分片进行合并解码播放后,需要对相关参数进行更新,以便为播放下一视频帧提供判断依据。其中,当相邻帧序号之间差值为1时,预设阈值可以是1。示例性的,若接收缓存区中最大帧序号(max_fid)-最小帧序号(min_fid)=1时,或接收缓存区中最大帧序号对应的帧时间戳(max_ts)≤最小帧序号对应的帧时间戳(min_ts)+播放缓冲阈值(wait_ts×5/4),则说明当前接收缓存区中的视频帧很少,因此将允许播放相对时间戳(cached_ts)更新为min_ts,即接收缓存区中只有最小帧序号对应的那一帧数据可供播放;否则,说明当前接收缓存区中的视频帧很充足,因此将cached_ts更新为max_ts-wait_ts×5/4,即接收缓存区中有多个帧可供播放。

优选的,还包括:删除接收缓存区中最小帧序号内的所有视频帧分片。

删除已经播放的视频帧分片的好处在于,可以及时清除缓存数据,节约了接收缓存区中的临时存储空间。

S207、确定当前播放状态为缓冲状态。

示例性的,当检测到接收缓存区中最大帧序号等于最小帧序号,即可确定当前接收缓存区中无缓存视频帧,因此可以确定当前播放状态为缓冲状态,表明当前状态下不能进行视频播放。

S208、构造设定空数据作为待解码数据上传至上层播放器进行解码播放。

可选的,设定空数据可以是包含设定像素值(例如黑色,像素值为0)的数据,并填充至相应的帧序号内,形成的一帧完整的视频编码帧,并将该视频编码帧作为待解码数据上传至上层播放器进行解码播放。

S209、检测是否满足结束播放条件,若是,则执行S210;若否,则执行S201。

S210、结束播放。

本实施例的技术方案,通过实时接收和存储视频帧分片,在检测到最小帧序号对应的帧时间戳小于等于允许播放相对时间戳时,才进行视频帧的获取,再根据接收缓存区中当前帧序号以及相应帧时间戳与相关参数之间的比较确定当前播放状态,只有在当前播放状态为就绪状态时才获取接收缓存区中最小帧序号对应的视频帧进行解码播放,否则返回空数据进行播放,最后返回接收和存储视频帧分片直至满足结束播放条件,实现了可靠有效地将实时画面完整播放出来,提高了用户体验。

实施例三

图3为本发明实施例三提供的一种视频播放装置的结构示意图。参考图3,视频播放装置包括:分片存储模块310、状态确定模块320、解码播放模块330以及视频帧检测模块340,下面对各模块进行具体说明。

分片存储模块310,用于实时接收视频服务器转发的,由视频发送端发送的实时生成的视频编码帧的视频帧分片,并将所述视频帧分片存储于接收缓存区中的对应帧序号内;

状态确定模块320,用于检测是否满足视频帧获取触发条件:若是,则根据所述接收缓存区中当前存储的视频帧分片所对应的帧序号确定实时视频的当前播放状态;

解码播放模块330,用于根据所述当前播放状态,生成对应的待解码数据上传至上层播放器进行解码播放;

视频帧检测模块340,用于返回执行实时接收视频服务器转发的,由视频发送端发送的实时生成的视频编码帧的视频帧分片的操作,直至满足结束播放条件。

本实施例提供了一种视频播放装置,通过实时接收和存储视频帧分片,在检测到满足视频帧获取触发条件时确定实时视频的当前播放状态,进而根据当前播放状态生成对应的待解码数据并进行解码播放,最后返回接收和存储视频帧分片直至满足结束播放条件,利用了分片接收且根据播放状态来进行播放的优点,解决了现有技术中因采用拉流解码进行播放而导致的在网络较差的情况下容易出现画面卡顿或延迟的问题,实现了可靠有效地将实时画面完整播放出来,提高了用户体验。

在上述各实施例的基础上,所述接收缓存区中还存储有与帧序号对应的帧时间戳;

其中,所述帧时间戳通过接收到所述实时视频的第一个视频帧的时间以及所述实时视频的接收帧间隔计算得到。

在上述各实施例的基础上,状态确定模块320可以包括:

就绪状态确定子模块,用于若所述接收缓存区中最大帧序号大于最小帧序号,且所述接收缓存区中最大帧序号所对应的帧时间戳大于播放缓冲阈值,则确定当前播放状态为就绪状态;

缓冲状态确定子模块,用于若所述接收缓存区中最大帧序号等于最小帧序号,则确定当前播放状态为缓冲状态;

其中,所述播放缓冲阈值由当前网络条件下所述视频帧分片传输的实际往返时间确定。

在上述各实施例的基础上,所述检测是否满足视频帧获取触发条件,包括:

如果与最小帧序号对应的帧时间戳小于等于允许播放相对时间戳,则确定满足视频帧获取触发条件,其中,所述允许播放相对时间戳由前一待解码数据的生成时间以及当前系统时间确定。

在上述各实施例的基础上,所述状态确定模块320还可以包括:

绝对时间戳获取子模块,用于在确定当前播放状态为就绪状态之后,获取允许播放绝对时间戳,其中,所述允许播放绝对时间戳为前一待解码数据的生成时间;

相对时间戳更新子模块,用于将所述允许播放相对时间戳更新为当前系统时间与所述允许播放绝对时间戳之差再与所述允许播放相对时间戳之和;

绝对时间戳更新子模块,用于将所述允许播放绝对时间戳更新为当前系统时间。

在上述各实施例的基础上,解码播放模块330可以包括:

第一播放子模块,用于在所述当前播放状态为就绪状态时,判断最小帧序号对应的帧时间戳是否小于等于所述允许播放相对时间戳,且所述接收缓存区中最小帧序号所对应的所有视频帧分片是否已经接收完整:若是,则将所述最小帧序号对应的所有视频帧分片进行合并,并将合并结果作为待解码数据上传至上层播放器进行解码播放;否则,构造设定空数据作为待解码数据上传至上层播放器进行解码播放;

第二播放子模块,用于在所述当前播放状态为缓冲状态时,构造设定空数据作为待解码数据上传至上层播放器进行解码播放。

在上述各实施例的基础上,解码播放模块330还包括:

时间戳更新子模块,用于在将所述最小帧序号对应的所有视频帧分片进行合并,并将合并结果作为待解码数据上传至上层播放器进行解码播放之后,判断所述接收缓存区中最大帧序号与最小帧序号的差值是否小于等于预设阈值,或者所述接收缓存区中最大帧序号对应的帧时间戳是否小于等于最小帧序号对应的帧时间戳与播放缓冲阈值之和:若是,则将所述允许播放相对时间戳更新为所述最小帧序号对应的帧时间戳;若否,则将所述允许播放相对时间戳更新为所述最大帧序号对应的帧时间戳与所述播放缓冲阈值之差;

分片删除子模块,用于删除所述接收缓存区中所述最小帧序号内的所有视频帧分片。

上述产品可执行本发明任意实施例所提供的方法,具备执行方法相应的功能模块和有益效果。

注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

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