CN104394485B - 视频流的帧大小检测方法及装置 - Google Patents

视频流的帧大小检测方法及装置 Download PDF

Info

Publication number
CN104394485B
CN104394485B CN201410667892.0A CN201410667892A CN104394485B CN 104394485 B CN104394485 B CN 104394485B CN 201410667892 A CN201410667892 A CN 201410667892A CN 104394485 B CN104394485 B CN 104394485B
Authority
CN
China
Prior art keywords
frame
rtp bags
rtp
video
bags
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
CN201410667892.0A
Other languages
English (en)
Other versions
CN104394485A (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.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies 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 Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Priority to CN201410667892.0A priority Critical patent/CN104394485B/zh
Priority claimed from CN201210298928.3A external-priority patent/CN103634698B/zh
Publication of CN104394485A publication Critical patent/CN104394485A/zh
Application granted granted Critical
Publication of CN104394485B publication Critical patent/CN104394485B/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/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/63Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
    • H04N21/643Communication protocols
    • H04N21/6437Real-time Transport Protocol [RTP]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/60Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client 
    • H04N21/63Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
    • H04N21/647Control signaling between network components and server or clients; Network processes for video distribution between server and clients, e.g. controlling the quality of the video stream, by dropping packets, protecting content from unauthorised alteration within the network, monitoring of network load, bridging between two different networks, e.g. between IP and wireless
    • H04N21/64784Data processing by the network
    • H04N21/64792Controlling the complexity of the content stream, e.g. by dropping packets
    • 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/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8547Content authoring involving timestamps for synchronizing content

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)

Abstract

本发明实施例提供一种视频流的帧类型检测、帧大小检测方法及装置。视频帧类型检测方法包括:获得当前视频帧的大小,所述当前视频帧位于所述视频流的第一个视频帧之后;根据当前视频帧和与所述当前视频帧相邻的前一视频帧的大小,获得所述当前视频帧的变化特征值;根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值;根据所述当前视频帧和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧和前一视频帧、前两视频帧的大小判断所述前一视频帧是否为I帧。本发明提供了一套完整有效的检测帧类型的方法,并且使得在检测前一视频帧的帧类型时可以只考虑其之前的一个视频帧,且充分考虑了视频帧率的影响。

Description

视频流的帧大小检测方法及装置
技术领域
本发明实施例涉及多媒体技术,尤其涉及一种视频流的帧大小检测方法及装置。
背景技术
在网络媒体迅速发展的背景下,影视点播、网络电视、可视电话等业务已成为宽带网络和无线网络的主要业务,使得运营商需要对传输的视频业务质量进行监控并及时采取相应措施进行调节以保证用户对媒体业务的体验需求。网络视频质量评估是网络视频应用中必不可少的一项重要技术。
根据对原始参考视频需要的程度,视频客观质量评估方法通常可以分成三大类:全参考、部分参考和无参考视频客观质量评估。由于信道带宽的限制,视频接收端通常无法获得所需的原始参考视频序列,因此需要利用无参考视频质量评估方法来对网络中传输的视频流进行评价。
现有基于帧类型参数的无参考视频质量评估方法中,需要先检测视频帧类型,而现有技术中还没有一套完整有效的检测帧类型的方法。
另外,现有的帧大小检测方法仅适用于没有丢包的帧,对于有丢包的帧的大小检测,还没有一种有效的解决方案。
发明内容
本发明实施例提供一种视频流的帧类型检测方法及装置,用以提供一套完整有效的检测帧类型的方法。
本发明的第一个方面是提供一种视频流的帧类型检测方法,包括:
获得当前视频帧的大小,所述当前帧位于所述视频流的第一个视频帧之后;
根据当前视频帧的大小和与所述当期视频帧相邻的前一视频帧的大小,获得所述当前视频帧的变化特征值;
根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值;
根据所述当前视频帧的变化特征值和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧的大小、前一视频帧的大小和与所述前一视频帧相邻的前两视频帧的大小判断所述前一视频帧是否为I帧。
本发明的第二个方面是提供一种视频流的帧类型检测装置,包括:
帧大小获得模块,用于获得当前视频帧的大小,所述当前视频帧位于所述视频流的第一个视频帧之后;
特征提取模块,用于根据当前视频帧的大小和与所述当前视频帧相邻的前一视频帧的大小,获得所述当前视频帧的变化特征值;
阈值获得模块,用于根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值;
类型判断模块,用于根据所述当前视频帧的变化特征值和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧的大小、前一视频帧的大小和与所述前一视频帧相邻的前两视频帧的大小判断所述前一视频帧是否为I帧。
本发明的第三个方面是提供一种视频流的帧类型检测方法,包括:
获得当前视频帧的大小,所述当前视频帧位于所述视频流的第一个视频帧之后;
根据当前视频帧的大小和之前至少两视频帧的大小,获得所述当前视频帧的变化特征值;
根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值;
根据所述当前视频帧的变化特征值和与所述当前视频帧相邻的前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧的大小和之前至少两视频帧的大小判断所述前一视频帧是否为I帧。
本发明的第四个方面是提供一种视频流的帧类型检测装置,其特征在于,包括:
帧大小获得模块,用于获得当前视频帧的大小,所述当前视频帧位于所述视频流的第一个视频帧之后;
特征提取模块,用于根据当前视频帧的大小和之前至少两视频帧的大小,获得所述当前视频帧的变化特征值;
阈值获得模块,用于根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值;
类型判断模块,用于根据所述当前视频帧的变化特征值和与所述当前视频帧相邻的前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧的大小和之前至少两视频帧的大小判断所述前一视频帧是否为I帧。
上述多个技术方案中的一个技术方案至少具有如下有益效果或优点:
本发明实施例通过根据当前视频帧和与所述当前视频帧相邻的前一视频帧的大小获得所述当前视频帧的变化特征值,根据视频帧率和所述当前视频帧的位置获得所述当前视频帧的I帧阈值,根据所述当前视频帧和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧、前一视频帧和前两视频帧的大小判断所述前一视频帧是否为I帧,提供了一套完整有效的检测帧类型的方法,并且使得在检测前一视频帧的帧类型时可以只考虑其之前的一个视频帧,即前两视频帧,解决了现有视频帧类型检测中基于之前的多个视频帧进行计算导致复杂度高、时延大的问题,且充分考虑了视频帧率的影响,使得检测结果更加准确。
本发明实施例还提供了一种帧大小检测方法,用以提供一种有效的检测有丢包的帧的大小的解决方案。
本发明的第五个方面是提供了一种帧大小检测方法,包括:
若确定接收到的两个RTP包之间发生丢包,则获得各接收到的RTP包的净载,根据各接收到的RTP包的净载估计每个丢失的RTP包的净载;
根据所述两个RTP包的序列号,获得所述两个RTP包之间丢失的RTP包的总个数V_lostPackets;
根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数;
根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载,得到丢包的各帧的大小。
本发明的第六个方面是提供了一种帧大小检测装置,包括:
净载估计模块,用于若确定接收到的两个RTP包之间发生丢包,则获得各接收到的RTP包的净载,根据各接收到的RTP包的净载估计每个丢失的RTP包的净载;
总丢失数获得模块,用于根据所述两个RTP包的序列号,获得所述两个RTP包之间丢失的RTP包的总个数V_lostPackets;
各丢失数估计模块,用于根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数;
帧大小检测模块,用于根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载,得到丢包的各帧的大小。
上述多个技术方案中的一个技术方案至少具有如下有益效果或优点:
本发明实施例通过若确定接收到的两个RTP包之间发生丢包,则根据各接收到的RTP包的净载估计每个丢失的RTP包的净载,并根据所述两个RTP包的序列号获得所述两个RTP包之间丢失的RTP包的总个数,然后根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数,从而根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载得到丢包的各帧的大小,提供一种有效的检测有丢包的帧的大小的解决方案。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种视频流的帧类型检测方法的流程示意图;
图2A-2I为本发明实施例的丢包例一至九的示意图;
图3为本发明实施例提供的又一种视频流的帧类型检测方法的流程示意图;
图4为本发明实施例提供的一种帧大小检测方法的流程示意图;
图5为本发明实施例提供的一种视频流的帧类型检测装置的结构示意图;
图6为本发明实施例提供的又一种视频流的帧类型检测装置的结构示意图
图7为本发明实施例提供的一种帧大小检测装置的结构示意图;
图8为本发明实施例提供的另一种视频流的帧类型检测装置的结构示意图;
图9为本发明实施例提供的再一种视频流的帧类型检测装置的结构示意图
图10为本发明实施例提供的又一种帧大小检测装置的结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例提供的一种视频流的帧类型检测方法的流程示意图。如图1所示,该方法包括:
101、获得当前视频帧的大小,所述当前视频帧位于所述视频流的第一个视频帧之后。
举例来说,本发明实施例提供的视频流的帧类型检测装置确定当前视频帧的大小。该视频帧类型检测装置可以设置在网络设备或测试设备中。具体地,该视频帧类型检测装置接收视频流,该视频流可通过用户数据包协议(User Datagram Protocol,简称UDP)或传输控制协议(Transport Control Protocol,简称TCP)协议传输,还可以通过其它传输协议,如实时传输协议(Real-time Transport Protocol,简称RTP)、传输流(TransportStream,简称TS)、超文本传输协议(Hyptertext Transfer Protocol,简称HTTP)等传输。下面以视频流通过RTP传输协议为例进行说明。当视频流通过RTP传输时,视频流中每一视频帧包含至少一个RTP包。图1为RTP包的格式示意图。如图1所示,RTP包由RTP包头层和RTP净载组成,RTP包头层包含如标记(marker)位、时间戳、序列号等。
由于连续的视频帧中各RTP包的序列号递增,序列号的取值范围在0至65535之间(包括65535),每当该序列号递增超过65535时会重回0继续递增,因此可以通过接收到的RTP包的序列号判断是否有丢包以及丢失的RTP包的个数。如果两个连续接收到的RTP包的序列号中后一个的序列号比前一个的序列号大,则该两个连续接收到的RTP包之间丢失的RTP包的总个数V_lostPackets可通过公式(1)计算得到:
V_lostPackets=后一个的序列号-前一个的序列号-1 (1)
若后一个的序列号比前一个的序列号大1,则V_lostPackets=0,没有丢包。
如果两个连续接收到的RTP包的序列号中后一个的序列号不大于前一个的序列号,则该两个连续接收到的RTP包之间丢失的RTP包的总个数V_lostPackets可通过公式(2)计算得到:
V_lostPackets=后一个的序列号+65536-前一个的序列号-1 (2)
若后一个的序列号比前一个的序列号小65535,且时间戳相同,则V_lostPackets=0,没有丢包。
进一步地,在连续接收到的RTP包中,可通过RTP包头的marker位和/或时间戳将接收到的RTP包划分为不同的视频视频帧。在同一个视频帧中,该视频帧的最后一个RTP包头的marker位为1,其他RTP包的marker位为0,同时,该视频帧的所有RTP包头的时间戳相同,且与相邻视频帧不同。进一步地,在确定连续接收到的RTP包之间有丢包的情况下,还可以根据RTP包头中的时间戳判断连续接收到的RTP包之间是否有视频帧丢失,即一个视频帧的所有的RTP包均丢失,视频帧的丢失个数V_lostFrames可通过如下公式(3)计算:
其中,V_TSt为两个连续接收到的RTP包中后一个RTP包的时间戳,V_TSt-1为前一个RTP的时间戳,videoFrameRate为当前视频流的视频帧率,V_CR为RTP包的时钟频率(ClockRate)。
如果视频流是H.264,V_CR必须取值为90000。如果视频流是MPEG4,V_CR建议取值为90000,另外,该值也可通过下述两个方法得到:
1)如果有会话描述协议(Session Description Protocol,简称SDP),可以从SDP中获取得到;
2)如果没有SDP,且videoFrameRate已知,可以通过公式(4)计算得到:
V_CR=videoFrameRate·V_TSm (4)
另外,videoFrameRate为预知的信息或从预定位置中读取获得,其中,所述预定位置,包括预定文件,或者预定的存储位置。也可以通过两个连续接收到的视频帧的RTP包头的时间戳的差值计算得到,该两个连续接收到的视频帧中间必须没有出现整个视频帧丢失的情况,即通过公式(5)得到:
其中,V_TSm是两个连续的视频帧的RTP包头的时间戳的差值。
基于上述判断是否有丢失RTP包、丢失视频帧的方法,可以确定当前视频帧是否有丢包以及当前视频帧是否整帧丢失。
若确定所述当前视频帧未丢包,即接收到了所述当前视频帧中的所有RTP包,则确定接收到的所述当前视频帧中各RTP包的净载;将所述当前视频帧中各RTP包的净载累加,得到所述当前视频帧的大小。
具体地,由图1可知,RTP包的净载=RTP包的大小-RTP包头层的大小,其中RTP包的大小可由封装该RTP包的上一层协议信息中获得,RTP包头层的大小可在接收到该RTP包后通过解析包头层来确定。
若确定所述当前视频帧丢包且未整帧丢失,则获得所述当前视频帧中接收到的各RTP包的净载,将所述当前视频帧中接收到的各RTP包的净载累加,得到所述当前视频帧接收到的RTP包的总大小;
根据所有接收到的各RTP包中与所述当前视频帧中丢失的RTP包前相邻的RTP包和后相邻的RTP包,估计每个丢失的RTP包的净载和所述当前视频帧中丢失的RTP包的个数,根据每个丢失的RTP包的净载和所述当前视频帧中丢失的RTP包的个数得到所述当前视频帧丢失的RTP包的总大小;
将所述当前视频帧接收到的RTP包的总大小和丢失的RTP包的总大小相加,得到所述当前视频帧的大小。
其中,所述的每个丢失RTP包可为接收到的所述前相邻的RTP包和后相邻的RTP包之间丢失的RTP包。
具体地,每个丢失的RTP包的净载V_lostBytes可以根据所述前相邻的RTP的净载包和后相邻的RTP包的净载的平均值来估计,参照公式(6):
其中,V_receivedBytest为接收到的各RTP包中与丢失的RTP包后相邻的RTP包的净载,V_receivedBytest-1为接收到的各RTP包中与丢失的RTP包前相邻的RTP包的净载。如果连续丢包,即连续丢失的RTP包数目大于1,则估计每个丢失的RTP包的净载V_lostBytes相等。举例来说,若连续接收到序列号分别为3和5的RTP包,判断丢失了序列号为4的RTP包,则根据上述公式估计序列号为4的RTP包的净载为序列号分别为3和5的RTP包的净载的平均值。又举例来说,若连续接收到序列号分别为3和7的RTP包,判断丢失了序列号分别为4、5、6的RTP包,则根据上述公式估计序列号为4、5、6的RTP包各自的净载均为序列号为3和7的RTP包的净载的平均值。
另外,还可以根据丢失的RTP包之前接收到的多个RTP包的净载的平均值来估计每个丢失的RTP包的净载,如丢失的RTP包之前所有接收到的RTP包的净载的平均值,或丢失的RTP包之前滑动窗内接收到的RTP包的净载的平均值。
进一步地,当前视频帧丢包但未整帧丢失有如下五种情况。
第一种情况:根据连续接收到的两个RTP包的序列号判断该两个RTP包之间有丢包,且根据该两个RTP包的时间戳确定均属于当前视频帧,即根据所述前相邻的RTP包和后相邻的RTP包的时间戳确定所述前相邻的RTP包和后相邻的RTP包均属于所述当前视频帧。在此情况下,该两个RTP包之间所有丢失的RTP包分配给当前视频帧,具体地,根据公式(1)或(2)确定该两个RTP包之间丢失的RTP包的总个数V_lostPackets,确定所述当前视频帧中丢失的RTP包的个数等于V_lostPackets。
下面给出第一种情况的一个例子,即丢包例一。图2A为本发明实施例的丢包例一的示意图。如图2A所示,序列号(V_SN)为5的RTP包丢失,序列号为4和6的RTP包为连续接收到的RTP包,丢失的RTP包的总个数为1。当前视频帧(t_frame)被分配的RTP丢包数(V_lostPt_frame)为1。
第二种情况:根据连续接收到的两个RTP包的序列号判断该两个RTP包之间有丢包,根据该两个RTP包的时间戳确定前一RTP包属于当前视频帧的前一视频帧且后一RTP包属于当前视频帧且根据前一RTP包的marker位确定前一RTP包为所述前一视频帧的最后一个RTP包,即根据所述前相邻的RTP 包和后相邻的RTP包的时间戳和marker位确定所述前相邻的RTP包属于所述前一视频帧且后相邻的RTP包属于所述当前视频帧且所述前相邻的RTP包为所述前一视频帧的最后一个RTP包。在此情况下,该两个RTP包之间所有丢失的RTP包分配给当前视频帧,具体地,根据公式(1)或(2)获得该两个RTP包之间丢失的RTP包的总个数V_lostPackets,确定所述当前视频帧中丢失的RTP包的个数等于V_lostPackets。
下面给出第二种情况的一个例子,即丢包例二。图2B为本发明实施例的丢包例二的示意图。如图2B所示,序列号(V_SN)为3的RTP包丢失,序列号为2和4的RTP包为连续接收到的RTP包,序列号为2的RTP包是前一视频帧(t-1_frame)最后一个接收到的RTP包,且marker位(V_MB)为1,序列号为4的RTP包是当前视频帧(t_frame)第一个接收到的RTP包,丢失的RTP包的总个数为1。当前视频帧被分配的RTP丢包数(V_lostPt_frame)为1。
第三种情况:根据连续接收到的两个RTP包的序列号判断该两个RTP包之间有丢包,根据该两个RTP包的时间戳确定前一RTP包属于当前视频帧且后一RTP包属于与当前视频帧相邻的后一视频帧,且根据前一RTP包的marker位确定前一RTP包不是当前视频帧的最后一个RTP包,即根据所述前相邻的RTP包和后相邻的RTP包的时间戳和marker位确定所述前相邻的RTP包属于所述当前视频帧且后相邻的RTP包属于与所述当前视频帧相邻的后一视频帧且所述前相邻的RTP包不是所述当前视频帧的最后一个RTP包。在此情况下,先根据公式(1)或(2)获得该连续接收到的两个RTP包之间丢失的RTP包的总个数V_lostPackets,将V_lostPackets个RTP包平均地分配给当前视频帧和后一个视频帧,再将平均分配剩下的丢失的RTP包分配给当前视频帧,即当前视频帧中丢失的RTP包的个数为int(V_lostPackets/2)+V_lostPackets%2,其中,int表示取整,%表示取模运算,即:%2表示除以2的余数。
下面给出第三种情况的三个例子,即丢包例三、四、五。图2C-2E分别为本发明实施例的丢包例三、四、五的示意图。
如图2C所示,丢包例三:序列号为5的RTP包丢失,序列号为4和6的RTP包为连续接收到的RTP包,序列号为4的RTP包是当前视频帧(t_frame)最后一个接收到的RTP包且marker位(V_MB)不为1,序列号为6的RTP包是与当前视频帧相邻的后一视频帧(t+1_frame)第一个接收到的RTP包,丢失RTP包的总个数V_lostPackets为1。所以,当前视频帧被分配的RTP丢包数(V_lostP_t_frame)为int(1/2)+1%2=1,后一视频帧被分配的RTP丢包数(V_lostP_t+1_frame)为int(1/2)=0。
如图2D所示,丢包例四:序列号(V_SN)为5和6的RTP包丢失,序列号为4和7的RTP包为连续接收到的RTP包,序列号为4的RTP包是当前视频帧(t_frame)最后一个接收到的RTP包且marker位(V_MB)不为1,序列号为7的RTP包是与当前视频帧相邻的后一视频帧(t+1_frame)第一个接收到的RTP包,丢失的RTP包的总个数V_lostPackets为2。所以,当前视频帧(t_frame)被分配的RTP丢包数(V_lostP_t_frame)为int(2/2)+2%2=1,后一视频帧(t+1_frame)被分配的RTP丢包数(V_lostP_t+1_frame)为int(2/2)=1。
如图2E所示,丢包例五:序列号(V_SN)为4、5和6的RTP包丢失,序列号为3和7的RTP包为连续接收到的RTP包,序列号为3的RTP包是当前视频帧(t_frame)最后一个接收到的RTP包且marker位(V_MB)不为1,序列号为7的RTP包是与当前视频帧相邻的后一视频帧(t+1_frame)第一个接收到的RTP包,丢失RTP包的总个数V_lostPackets为3。所以,当前视频帧被分配的RTP丢包数(V_lostP_t_frame)为int(3/2)+3%2=2,后一视频帧被分配的RTP丢包数(V_lostP_t+1_frame)为int(3/2)=1。
第四种情况:根据连续接收到的两个RTP包的序列号判断该两个RTP包之间有丢包,根据该两个RTP包的时间戳确定前一RTP包所属视频帧与当前视频帧不连续、后一RTP包属于当前视频帧、且根据前一RTP包的marker位确定前一RTP包是所属视频帧的最后一个RTP包,即根据所述前相邻的RTP包和后相邻的RTP包的时间戳和marker位确定所述前相邻的RTP包所属视频帧与所述当前视频帧不连续且所述后相邻的RTP包属于所述当前视频帧且所述前相邻的RTP包为所属视频帧的最后一个RTP包。也就是说,在连续接收到的两个RTP包之间有整个视频视频帧丢失,在此种情况下,先根据公式(1)或(2)获得该两个RTP包之间丢失的RTP包的总个数V_lostPackets,以及根据公式(3)获得丢失的视频帧数V_lostFrames,再将丢失的RTP包平均分配给每个丢失的视频帧,最后将平均分配剩下的丢失的RTP包分配给当前视频帧,即当前视频帧中丢失的RTP包的个数为V_lostPackets%V_lostFrames。
下面给出第四种情况的2个例子,即丢包例六、七。图2F、2G分别为本发明实施例的丢包例六、七的示意图。
如图2F所示,丢包例六:序列号(V_SN)为3、4、5和6的RTP包丢失,序列号为2和7的RTP包为连续接收到的RTP包,且时间戳不连续,序列号为2的RTP包是接收到的前一视频帧(t-3_frame)的最后一个接收到的RTP包且marker位(V_MB)为1,序列号为7的RTP包是当前视频帧(t_frame)的第一个接收到的RTP包,丢失RTP包的总个数V_lostPackets为4。若根据公式(3)得到丢失的整个视频帧的帧数V_lostFrames为2,则每个丢失的视频帧,即前两视频帧(t-2_frame)和前一视频帧(t-1_frame)各自被分配的RTP丢包数(V_lostP_lost_frame)均为int(V_lostPackets/V_lostFrames)=int(4/2)=2,当前视频帧被分配的RTP丢包数(V_lostP_t_frame)为V_lostPackets%V_lostFrames=4%2=0。需要说明的是,由于当前视频帧之前有整帧丢失,因此,接收到的前一视频帧(t-3_frame)并非实际的前一视频帧(t-1_frame)。
如图2G所示,丢包例七:序列号(V_SN)为3、4、5、6和7的RTP包丢失,序列号为2和8的RTP包为连续接收到的RTP包,且时间戳不连续,序列号为2的RTP包是接收到的前一视频帧(t-3_frame)的最后一个接收到的RTP包且marker位(V_MB)为1,序列号为8的RTP包是当前视频帧(t_frame)的第一个接收到的RTP包,丢失的RTP包的总个数V_lostPackets为5。若根据公式(3)得到丢失的视频帧的帧数V_lostFrames为2,则每个丢失的视频帧,即前两视频帧(t-2_frame)和前一视频帧(t-1_frame)各自被分配的RTP丢包数(V_lostP_lost_frame)均为int(V_lostPackets/V_lostFrames)=int(5/2)=2,当前视频帧被分配的RTP丢包数(V_lostP_t_frame)为V_lostPackets%V_lostFrames=5%2=1。
第五种情况:根据连续接收到的两个RTP包的序列号判断该两个RTP包之间有丢包,根据该两个RTP包的时间戳确定前一RTP包属于当前视频帧、后一RTP包所属视频帧与当前视频帧不连续、且根据前一RTP包的marker位确定前一RTP包不是当前视频帧的最后一个RTP包,即根据所述前相邻的RTP包和后相邻的RTP包的时间戳和marker位确定前相邻的RTP包属于所述当前视频帧且后相邻的RTP包所属视频帧与当前视频帧不连续且所述前相邻的RTP包不是所述当前视频帧的最后一个RTP包。在此种情况下,先根据公式(3)获得丢失的视频帧的帧数V_lostFrames,先分配一个丢失的RTP包给当前视频帧,再将其余的丢失的RTP包平均分配给每个丢失的视频帧,平均分配剩下的丢失的RTP包分配给后一RTP包所属视频帧,即接收到的后一视频帧,相当于当前视频帧中丢失的RTP包的个数为1。
下面给出第五种情况的2个例子,即丢包例八、九。图2H、2I分别为本发明实施例的丢包例八、九的示意图。
如图2H所示,丢包例八:序列号(V_SN)为2、3、4、5和6的RTP包丢失,序列号为1和7的RTP包为连续接收到的RTP包,且时间戳不连续,序列号为1的RTP包是当前视频帧(t_frame)的最后一个接收到的RTP包,且marker位(V_MB)不为1,序列号为7的RTP包是接收到的后一视频帧(t+3_frame)的第一个接收到的RTP包,丢失的RTP包的总个数V_lostPackets为5。若根据公式(3)得到丢失的视频帧的帧数V_lostFrames为2,当前视频帧被分配的RTP丢包数(V_lostP_t_frame)为1,每个丢失的视频帧,即与当前视频帧相邻的后一视频帧(t+1_frame)和与后一视频帧相邻的后两视频帧(t+2_frame)各自被分配的RTP丢包数(V_lostP_lost_frame)均为int((V_lostPackets-1)/V_lostFrames)=int(4/2)=2,接收到的后一个视频帧被分配的RTP丢包数(V_lostP_t+3_frame)为(V_lostPackets-1)%V_lostFrames=4%2=0。需要说明的是,由于当前视频帧之后有整帧丢失,因此,接收到的后一视频帧(t+3_frame)并非实际上与当前视频帧相邻的后一视频帧(t+1_frame)。
如图2I所示,丢包例九:序列号(V_SN)为2、3、4、5、6和7的RTP包丢失,序列号为1和8的RTP包为连续接收到的RTP包,且时间戳不连续,序列号为1的RTP包是当前视频帧(t_frame)的最后一个接收到的RTP包,且marker位(V_MB)不为1,序列号为8的RTP包是接收到的后一视频帧(t+3_frame)的第一个接收到的RTP包,丢失的RTP包的总个数V_lostPackets为6。若根据公式(3)得到丢失的视频帧的帧数V_lostFrames为2,则当前视频帧被分配的RTP丢包数(V_lostP_t_frame)为1,每个丢失的整个视频帧,即与当前视频帧相邻的后一视频帧(t+1_frame)和与后一视频帧相邻的后两视频帧(t+2_frame)各自被分配的RTP丢包数(V_lostP_lost_frame)均为int((V_lostPackets-1)/V_lostFrames)=int(5/2)=2,接收到的后一个视频帧被分配的RTP丢包数(V_lostP_t+3_frame)为(V_lostPackets-1)%V_lostFrames=5%2=1。
另外,参照上述第四、五种情况,若确定所述当前视频帧整帧丢失,则根据所有接收到的各RTP包中与所述当前视频帧前相邻的RTP包和后相邻的RTP包估计每个丢失的RTP包的净载,根据视频帧率、RTP包的时钟频率和所述前相邻的RTP包和后相邻的RTP包的时间戳、序列号获得所述前相邻的RTP包和后相邻的RTP包所属视频帧之间丢失的整个视频的视频帧数V_lostFrames和丢失的RTP包的总个数V_lostPackets;
若根据所述前相邻的RTP包的marker位确定所述前相邻的RTP包为所述前相邻的RTP包所属视频帧的最后一个RTP包,则确定所述当前视频帧中RTP包的个数为int(V_lostPackets/V_lostFrames),否则确定所述当前视频帧中RTP包的个数为int((V_lostPackets-1)/V_lostFrames);
根据所述当前视频帧中RTP包的个数和每个丢失的RTP包的净载得到所述当前视频帧的大小。
进一步地,还可以参照上述方法获得除第一个视频帧之外各视频帧的大小。
102、根据当前视频帧的大小和与所述当前视频帧相邻的前一视频帧的大小,获得所述当前视频帧的变化特征值。
具体地,为了降低计算的复杂度,只考虑之前的一个视频帧,即前一视频帧时,可以将所述当前视频帧的大小和前一视频帧的大小的差值的绝对值,作为所述当前视频帧的变化特征值;此时,变化特征值相当于斜率,用公式表示如下:
V_FGt_frame=(abs)(t_frame_size-t-1_frame_size) (7)
其中,V_FGt_frame为当前视频帧的变化特征值,t_frame_size为当前视频帧的大小,t-1_frame_size为前一视频帧的大小,abs表示绝对值。
进一步地,还可以参照上述方法获得除第一视频帧之外各视频帧的变化特征值,也就是除第一视频帧之外的前一视频帧的变化特征值。
103、根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值。
具体地,103中可以根据视频帧率、所述当前视频帧与之前最近的一个I 帧的距离,获得所述当前视频帧的I帧阈值。这里,所述当前视频帧与之前最近的一个I帧的距离,也就是当前视频帧与之前最近一个I帧相差的视频帧数。换句话说,本发明实施例中所述的距离是一个视频帧与另外一个视频帧之间相差的视频帧数,举例来说,若与所述前一视频帧相邻的前两视频帧为之前最近一个I帧,则所述当前视频帧与之前最近的一个I帧的距离为2。需要说明的是,本发明实施例中的I帧指的是帧内编码帧。
进一步地,若所述前两视频帧为之前最近的一个I帧,即当前视频帧与之前最近一个I帧的距离为2,则确定所述当前视频帧的I帧阈值为所述之前最近一个I帧的大小与第一常数的乘积,所述第一常数的取值范围为(0,1],该(0,1]表示取值范围为大于零小于等于1。
这里的第一常数可以是个默认的固定值,比如2/3,也可以根据视频帧率和码率确定。具体地,可以将当前视频帧的大小作为码率,也可以将当前视频帧和之前至少一视频帧的大小的平均值作为码率。另外,也可将已检测出来的所有I帧的平均大小与第一常数的乘积作为所述当前视频帧的I帧阈值。
若所述前两视频帧不为之前最近的一个I帧,则判断所述当前视频帧与之前最近的一个I帧的距离是否大于所述视频帧率,若大于则将所述前一视频帧的I帧阈值和第一缩放因子的乘积确定为所述当前视频帧的I帧阈值,若不大于则将所述前一视频帧的I帧阈值和第二缩放因子的乘积确定为所述当前视频帧的I帧阈值;其中,所述第一缩放因子、第二缩放因子的取值范围为(0,1],所述第一缩放因子大于所述第二缩放因子。相应地,用算法表示如下:
其中,V_FDI为当前视频帧与之前最近的一个I帧的距离,videoFrameRate为所述视频流的视频帧率,V_IThresht_frame为当前视频帧的I帧阈值,V_IThresht-1_frame为前一视频帧的I帧阈值,ScaledFactor1为第一缩放因子,ScaledFactor2为第二缩放因子。举例来说,ScaledFactor1取0.995,ScaledFactor2 取0.985。
进一步地,还可以设置当V_FDI远大于videoFrameRate时的缩放因子,如设置V_FDI>2*videoFrameRate时的缩放因子为1,即V_IThresht_frame=V_IThresht-1_frame
或者,当V_FDI大于videoFrameRate时,V_IThresht_frame可以设置为不小于一个门限值,即:V_IThresht_frame=max(V_IThresht-1_frame*ScaledFactor1,MIN_VALUE),其中,MIN_VALUE为预设的一个门限值,如500,或者为根据码率、视频帧率得到的值,即可以自适应调整。
需要说明的是,若当前视频帧为所述视频流的第二个视频帧,则当前视频帧的前两视频帧不存在,则属于所述当前视频帧的前两视频帧不为之前最近的一个I帧的情况。
另外,若所述当前视频帧的前两视频帧不为之前最近的一个I帧,还可以将前一视频帧的I帧阈值乘以一个与视频帧率相关的常数的结果作为当前视频帧的I帧阈值。
进一步地,还可以参照上述方法获得除第一视频帧之外各视频帧的I帧阈值。
104、根据所述当前视频帧的变化特征值和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧的大小、前一视频帧的大小和与所述前一视频帧相邻的前两视频帧的大小判断所述前一视频帧是否为I帧。
具体地,若所述上一视频帧的大小与上上一视频帧的大小的比值或所述上一视频帧的大小与所述当前视频帧的大小的比值大于第二常数,且所述当前视频帧的变化特征值大于所述当前视频帧的I帧阈值,且所述上一视频帧的变化特征值大于所述当前视频帧的I帧阈值,则判断所述上一视频帧为I帧,否则判断所述上一视频帧不为I帧。
第二常数可以为一个默认的固定值,如1.5,优选地,所述第二常数根据码率、视频帧率和所述当前视频帧的位置确定,即可自适应调整。
需要说明的是,若所述当前视频帧为所述视频流的第二个视频帧,即前一视频帧为第一个视频帧,则判断所述前一视频帧为I帧。也就是说,第一个视频帧默认为I帧。
进一步地,判断所述前一视频帧为I帧之后还可以包括:
计算I帧的平均大小。
具体地,每当检测出一个I帧之后,更新I帧的平均大小。
进一步地,从当前视频帧为第二个视频帧到当前视频帧为最后一个视频帧,均使用上述方法判断当前视频帧的前一视频帧是否为I帧。进一步地,若所述当前视频帧为所述视频流的最后一个视频帧,则所述方法还包括:
若所述当前视频帧与所述I帧的平均大小的比值大于第三常数,则判断所述当前视频帧为I帧,否则判断所述当前视频帧不为I帧,所述第三常数大于0。
具体地,当前视频帧是否为最后一个视频帧可以通过是否接收到所述视频流的后续视频帧来判断,也可以通过视频帧结束指示来判断。第三常数可以为一个默认的固定值,如0.75,优选地,还可以根据码率、视频帧率和所述当前视频帧的位置确定,即可自适应调整。
进一步地,在101之前还可以包括:
获得所述第一个视频帧的大小;
确定第一个视频帧的变化特征值为所述第一个视频帧的大小与第四常数的乘积,所述第四常数的取值范围为(0,1]。
确定第一个视频帧的I帧阈值等于所述第一个视频帧的变化特征值。
具体地,由于是否第一个视频帧是以接收到的顺序来说,接收到的所述视频流的第一个视频帧即为第一个视频帧,因此,第一个视频帧不存在丢失整帧的情况,且接收到的第一个RTP包之前是否有丢包通常也不考虑,因此,可以参照101中未丢包和丢包中的第一、三、五种情况,确定第一个视频帧的大小。第四常数举例来说可以为2/3。需要进一步说明的是,所述的当前视频帧以及所述的前一视频帧具体指相邻的两个视频帧之间的先后顺序,并不局限于现实时间顺序上的当前视频帧和前一视频帧,上述方法适用于任意相邻两个视频帧的所述变化特征值的获得、所述I帧阈值的获得以及所述帧类型的判断。换句话说,也就是可以在任意时间点启动针对相对于所述的任意时间点之前的是两个相邻的视频帧或者之后的两个相邻视频帧或者在所述任意时间点的两个相邻的视频帧的相关处理步骤,即所述的所述变化特征值的获得、所述I帧阈值的获得以及所述帧类型的判断。
需要说明的是,本发明实施例也适用于所述视频流以其他IP协议传输的场景。
本发明实施例通过根据当前视频帧和前一视频帧的大小获得所述当前视频帧的变化特征值,根据视频帧率和所述当前视频帧的位置获得所述当前视频帧的I帧阈值,根据所述当前视频帧和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧、前一视频帧和前两视频帧的大小判断所述前一视频帧是否为I帧,提供了一套完整有效的检测帧类型的方法,并且使得在检测前一视频帧的帧类型时可以只考虑其之前的一个视频帧,即前两视频帧,解决了现有视频帧类型检测中基于之前的多个视频帧进行计算导致复杂度高、时延大的问题,且充分考虑了视频帧率的影响,使得检测结果更加准确。
图3为本发明实施例提供的又一种视频流的帧类型检测方法的流程示意图。如图3所示,该方法包括:
301、获得当前视频帧的大小,所述当前视频帧位于所述视频流的第一个视频帧之后。
301的具体实现参照上述实施例中的101。
302、根据当前视频帧的大小和之前至少两视频帧的大小,获得所述当前视频帧的变化特征值。
具体地,可以将所述当前视频帧的大小和之前至少两视频帧的大小的差值的均值的绝对值或将所述当前帧的大小和之前至少两视频帧的大小的差值的绝对值的均值,作为所述当前视频帧的变化特征值。
303、根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值。
303的具体实现参照上述实施例中的103。
304、根据所述当前视频帧的变化特征值和与所述当前视频帧相邻的前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧的大小和之前至少两视频帧的大小判断所述前一视频帧是否为I帧。
具体地,若所述前一视频帧的大小和与所述前一视频帧相邻的前两视频帧的大小的比值或所述前一视频帧的大小和所述当前视频帧的大小的比值大于第二常数,且所述当前视频帧的变化特征值大于所述当前视频帧的I帧阈值,且所述前一视频帧的变化特征值大于所述当前视频帧的I帧阈值,则判断所述前一视频帧为I帧,否则判断所述前一视频帧不为I帧;或,
若所述前一视频帧的大小与所述前一视频帧之前至少两视频帧的大小的均值的比值或所述前一视频帧的大小与所述当前视频帧的大小的比值大于第二常数,且所述当前视频帧的变化特征值大于所述当前视频帧的I帧阈值,且所述前一视频帧的变化特征值大于所述当前视频帧的I帧阈值,则判断所述前一视频帧为I帧,否则判断所述前一视频帧不为I帧。
第二常数可以为一个默认的固定值,如1.5,优选地,所述第二常数根据码率、视频帧率和所述当前视频帧的位置确定,即可自适应调整。
需要说明的是,若所述当前视频帧为开始所述视频流的帧类型检测后所所接收到的所述视频流中的第二个视频帧,即前一视频帧为第一个视频帧,则判断所述前一视频帧为I帧。也就是说,第一个视频帧默认为I帧。
进一步地,判断所述前一视频帧为I帧之后还可以包括:
计算I帧的平均大小。
具体地,每当检测出一个I帧之后,更新I帧的平均大小。
进一步地,从当前视频帧为第二个视频帧到当前视频帧为最后一个视频帧,均使用上述方法判断当前视频帧的前一视频帧是否为I帧。进一步地,若所述当前视频帧为所述视频流的最后一个视频帧,则所述方法还包括:
若所述当前视频帧与所述I帧的平均大小的比值大于第三常数,则判断所述当前视频帧为I帧,否则判断所述当前视频帧不为I帧,所述第三常数大于0。
具体地,当前视频帧是否为最后一个视频帧可以通过是否接收到所述视频流的后续视频帧来判断,也可以通过视频帧结束指示来判断。第三常数可以为一个默认的固定值,如0.75,优选地,还可以根据码率、视频帧率和所述当前视频帧的位置确定,即可自适应调整。
进一步地,在301之前还可以包括:
获得所述第一个视频帧的大小;
确定第一个视频帧的变化特征值为所述第一个视频帧的大小与第四常数的乘积,所述第四常数的取值范围为(0,1]。
确定第一个视频帧的I帧阈值等于所述第一个视频帧的变化特征值。
具体地,由于是否第一个视频帧是以接收到的顺序来说,接收到的所述视频流的第一个视频帧即为第一个视频帧,因此,第一个视频帧不存在丢失整帧的情况,且接收到的第一个RTP包之前是否有丢包通常也不考虑,因此,可以参照101中未丢包和丢包中的第一、三、五种情况,确定第一个视频帧的大小。第四常数举例来说可以为2/3。
本发明实施例通过根据当前视频帧和之前至少两视频帧的大小获得所述当前视频帧的变化特征值,根据视频帧率和所述当前视频帧的位置获得所述当前视频帧的I帧阈值,根据所述当前视频帧和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧和之前至少两视频帧的大小判断所述前一视频帧是否为I帧,提供了一套完整有效的检测帧类型的方法,并且充分考虑了视频帧率的影响,使得检测结果更加准确。
下面为实现本发明实施例提供的一种视频流的帧类型检测方法的伪代码示例,V_TNF表示总视频帧数包括丢失和接收到的视频帧数,例如:1表示为第一个视频帧,2表示为第二个视频帧。
图4为本发明实施例提供的一种帧大小检测方法的流程示意图。如图4所示,该方法包括:
401、若确定接收到的两个RTP包之间发生丢包,则获得各接收到的RTP包的净载,根据各接收到的RTP包的净载估计每个丢失的RTP包的净载。
具体地,本发明实施例提供的帧大小检测装置检测帧的大小。该帧大小检测装置可以设置在网络设备或测试设备中,接收媒体流,媒体流中包含视频帧和/或音频帧。本实施例可以用来检测视频帧或音频帧的大小。视频帧包含至少一个视频RTP包,音频帧包含至少一个音频RTP包,RTP包的格式如图1所示,可通过RTP包头层的负载类型(payload type)和/或封装RTP包的用户数据包协议(User Datagram Protocol,简称UDP)层的目的端口(destination port)区分视频RTP包和音频RTP包。
具体地,由图1可知,RTP包的净载=RTP包的大小-RTP包头层的大小,其中RTP包的大小可由封装该RTP包的上一层协议信息(即UDP层)中获得,RTP包头层的大小可在接收到该RTP包后通过解析包头层来确定。
具体地,每个丢失的RTP包的净载V_lostBytes可以根据所述前相邻的RTP包和后相邻的RTP包的净载的平均值来估计,参照公式(6)。另外,还可以根据丢失的RTP包之前接收到的多个RTP包的净载的平均值来估计每个丢失的RTP包的净载,如丢失的RTP包之前所有接收到的RTP包的净载的平均值,或丢失的RTP包之前滑动窗内接收到的RTP包的净载的平均值。
402、根据所述两个RTP包的序列号,获得所述两个RTP包之间丢失的RTP包的总个数V_lostPackets。
具体地,可以参照公式(1)或(2)获得V_lostPackets。
403、根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数。
具体地,连续接收到的两个RTP包之间发生丢包,有如下五种情况。
第一种情况:根据所述两个RTP包的时间戳确定所述两个RTP包属于同一帧,则确定该两个RTP包所属帧丢包但未整帧丢失,且该两个RTP包所属帧丢失的RTP包的个数等于丢失的RTP包的总个数V_lostPackets。具体参照图2A。
第二种情况:根据所述两个RTP包的时间戳和标记位确定两个RTP包分别属于两个连续的帧且前一RTP包为所属帧的最后一个RTP包,则确定后一RTP包所属帧丢包但未整帧丢失,且该后一RTP包所属帧丢失的RTP包的个数等于丢失的RTP包的总个数V_lostPackets。具体参照图2B。
第三种情况:根据所述两个RTP包的时间戳和标记位确定所述两个RTP包分别属于两个连续的帧且前一RTP包不是所属帧的最后一个RTP包,则确定所述前一RTP包所属帧和前一RTP包所属帧均丢包但未整帧丢失,且前一RTP包所属帧中丢失的RTP包的个数为int(V_lostPackets/2)+V_lostPackets%2,后一RTP包所属帧中丢失的RTP包的个数为int(V_lostPackets/2)。具体参照图2C-2E。
第四种情况:根据所述两个RTP包的时间戳和标记位确定所述两个RTP包属于不同的帧且所属帧不连续、前一RTP包为所属帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述两个RTP包的时间戳获得所述两个RTP包所属帧之间丢失的整帧数V_lostFrames;确定所述两个RTP包所属帧之间的V_lostFrames个帧丢包且整帧丢失,后一个RTP包所属帧丢包但未整帧丢失,且确定各丢失的整帧中丢失的RTP包的个数为int(V_lostPackets/V_lostFrames),后一RTP包所属帧丢失的RTP包的个数为V_lostPackets%V_lostFrames。具体参照图2F、2G。
第五种情况:根据所述两个RTP包的时间戳和标记位确定所述两个RTP包属于不同的帧且所属帧不连续、前一RTP包不为所属帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述两个RTP包的时间戳获得所述两个RTP包所属帧之间丢失的整帧数V_lostFrames;确定所述两个RTP包所属帧之间的V_lostFrames个帧丢包且整帧丢失,两个RTP包所属帧均丢包但未整帧丢失,且确定所述前一RTP包所属帧中丢失的RTP包的个数为1,各丢失的整帧中丢失的RTP包的个数为int((V_lostPackets-1)/V_lostFrames),后一RTP包所属帧丢失的RTP包的个数为(V_lostPackets-1)%V_lostFrames。具体参照图2H、2I。
403的具体实现可以参照本发明实施例提供的一种帧类型检测方法中的101。
404、根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载,得到丢包的各帧的大小。
具体地,对于有丢包但未整帧丢失的帧,根据该帧中丢失的RTP包的个数和每个丢失的RTP包的净载,得到该帧丢失的RTP包的总大小;同时,获得该帧中接收到的各RTP包的净载,将接收到的各RTP包的净载累加,得到该帧接收到的RTP包的总大小;将该帧丢失的RTP包的总大小和接收到的RTP包的总大小相加,得到该帧的大小。
对于整帧丢失的帧,则直接根据该帧中丢失的RTP包的个数和每个丢失的RTP包的净载,确定该帧的大小。
本发明实施例通过若确定接收到的两个RTP包之间发生丢包,则根据各接收到的RTP包的净载估计每个丢失的RTP包的净载,并根据所述两个RTP包的序列号获得所述两个RTP包之间丢失的RTP包的总个数,然后根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数,从而根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载得到丢包的各帧的大小,提供一种有效的检测有丢包的帧的大小的解决方案。
本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:ROM、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
图5为本发明实施例提供的一种视频流的帧类型检测装置的结构示意图。如图5所示,该装置包括:
帧大小获得模块51,用于获得当前视频帧的大小,所述当前视频帧位于所述视频流的第一个视频帧之后;
特征提取模块52,用于根据当前视频帧的大小和与所述当前视频帧相邻的前一视频帧的大小,获得所述当前视频帧的变化特征值;
阈值获得模块53,用于根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值;
类型判断模块54,用于根据所述当前视频帧的变化特征值和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧的大小、前一视频帧的大小和与所述前一视频帧相邻的前两视频帧的大小判断所述前一视频帧是否为I帧。
可选地,帧大小获得模块51具体用于:
若确定所述当前视频帧未丢包,则获得所述当前视频帧中各RTP包的的净载;
将所述当前视频帧中各RTP包的净载累加,得到所述当前视频帧的大小。
可选地,帧大小获得模块51具体包括:
接收大小获得单元,用于若确定所述当前视频帧丢包且未整帧丢失,则获得所述当前视频帧中接收到的各RTP包的净载,将所述当前视频帧中接收到的各RTP包的净载累加,得到所述当前视频帧接收到的RTP包的总大小;
丢失大小获得单元,用于根据所有接收到的各RTP包中与所述当前视频帧中丢失的RTP包前相邻的RTP包和后相邻的RTP包,估计每个丢失的RTP包的净载和所述当前视频帧中丢失的RTP包的个数,根据每个丢失的RTP包的净载和所述当前视频帧中丢失的RTP包的个数得到所述当前视频帧丢失的RTP包的总大小;
帧大小获得单元,用于将所述当前视频帧的接收到的RTP包的总大小和丢失的RTP包的总大小相加,得到所述当前视频帧的大小。
进一步地,所述丢失大小获得单元具体用于:
获得所述前相邻的RTP包的净载和后相邻的RTP包的净载;
根据所述前相邻的RTP包的净载和后相邻的RTP包的净载的平均值估计每个丢失的RTP包的净载。
进一步地,所述丢失大小获得单元具体还用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳确定所述前相邻的RTP包和后相邻的RTP包均属于所述当前视频帧,或,若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包属于所述前一视频帧且后相邻的RTP包属于所述当前视频帧且所述前相邻的RTP包为所述前一视频帧的最后一个RTP包,则根据所述前相邻的RTP包和后相邻的RTP包的序列号获得所述前相邻的RTP包和后相邻的RTP包之间丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为V_lostPackets。
可选地,所述丢失大小获得单元具体还用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包属于所述当前视频帧且后相邻的RTP包属于与所述当前视频帧相邻的后一视频帧且所述前相邻的RTP包不是所述当前视频帧的最后一个RTP包,则根据所述前相邻的RTP包和后相邻的RTP包的序列号获得所述前相邻的RTP包和后相邻的RTP包之间丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为int(V_lostPackets/2)+V_lostPackets%2。
可选地,所述丢失大小获得单元具体还用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包所属视频帧与所述当前视频帧不连续且所述后相邻的RTP包属于所述当前视频帧且所述前相邻的RTP包为所属视频帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述前相邻的RTP包和后相邻的RTP包的序列号、时间戳获得所述前相邻的RTP包和后相邻的RTP包之间丢失的视频帧的帧数V_lostFrames和丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为V_lostPackets%V_lostFrames。
可选地,所述丢失大小获得单元具体还用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定前相邻的RTP包属于所述当前视频帧且后相邻的RTP包所属视频帧与所述当前视频帧不连续且所述前相邻的RTP包不是所述当前视频帧的最后一个RTP包,则确定所述当前视频帧中丢失的RTP包的个数为1。
可选地,帧大小获得模块54具体用于:
若确定所述当前视频帧整帧丢失,则根据所有接收到的各RTP包中与所述当前视频帧前相邻的RTP包和后相邻的RTP包估计每个丢失的RTP包的净载,根据视频帧率、RTP包的时钟频率和所述前相邻的RTP包和后相邻的RTP包的时间戳、序列号获得所述前相邻的RTP包和后相邻的RTP包所属视频帧之间丢失的视频帧的帧数V_lostFrames和丢失的RTP包的总个数V_lostPackets;
若根据所述前相邻的RTP包的标记位确定所述前相邻的RTP包为所述前相邻的RTP包所属视频帧的最后一个RTP包,则确定所述当前视频帧中RTP包的个数为int(V_lostPackets/V_lostFrames),否则确定所述当前视频帧中RTP包的个数为int((V_lostPackets-1)/V_lostFrames);
根据所述当前视频帧中RTP包的个数和每个丢失的RTP包的净载确定所述当前视频帧的大小。
进一步地,特征提取模块52具体用于:
将所述当前视频帧的大小和前一视频帧的大小的差值的绝对值,作为所述当前视频帧的变化特征值。
进一步地,阈值获得模块53具体用于:
根据视频帧率、所述当前视频帧与之前最近的一个I帧的距离,获得所述当前视频帧的I帧阈值。
进一步地,阈值获得模块53具体用于:
若所述前两视频帧为之前最近的一个I帧,则确定所述当前视频帧的I帧阈值为所述之前最近一个I帧的大小与第一常数的乘积,所述第一常数的取值范围为(0,1]。
可选地,阈值获得模块53具体用于:
若所述前两视频帧不为之前最近的一个I帧,则判断所述当前视频帧与之前最近的一个I帧的距离是否大于所述视频帧率,若大于则将所述前一视频帧的I帧阈值和第一缩放因子的乘积确定为所述当前视频帧的I帧阈值,若不大于则将所述前一视频帧的I帧阈值和第二缩放因子的乘积确定为所述当前视频帧的I帧阈值;其中,所述第一缩放因子、第二缩放因子的取值范围为(0,1],所述第一缩放因子大于所述第二缩放因子。
进一步地,类型判断模块54具体用于:
若所述前一视频帧的大小与前两视频帧的大小的比值或所述前一视频帧的大小与所述当前视频帧的大小的比值大于第二常数,且所述当前视频帧的变化特征值大于所述当前视频帧的I帧阈值,且所述前一视频帧的变化特征值大于所述当前视频帧的I帧阈值,则判断所述前一视频帧为I帧,否则判断所述前一视频帧不为I帧。
进一步地,类型判断模块54具体用于:
若所述当前视频帧为第二个视频帧,则判断所述前一视频帧为I帧。
优选地,所述第二常数根据码率、帧率和所述当前视频帧的位置确定。
进一步地,所述装置还包括:
均值计算模块,用于在类型判断模块54判断所述前一视频帧为I帧之后,计算I帧的平均大小。
进一步地,若所述当前视频帧为所述视频流的最后一个视频帧,类型判断模块54还用于:
若所述当前视频帧与所述I帧的平均大小的比值大于第三常数,则判断所述当前视频帧为I帧,否则判断所述当前视频帧不为I帧,所述第三常数大于0。
进一步地,帧大小获得模块51还用于:获得所述第一个视频帧的大小;
特征提取模块52还用于:确定第一个视频帧的变化特征值为所述第一个视频帧的大小与第四常数的乘积,所述第四常数的取值范围为(0,1];
阈值获得模块53还用于:确定第一个视频帧的I帧阈值等于所述第一个视频帧的变化特征值。
本实施例的具体实现参照本发明实施例提供的一种视频帧类型检测方法。本发明实施例通过根据当前视频帧和前一视频帧的大小获得所述当前视频帧的变化特征值,根据视频帧率和所述当前视频帧的位置获得所述当前视频帧的I帧阈值,根据所述当前视频帧和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧、前一视频帧和前两视频帧的大小判断所述前一视频帧是否为I帧,提供了一套完整有效的检测帧类型的方法,并且使得在检测前一视频帧的帧类型时可以只考虑其之前的一个视频帧,即前两视频帧,解决了现有视频帧类型检测中基于之前的多个视频帧进行计算导致复杂度高、时延大的问题,且充分考虑了视频帧率的影响,使得检测结果更加准确。
图6为本发明实施例提供的又一种视频流的帧类型检测装置的结构示意图。如图6所示,该装置包括:
帧大小获得模块61,用于获得当前视频帧的大小,所述当前视频帧位于所述视频流的第一个视频帧之后;
特征提取模块62,用于根据当前视频帧的大小和之前至少两视频帧的大小,获得所述当前视频帧的变化特征值;
阈值获得模块63,用于根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值;
类型判断模块64,用于根据所述当前视频帧的变化特征值和与所述当前视频帧相邻的前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧的大小和之前至少两视频帧的大小判断所述前一视频帧是否为I帧。
可选地,帧大小获得模块61具体用于:
若确定所述当前视频帧未丢包,则获得所述当前视频帧中各RTP包的净载;
将所述当前视频帧中各RTP包的净载累加,得到所述当前视频帧的大小。
可选地,帧大小获得模块61具体包括:
接收大小获得单元,用于若确定所述当前视频帧丢包且未整帧丢失,则获得所述当前视频帧中接收到的各RTP包的净载,将所述当前视频帧中接收到的各RTP包的净载累加,得到所述当前视频帧接收到的RTP包的总大小;
丢失大小获得单元,用于根据所有接收到的各RTP包中与所述当前视频帧中丢失的RTP包前相邻的RTP包和后相邻的RTP包,估计每个丢失的RTP包的净载和所述当前视频帧中丢失的RTP包的个数,根据每个丢失的RTP包的净载和所述当前视频帧中丢失的RTP包的个数得到所述当前视频帧丢失的RTP包的总大小;
帧大小获得单元,用于将所述当前视频帧的接收到的RTP包的总大小和丢失的RTP包的总大小相加,得到所述当前视频帧的大小。
进一步地,所述丢失大小获得单元具体用于:
获得所述前相邻的RTP包的净载和后相邻的RTP包的净载;
根据所述前相邻的RTP包的净载和后相邻的RTP包的净载的平均值估计每个丢失的RTP包的净载。
可选地,所述丢失大小获得单元具体还用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳确定所述前相邻的RTP包和后相邻的RTP包均属于所述当前视频帧,或,若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包属于所述前一视频帧且后相邻的RTP包属于所述当前视频帧且所述前相邻的RTP包为所述前一视频帧的最后一个RTP包,则根据所述前相邻的RTP包和后相邻的RTP包的序列号获得所述前相邻的RTP包和后相邻的RTP包之间丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为V_lostPackets。
可选地,所述丢失大小获得单元具体还用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包属于所述当前视频帧且后相邻的RTP包属于与所述当前视频帧相邻的后一视频帧且所述前相邻的RTP包不是所述当前视频帧的最后一个RTP包,则根据所述前相邻的RTP包和后相邻的RTP包的序列号获得所述前相邻的RTP包和后相邻的RTP包之间丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为int(V_lostPackets/2)+V_lostPackets%2。
可选地,所述丢失大小获得单元具体还用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包所属视频帧与所述当前视频帧不连续且所述后相邻的RTP包属于所述当前视频帧且所述前相邻的RTP包为所属视频帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述前相邻的RTP包和后相邻的RTP包的序列号、时间戳获得所述前相邻的RTP包和后相邻的RTP包之间丢失的视频帧的帧数V_lostFrames和丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为V_lostPackets%V_lostFrames。
可选地,所述丢失大小获得单元具体还用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定前相邻的RTP包属于所述当前视频帧且后相邻的RTP包所属视频帧与所述当前视频帧不连续且所述前相邻的RTP包不是所述当前视频帧的最后一个RTP包,则确定所述当前视频帧中丢失的RTP包的个数为1。
可选地,帧大小获得模块61具体用于:
若确定所述当前视频帧整帧丢失,则根据所有接收到的各RTP包中与所述当前视频帧前相邻的RTP包和后相邻的RTP包估计每个丢失的RTP包的净载,根据视频帧率、RTP包的时钟频率和所述前相邻的RTP包和后相邻的RTP包的时间戳、序列号获得所述前相邻的RTP包和后相邻的RTP包所属视频帧之间丢失的视频帧的帧数V_lostFrames和丢失的RTP包的总个数V_lostPackets;
若根据所述前相邻的RTP包的标记位确定所述前相邻的RTP包为所述前相邻的RTP包所属视频帧的最后一个RTP包,则确定所述当前视频帧中RTP包的个数为int(V_lostPackets/V_lostFrames),否则确定所述当前视频帧中RTP包的个数为int((V_lostPackets-1)/V_lostFrames);
根据所述当前视频帧中RTP包的个数和每个丢失的RTP包的净载得到所述当前视频帧的大小。
进一步地,特征提取模块62具体用于:
将所述当前视频帧的大小和之前至少两视频帧的大小的差值的均值的绝对值或将所述当前帧的大小和之前至少两视频帧的大小的差值的绝对值的均值,作为所述当前视频帧的变化特征值。
进一步地,阈值获得模块63具体用于:
根据视频帧率、所述当前视频帧与之前最近的一个I帧的距离,获得所述当前视频帧的I帧阈值。
可选地,阈值获得模块63具体用于:
若与所述前一视频帧相邻的前两视频帧为之前最近的一个I帧,则确定所述当前视频帧的I帧阈值为所述之前最近一个I帧的大小与第一常数的乘积,所述第一常数的取值范围为(0,1]。
可选地,阈值获得模块63具体用于:
若与所述前一视频帧相邻的前两视频帧不为之前最近的一个I帧,则判断所述当前视频帧与之前最近的一个I帧的距离是否大于所述视频帧率,若大于则将所述前一视频帧的I帧阈值和第一缩放因子的乘积确定为所述当前视频帧的I帧阈值,若不大于则将所述前一视频帧的I帧阈值和第二缩放因子的乘积确定为所述当前视频帧的I帧阈值;其中,所述第一缩放因子、第二缩放因子的取值范围为(0,1],所述第一缩放因子大于所述第二缩放因子。
进一步地,类型判断模块64具体用于:
若所述前一视频帧的大小与前两视频帧的大小的比值或所述前一视频帧的大小与所述当前视频帧的大小的比值大于第二常数,且所述当前视频帧的变化特征值大于所述当前视频帧的I帧阈值,且所述前一视频帧的变化特征值大于所述当前视频帧的I帧阈值,则判断所述前一视频帧为I帧,否则判断所述前一视频帧不为I帧;或,
若所述前一视频帧的大小与所述前一视频帧之前至少两视频帧的大小的均值的比值或所述前一视频帧的大小与所述当前视频帧的大小的比值大于第二常数,且所述当前视频帧的变化特征值大于所述当前视频帧的I帧阈值,且所述前一视频帧的变化特征值大于所述当前视频帧的I帧阈值,则判断所述前一视频帧为I帧,否则判断所述前一视频帧不为I帧。
进一步地,类型判断模块64具体还用于:
若所述当前视频帧为所述视频流的第二个视频帧,则判断所述前一视频帧为I帧。
优选地,所述第二常数根据码率、视频帧率和所述当前视频帧的位置确定。
进一步地,所述装置还包括:
均值计算模块,用于在类型判断模块64判断所述前一视频帧为I帧之后,计算I帧的平均大小。
进一步地,若所述当前视频帧为所述视频流的最后一个视频帧,类型判断模块64还用于:
若所述当前视频帧与所述I帧的平均大小的比值大于第三常数,则判断所述当前视频帧为I帧,否则判断所述当前视频帧不为I帧,所述第三常数大于0。
可选地,帧大小获得模块61还用于:获得所述第一个视频帧的大小;
特征提取模块62还用于:确定第一个视频帧的变化特征值为所述第一个视频帧的大小与第四常数的乘积,所述第四常数的取值范围为(0,1];
阈值获得模块63还用于:确定第一个视频帧的I帧阈值等于所述第一个视频帧的变化特征值。
本发明实施例通过根据当前视频帧和之前至少两视频帧的大小获得所述当前视频帧的变化特征值,根据视频帧率和所述当前视频帧的位置获得所述当前视频帧的I帧阈值,根据所述当前视频帧和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧和之前至少两视频帧的大小判断所述前一视频帧是否为I帧,提供了一套完整有效的检测帧类型的方法,并且充分考虑了视频帧率的影响,使得检测结果更加准确。
图7为本发明实施例提供的一种帧大小检测装置的结构示意图。如图7所示,该装置包括:
净载估计模块71,用于若确定接收到的两个RTP包之间发生丢包,则获得各接收到的RTP包的净载,根据各接收到的RTP包的净载估计每个丢失的RTP包的净载;
总丢失数获得模块72,用于根据所述两个RTP包的序列号,获得所述两个RTP包之间丢失的RTP包的总个数V_lostPackets;
各丢失数估计模块73,用于根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数;
帧大小检测模块74,用于根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载,得到丢包的各帧的大小。
进一步地,净载估计模块71具体用于:
根据所述两个RTP包的净载的平均值估计每个丢失的RTP包的净载;或
根据丢失的RTP包之前接收到的多个RTP包的净载的平均值估计每个丢失的RTP包的净载。
进一步地,各丢失数估计模块73具体用于:
若根据所述两个RTP包的时间戳确定所述两个RTP包属于同一帧,或,若根据所述两个RTP包的时间戳和标记位确定两个RTP包分别属于两个连续的帧且前一RTP包为所属帧的最后一个RTP包,则确定后一RTP包所属帧丢失的RTP包的个数等于丢失的RTP包的总个数V_lostPackets。
可选地,各丢失数估计模块73具体用于:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包分别属于两个连续的帧且前一RTP包不是所属帧的最后一个RTP包,则确定所述前一RTP包所属帧中丢失的RTP包的个数为int(V_lostPackets/2)+V_lostPackets%2,后一RTP包所属帧中丢失的RTP包的个数为int(V_lostPackets/2)。
可选地,各丢失数估计模块73具体用于:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包属于不同的帧且所属帧不连续以及前一RTP包为所属帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述两个RTP包的时间戳确定所述两个RTP包所属帧之间丢失的整帧数V_lostFrames;
确定各丢失的整帧中丢失的RTP包的个数为int(V_lostPackets/V_lostFrames),后一RTP包所属帧丢失的RTP包的个数为V_lostPackets%V_lostFrames。
可选地,各丢失数估计模块73具体用于:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包属于不同的帧且所属帧不连续以及前一RTP包不为所属帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述两个RTP包的时间戳确定所述两个RTP包所属帧之间丢失的整帧数V_lostFrames;
确定所述前一RTP包所属帧中丢失的RTP包的个数为1,各丢失的整帧中丢失的RTP包的个数为int((V_lostPackets-1)/V_lostFrames),后一RTP包所属帧丢失的RTP包的个数为(V_lostPackets-1)%V_lostFrames。
本实施例的具体实现参照本发明实施例提供的一种帧大小检测方法。本发明实施例通过若确定接收到的两个RTP包之间发生丢包,则根据各接收到的RTP包的净载估计每个丢失的RTP包的净载,并根据所述两个RTP包的序列号获得所述两个RTP包之间丢失的RTP包的总个数,然后根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数,从而根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载得到丢包的各帧的大小,提供一种有效的检测有丢包的帧的大小的解决方案。
图8为本发明实施例提供的另一种视频流的帧类型检测装置的结构示意图。如图8所示,该装置800包括:
存储器81,用于存储指令;
处理器82,与所述存储器耦合,处理器82被配置为执行存储在存储器81中的指令,其中,处理器82被配置为用于:
获得当前视频帧的大小,所述当前视频帧位于所述视频流的第一个视频帧之后;
根据当前视频帧的大小和与所述当前视频帧相邻的前一视频帧的大小,获得所述当前视频帧的变化特征值;
根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值;
根据所述当前视频帧的变化特征值和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧的大小、前一视频帧的大小和与所述前一视频帧相邻的前两视频帧的大小判断所述前一视频帧是否为I帧。
可选地,处理器82被配置为具体用于:
若确定所述当前视频帧未丢包,则获得所述当前视频帧中各RTP包的的净载;
将所述当前视频帧中各RTP包的净载累加,得到所述当前视频帧的大小。
可选地,处理器82被配置为具体用于:
若确定所述当前视频帧丢包且未整帧丢失,则获得所述当前视频帧中接收到的各RTP包的净载,将所述当前视频帧中接收到的各RTP包的净载累加,得到所述当前视频帧接收到的RTP包的总大小;
根据所有接收到的各RTP包中与所述当前视频帧中丢失的RTP包前相邻的RTP包和后相邻的RTP包,估计每个丢失的RTP包的净载和所述当前视频帧中丢失的RTP包的个数,根据每个丢失的RTP包的净载和所述当前视频帧中丢失的RTP包的个数得到所述当前视频帧丢失的RTP包的总大小;
将所述当前视频帧的接收到的RTP包的总大小和丢失的RTP包的总大小相加,得到所述当前视频帧的大小。
进一步地,处理器82被配置为具体用于:
获得所有接收到的各RTP包中与所述当前视频帧中丢失的RTP包前相邻的RTP包的净载和后相邻的RTP包的净载;
根据所述前相邻的RTP包的净载和后相邻的RTP包的净载的平均值估计每个丢失的RTP包的净载。
进一步地,处理器82被配置为还具体用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳确定所述前相邻的RTP包和后相邻的RTP包均属于所述当前视频帧,或,若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包属于所述前一视频帧且后相邻的RTP包属于所述当前视频帧且所述前相邻的RTP 包为所述前一视频帧的最后一个RTP包,则根据所述前相邻的RTP包和后相邻的RTP包的序列号获得所述前相邻的RTP包和后相邻的RTP包之间丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为V_lostPackets。
可选地,处理器82被配置为还具体用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包属于所述当前视频帧且后相邻的RTP包属于与所述当前视频帧相邻的后一视频帧且所述前相邻的RTP包不是所述当前视频帧的最后一个RTP包,则根据所述前相邻的RTP包和后相邻的RTP包的序列号获得所述前相邻的RTP包和后相邻的RTP包之间丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为int(V_lostPackets/2)+V_lostPackets%2。
可选地,处理器82被配置为还具体用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包所属视频帧与所述当前视频帧不连续且所述后相邻的RTP包属于所述当前视频帧且所述前相邻的RTP包为所属视频帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述前相邻的RTP包和后相邻的RTP包的序列号、时间戳获得所述前相邻的RTP包和后相邻的RTP包之间丢失的视频帧的帧数V_lostFrames和丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为V_lostPackets%V_lostFrames。
可选地,处理器82被配置为还具体用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定前相邻的RTP包属于所述当前视频帧且后相邻的RTP包所属视频帧与所述当前视频帧不连续且所述前相邻的RTP包不是所述当前视频帧的最后一个RTP包,则确定所述当前视频帧中丢失的RTP包的个数为1。
可选地,处理器82被配置为具体用于:
若确定所述当前视频帧整帧丢失,则根据所有接收到的各RTP包中与所述当前视频帧前相邻的RTP包和后相邻的RTP包估计每个丢失的RTP包的净载,根据视频帧率、RTP包的时钟频率和所述前相邻的RTP包和后相邻的RTP包的时间戳、序列号获得所述前相邻的RTP包和后相邻的RTP包所属视频帧之间丢失的视频帧的帧数V_lostFrames和丢失的RTP包的总个数V_lostPackets;
若根据所述前相邻的RTP包的标记位确定所述前相邻的RTP包为所述前相邻的RTP包所属视频帧的最后一个RTP包,则确定所述当前视频帧中RTP包的个数为int(V_lostPackets/V_lostFrames),否则确定所述当前视频帧中RTP包的个数为int((V_lostPackets-1)/V_lostFrames);
根据所述当前视频帧中RTP包的个数和每个丢失的RTP包的净载确定所述当前视频帧的大小。
进一步地,处理器82被配置为还具体用于:
将所述当前视频帧的大小和前一视频帧的大小的差值的绝对值,作为所述当前视频帧的变化特征值。
进一步地,处理器82被配置为还具体用于:
根据视频帧率、所述当前视频帧与之前最近的一个I帧的距离,获得所述当前视频帧的I帧阈值。
进一步地,处理器82被配置为具体用于:
若所述前两视频帧为之前最近的一个I帧,则确定所述当前视频帧的I帧阈值为所述之前最近一个I帧的大小与第一常数的乘积,所述第一常数的取值范围为(0,1]。
可选地,处理器82被配置为具体用于:
若所述前两视频帧不为之前最近的一个I帧,则判断所述当前视频帧与之前最近的一个I帧的距离是否大于所述视频帧率,若大于则将所述前一视频帧的I帧阈值和第一缩放因子的乘积确定为所述当前视频帧的I帧阈值,若不大于则将所述前一视频帧的I帧阈值和第二缩放因子的乘积确定为所述当前视频帧的I帧阈值;其中,所述第一缩放因子、第二缩放因子的取值范围为(0,1],所述第一缩放因子大于所述第二缩放因子。
进一步地,处理器82被配置为还具体用于:
若所述前一视频帧的大小与前两视频帧的大小的比值或所述前一视频帧的大小与所述当前视频帧的大小的比值大于第二常数,且所述当前视频帧的变化特征值大于所述当前视频帧的I帧阈值,且所述前一视频帧的变化特征值大于所述当前视频帧的I帧阈值,则判断所述前一视频帧为I帧,否则判断所述前一视频帧不为I帧。
进一步地,处理器82被配置为具体用于:
若所述当前视频帧为第二个视频帧,则判断所述前一视频帧为I帧。
优选地,所述第二常数根据码率、帧率和所述当前视频帧的位置确定。
进一步地,处理器82被配置为还用于:
在判断所述前一视频帧为I帧之后,计算I帧的平均大小。
进一步地,若所述当前视频帧为所述视频流的最后一个视频帧,处理器82被配置为还用于:
若所述当前视频帧与所述I帧的平均大小的比值大于第三常数,则判断所述当前视频帧为I帧,否则判断所述当前视频帧不为I帧,所述第三常数大于0。
进一步地,处理器82被配置为还用于:获得所述第一个视频帧的大小;确定第一个视频帧的变化特征值为所述第一个视频帧的大小与第四常数的乘积,所述第四常数的取值范围为(0,1];确定第一个视频帧的I帧阈值等于所述第一个视频帧的变化特征值。
本实施例的具体实现参照本发明实施例提供的一种视频帧类型检测方法。本发明实施例通过根据当前视频帧和前一视频帧的大小获得所述当前视频帧的变化特征值,根据视频帧率和所述当前视频帧的位置获得所述当前视频帧的I帧阈值,根据所述当前视频帧和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧、前一视频帧和前两视频帧的大小判断所述前一视频帧是否为I帧,提供了一套完整有效的检测帧类型的方法,并且使得在检测前一视频帧的帧类型时可以只考虑其之前的一个视频帧,即前两视频帧,解决了现有视频帧类型检测中基于之前的多个视频帧进行计算导致复杂度高、时延大的问题,且充分考虑了视频帧率的影响,使得检测结果更加准确。
图9为本发明实施例提供的再一种视频流的帧类型检测装置的结构示意图。如图9所示,该装置900包括:
存储器91,用于存储指令;
处理器92,与所述存储器耦合,处理器92被配置为执行存储在存储器91中的指令,其中,处理器92被配置为用于:
获得当前视频帧的大小,所述当前视频帧位于所述视频流的第一个视频帧之后;
根据当前视频帧的大小和之前至少两视频帧的大小,获得所述当前视频帧的变化特征值;
根据视频帧率和所述当前视频帧的位置,获得所述当前视频帧的I帧阈值;
根据所述当前视频帧的变化特征值和与所述当前视频帧相邻的前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧的大小和之前至少两视频帧的大小判断所述前一视频帧是否为I帧。
可选地,处理器92被配置为具体用于:
若确定所述当前视频帧未丢包,则获得所述当前视频帧中各RTP包的净载;
将所述当前视频帧中各RTP包的净载累加,得到所述当前视频帧的大小。
可选地,处理器92被配置为具体用于:
若确定所述当前视频帧丢包且未整帧丢失,则获得所述当前视频帧中接收到的各RTP包的净载,将所述当前视频帧中接收到的各RTP包的净载累加,得到所述当前视频帧接收到的RTP包的总大小;
根据所有接收到的各RTP包中与所述当前视频帧中丢失的RTP包前相邻的RTP包和后相邻的RTP包,估计每个丢失的RTP包的净载和所述当前视频帧中丢失的RTP包的个数,根据每个丢失的RTP包的净载和所述当前视频帧中丢失的RTP包的个数得到所述当前视频帧丢失的RTP包的总大小;
将所述当前视频帧的接收到的RTP包的总大小和丢失的RTP包的总大小相加,得到所述当前视频帧的大小。
进一步地,处理器92被配置为具体用于:
获得所有接收到的各RTP包中与所述当前视频帧中丢失的RTP包前相邻的RTP包的净载和后相邻的RTP包的净载;
根据所述前相邻的RTP包的净载和后相邻的RTP包的净载的平均值估计每个丢失的RTP包的净载。
可选地,处理器92被配置为还具体用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳确定所述前相邻的RTP包和后相邻的RTP包均属于所述当前视频帧,或,若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包属于所述前一视频帧且后相邻的RTP包属于所述当前视频帧且所述前相邻的RTP包为所述前一视频帧的最后一个RTP包,则根据所述前相邻的RTP包和后相邻的RTP包的序列号获得所述前相邻的RTP包和后相邻的RTP包之间丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为V_lostPackets。
可选地,处理器92被配置为还具体用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包属于所述当前视频帧且后相邻的RTP包属于与所述当前视频帧相邻的后一视频帧且所述前相邻的RTP包不是所述当前视频帧的最后一个RTP包,则根据所述前相邻的RTP包和后相邻的RTP包的序列号获得所述前相邻的RTP包和后相邻的RTP包之间丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为int(V_lostPackets/2)+V_lostPackets%2。
可选地,处理器92被配置为还具体用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定所述前相邻的RTP包所属视频帧与所述当前视频帧不连续且所述后相邻的RTP包属于所述当前视频帧且所述前相邻的RTP包为所属视频帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述前相邻的RTP包和后相邻的RTP包的序列号、时间戳获得所述前相邻的RTP包和后相邻的RTP包之间丢失的视频帧的帧数V_lostFrames和丢失的RTP包的总个数V_lostPackets;
确定所述当前视频帧中丢失的RTP包的个数为V_lostPackets%V_lostFrames。
可选地,处理器92被配置为还具体用于:
若根据所述前相邻的RTP包和后相邻的RTP包的时间戳和标记位确定前相邻的RTP包属于所述当前视频帧且后相邻的RTP包所属视频帧与所述当前视频帧不连续且所述前相邻的RTP包不是所述当前视频帧的最后一个RTP包,则确定所述当前视频帧中丢失的RTP包的个数为1。
可选地,处理器92被配置为具体用于:
若确定所述当前视频帧整帧丢失,则根据所有接收到的各RTP包中与所述当前视频帧前相邻的RTP包和后相邻的RTP包估计每个丢失的RTP包的净载,根据视频帧率、RTP包的时钟频率和所述前相邻的RTP包和后相邻的RTP包的时间戳、序列号获得所述前相邻的RTP包和后相邻的RTP包所属视频帧之间丢失的视频帧的帧数V_lostFrames和丢失的RTP包的总个数V_lostPackets;
若根据所述前相邻的RTP包的标记位确定所述前相邻的RTP包为所述前相邻的RTP包所属视频帧的最后一个RTP包,则确定所述当前视频帧中RTP包的个数为int(V_lostPackets/V_lostFrames),否则确定所述当前视频帧中RTP包的个数为int((V_lostPackets-1)/V_lostFrames);
根据所述当前视频帧中RTP包的个数和每个丢失的RTP包的净载得到所述当前视频帧的大小。
进一步地,处理器92被配置为还具体用于:
将所述当前视频帧的大小和之前至少两视频帧的大小的差值的均值的绝对值或将所述当前帧的大小和之前至少两视频帧的大小的差值的绝对值的均值,作为所述当前视频帧的变化特征值。
进一步地,处理器92被配置为还具体用于:
根据视频帧率、所述当前视频帧与之前最近的一个I帧的距离,获得所述当前视频帧的I帧阈值。
可选地,处理器92被配置为具体用于:
若与所述前一视频帧相邻的前两视频帧为之前最近的一个I帧,则确定所述当前视频帧的I帧阈值为所述之前最近一个I帧的大小与第一常数的乘积,所述第一常数的取值范围为(0,1]。
可选地,处理器92被配置为具体用于:
若与所述前一视频帧相邻的前两视频帧不为之前最近的一个I帧,则判断所述当前视频帧与之前最近的一个I帧的距离是否大于所述视频帧率,若大于则将所述前一视频帧的I帧阈值和第一缩放因子的乘积确定为所述当前视频帧的I帧阈值,若不大于则将所述前一视频帧的I帧阈值和第二缩放因子的乘积确定为所述当前视频帧的I帧阈值;其中,所述第一缩放因子、第二缩放因子的取值范围为(0,1],所述第一缩放因子大于所述第二缩放因子。
进一步地,处理器92被配置为还具体用于:
若所述前一视频帧的大小与前两视频帧的大小的比值或所述前一视频帧的大小与所述当前视频帧的大小的比值大于第二常数,且所述当前视频帧的变化特征值大于所述当前视频帧的I帧阈值,且所述前一视频帧的变化特征值大于所述当前视频帧的I帧阈值,则判断所述前一视频帧为I帧,否则判断所述前一视频帧不为I帧;或,
若所述前一视频帧的大小与所述前一视频帧之前至少两视频帧的大小的均值的比值或所述前一视频帧的大小与所述当前视频帧的大小的比值大于第二常数,且所述当前视频帧的变化特征值大于所述当前视频帧的I帧阈值,且所述前一视频帧的变化特征值大于所述当前视频帧的I帧阈值,则判断所述前一视频帧为I帧,否则判断所述前一视频帧不为I帧。
进一步地,处理器92被配置为还具体用于:
若所述当前视频帧为所述视频流的第二个视频帧,则判断所述前一视频帧为I帧。
优选地,所述第二常数根据码率、视频帧率和所述当前视频帧的位置确定。
进一步地,处理器92被配置为还用于:
在判断所述前一视频帧为I帧之后,计算I帧的平均大小。
进一步地,若所述当前视频帧为所述视频流的最后一个视频帧,处理器92被配置为还具体用于:
若所述当前视频帧与所述I帧的平均大小的比值大于第三常数,则判断所述当前视频帧为I帧,否则判断所述当前视频帧不为I帧,所述第三常数大于0。
可选地,处理器92被配置为还用于:获得所述第一个视频帧的大小;确定第一个视频帧的变化特征值为所述第一个视频帧的大小与第四常数的乘积,所述第四常数的取值范围为(0,1];确定第一个视频帧的I帧阈值等于所述第一个视频帧的变化特征值。
本发明实施例通过根据当前视频帧和之前至少两视频帧的大小获得所述当前视频帧的变化特征值,根据视频帧率和所述当前视频帧的位置获得所述当前视频帧的I帧阈值,根据所述当前视频帧和前一视频帧的变化特征值、当前视频帧的I帧阈值、所述当前视频帧和之前至少两视频帧的大小判断所述前一视频帧是否为I帧,提供了一套完整有效的检测帧类型的方法,并且充分考虑了视频帧率的影响,使得检测结果更加准确。
图10为本发明实施例提供的又一种帧大小检测装置的结构示意图。如图10所示,该装置1000包括:
存储器11,用于存储指令;
处理器12,与所述存储器耦合,处理器12被配置为执行存储在存储器11中的指令,其中,处理器12被配置为用于:
若确定接收到的两个RTP包之间发生丢包,则获得各接收到的RTP包的净载,根据各接收到的RTP包的净载估计每个丢失的RTP包的净载;
根据所述两个RTP包的序列号,获得所述两个RTP包之间丢失的RTP包的总个数V_lostPackets;
根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数;
根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载,得到丢包的各帧的大小。
进一步地,处理器12被配置为具体用于:
根据所述两个RTP包的净载的平均值估计每个丢失的RTP包的净载;或
根据丢失的RTP包之前接收到的多个RTP包的净载的平均值估计每个丢失的RTP包的净载。
进一步地,处理器12被配置为还具体用于:
若根据所述两个RTP包的时间戳确定所述两个RTP包属于同一帧,或,若根据所述两个RTP包的时间戳和标记位确定两个RTP包分别属于两个连续的帧且前一RTP包为所属帧的最后一个RTP包,则确定后一RTP包所属帧丢失的RTP包的个数等于丢失的RTP包的总个数V_lostPackets。
可选地,处理器12被配置为还具体用于:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包分别属于两个连续的帧且前一RTP包不是所属帧的最后一个RTP包,则确定所述前一RTP包所属帧中丢失的RTP包的个数为int(V_lostPackets/2)+V_lostPackets%2,后一RTP包所属帧中丢失的RTP包的个数为int(V_lostPackets/2)。
可选地,处理器12被配置为还具体用于:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包属于不同的帧且所属帧不连续以及前一RTP包为所属帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述两个RTP包的时间戳确定所述两个RTP包所属帧之间丢失的整帧数V_lostFrames;
确定各丢失的整帧中丢失的RTP包的个数为int(V_lostPackets/V_lostFrames),后一RTP包所属帧丢失的RTP包的个数为V_lostPackets%V_lostFrames。
可选地,处理器12被配置为还具体用于:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包属于不同的帧且所属帧不连续以及前一RTP包不为所属帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述两个RTP包的时间戳确定所述两个RTP包所属帧之间丢失的整帧数V_lostFrames;
确定所述前一RTP包所属帧中丢失的RTP包的个数为1,各丢失的整帧中丢失的RTP包的个数为int((V_lostPackets-1)/V_lostFrames),后一RTP包所属帧丢失的RTP包的个数为(V_lostPackets-1)%V_lostFrames。
本实施例的具体实现参照本发明实施例提供的一种帧大小检测方法。本发明实施例通过若确定接收到的两个RTP包之间发生丢包,则根据各接收到的RTP包的净载估计每个丢失的RTP包的净载,并根据所述两个RTP包的序列号获得所述两个RTP包之间丢失的RTP包的总个数,然后根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数,从而根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载得到丢包的各帧的大小,提供一种有效的检测有丢包的帧的大小的解决方案。
最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。

Claims (12)

1.一种帧大小检测方法,其特征在于,包括:
若确定接收到的两个RTP包之间发生丢包,则获得各接收到的RTP包的净载,根据各接收到的RTP包的净载估计每个丢失的RTP包的净载;
根据所述两个RTP包的序列号,获得所述两个RTP包之间丢失的RTP包的总个数V_lostPackets;
根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数;
根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载,得到丢包的各帧的大小。
2.根据权利要求1所述的方法,其特征在于,所述根据各接收到的RTP包的净载估计每个丢失的RTP包的净载具体包括:
根据所述两个RTP包的净载的平均值估计每个丢失的RTP包的净载;或
根据丢失的RTP包之前接收到的多个RTP包的净载的平均值估计每个丢失的RTP包的净载。
3.根据权利要求1或2所述的方法,其特征在于,所述根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数具体包括:
若根据所述两个RTP包的时间戳确定所述两个RTP包属于同一帧,或,若根据所述两个RTP包的时间戳和标记位确定两个RTP包分别属于两个连续的帧且前一RTP包为所属帧的最后一个RTP包,则确定后一RTP包所属帧丢失的RTP包的个数等于丢失的RTP包的总个数V_lostPackets。
4.根据权利要求1或2所述的方法,其特征在于,所述根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数具体包括:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包分别属于两个连续的帧且前一RTP包不是所属帧的最后一个RTP包,则确定所述前一RTP包所属帧中丢失的RTP包的个数为int(V_lostPackets/2)+V_lostPackets%2,后一RTP包所属帧中丢失的RTP包的个数为int(V_lostPackets/2)。
5.根据权利要求1或2所述的方法,其特征在于,所述根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数具体包括:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包属于不同的帧且所属帧不连续以及前一RTP包为所属帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述两个RTP包的时间戳获得所述两个RTP包所属帧之间丢失的整帧数V_lostFrames;
确定各丢失的整帧中丢失的RTP包的个数为int(V_lostPackets/V_lostFrames),后一RTP包所属帧丢失的RTP包的个数为V_lostPackets%V_lostFrames。
6.根据权利要求1或2所述的方法,其特征在于,所述根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数具体包括:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包属于不同的帧且所属帧不连续以及前一RTP包不为所属帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述两个RTP包的时间戳获得所述两个RTP包所属帧之间丢失的整帧数V_lostFrames;
确定所述前一RTP包所属帧中丢失的RTP包的个数为1,各丢失的整帧中丢失的RTP包的个数为int((V_lostPackets-1)/V_lostFrames),后一RTP包所属帧丢失的RTP包的个数为(V_lostPackets-1)%V_lostFrames。
7.一种帧大小检测装置,其特征在于,包括:
净载估计模块,用于若确定接收到的两个RTP包之间发生丢包,则获得各接收到的RTP包的净载,根据各接收到的RTP包的净载估计每个丢失的RTP包的净载;
总丢失数获得模块,用于根据所述两个RTP包的序列号,获得所述两个RTP包之间丢失的RTP包的总个数V_lostPackets;
各丢失数估计模块,用于根据所述丢失的RTP包的总个数V_lostPackets、两个RTP包的时间戳和标记位,估计丢包的各帧中丢失的RTP包的个数;
帧大小检测模块,用于根据丢包的各帧中丢失的RTP包的个数和每个丢失的RTP包的净载,得到丢包的各帧的大小。
8.根据权利要求7所述的装置,其特征在于,所述净载估计模块具体用于:
根据所述两个RTP包的净载的平均值估计每个丢失的RTP包的净载;或
根据丢失的RTP包之前接收到的多个RTP包的净载的平均值估计每个丢失的RTP包的净载。
9.根据权利要求7或8所述的装置,其特征在于,所述各丢失数估计模块具体用于:
若根据所述两个RTP包的时间戳确定所述两个RTP包属于同一帧,或,若根据所述两个RTP包的时间戳和标记位确定两个RTP包分别属于两个连续的帧且前一RTP包为所属帧的最后一个RTP包,则确定后一RTP包所属帧丢失的RTP包的个数等于丢失的RTP包的总个数V_lostPackets。
10.根据权利要求7或8所述的装置,其特征在于,所述各丢失数估计模块具体用于:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包分别属于两个连续的帧且前一RTP包不是所属帧的最后一个RTP包,则确定所述前一RTP包所属帧中丢失的RTP包的个数为int(V_lostPackets/2)+V_lostPackets%2,后一RTP包所属帧中丢失的RTP包的个数为int(V_lostPackets/2)。
11.根据权利要求7或8所述的装置,其特征在于,所述各丢失数估计模块具体用于:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包属于不同的帧且所属帧不连续以及前一RTP包为所属帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述两个RTP包的时间戳获得所述两个RTP包所属帧之间丢失的整帧数V_lostFrames;
确定各丢失的整帧中丢失的RTP包的个数为int(V_lostPackets/V_lostFrames),后一RTP包所属帧丢失的RTP包的个数为V_lostPackets%V_lostFrames。
12.根据权利要求7或8所述的装置,其特征在于,所述各丢失数估计模块具体用于:
若根据所述两个RTP包的时间戳和标记位确定所述两个RTP包属于不同的帧且所属帧不连续以及前一RTP包不为所属帧的最后一个RTP包,则根据视频帧率、RTP包的时钟频率和所述两个RTP包的时间戳获得所述两个RTP包所属帧之间丢失的整帧数V_lostFrames;
确定所述前一RTP包所属帧中丢失的RTP包的个数为1,各丢失的整帧中丢失的RTP包的个数为int((V_lostPackets-1)/V_lostFrames),后一RTP包所属帧丢失的RTP包的个数为(V_lostPackets-1)%V_lostFrames。
CN201410667892.0A 2012-08-21 2012-08-21 视频流的帧大小检测方法及装置 Active CN104394485B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410667892.0A CN104394485B (zh) 2012-08-21 2012-08-21 视频流的帧大小检测方法及装置

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201410667892.0A CN104394485B (zh) 2012-08-21 2012-08-21 视频流的帧大小检测方法及装置
CN201210298928.3A CN103634698B (zh) 2012-08-21 2012-08-21 视频流的帧类型检测、帧大小检测方法及装置

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201210298928.3A Division CN103634698B (zh) 2012-08-21 2012-08-21 视频流的帧类型检测、帧大小检测方法及装置

Publications (2)

Publication Number Publication Date
CN104394485A CN104394485A (zh) 2015-03-04
CN104394485B true CN104394485B (zh) 2017-12-15

Family

ID=52612313

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410667892.0A Active CN104394485B (zh) 2012-08-21 2012-08-21 视频流的帧大小检测方法及装置

Country Status (1)

Country Link
CN (1) CN104394485B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN107277519B (zh) * 2017-06-30 2019-11-15 武汉斗鱼网络科技有限公司 一种判断视频帧的帧类型的方法及电子设备
CN112188286B (zh) * 2020-10-09 2022-06-10 上海网达软件股份有限公司 一种用于直播流的时间戳标定方法及系统

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005217697A (ja) * 2004-01-29 2005-08-11 Nippon Telegr & Teleph Corp <Ntt> 双方向映像コミュニケーションシステムにおけるフィードバック品質制御方法、端末、およびプログラム
CN101558657A (zh) * 2007-08-22 2009-10-14 日本电信电话株式会社 视频质量估计装置、视频质量估计方法、帧类型确定方法及记录介质
CN101636983A (zh) * 2007-03-14 2010-01-27 微软公司 减少视频传输时的分组丢失的影响
CN102056004A (zh) * 2009-11-03 2011-05-11 华为技术有限公司 一种视频质量评估方法、设备及系统

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE602007007587D1 (de) * 2007-05-25 2010-08-19 Psytechnics Ltd Videoqualitätsbestimmung

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005217697A (ja) * 2004-01-29 2005-08-11 Nippon Telegr & Teleph Corp <Ntt> 双方向映像コミュニケーションシステムにおけるフィードバック品質制御方法、端末、およびプログラム
CN101636983A (zh) * 2007-03-14 2010-01-27 微软公司 减少视频传输时的分组丢失的影响
CN101558657A (zh) * 2007-08-22 2009-10-14 日本电信电话株式会社 视频质量估计装置、视频质量估计方法、帧类型确定方法及记录介质
CN102056004A (zh) * 2009-11-03 2011-05-11 华为技术有限公司 一种视频质量评估方法、设备及系统

Also Published As

Publication number Publication date
CN104394485A (zh) 2015-03-04

Similar Documents

Publication Publication Date Title
CN103634698B (zh) 视频流的帧类型检测、帧大小检测方法及装置
US7321565B2 (en) System and method for analyzing the performance of multiple transportation streams of streaming media in packet-based networks
CN101911714B (zh) 视频质量估计设备、方法
US8588069B2 (en) System and method for analyzing the performance of multiple transportation streams of streaming media in packet-based networks
CN102783089B (zh) 用于估计子路径的可用带宽的方法
CN103733632B (zh) 带宽变化连接上的动态比特率调节
US20120201310A1 (en) Video quality estimation apparatus, video quality estimation method, and program
CN104618195B (zh) 带宽估测方法和装置
US10063922B2 (en) Performance metrics for downloads of encrypted video
CN102056004B (zh) 一种视频质量评估方法、设备及系统
US8665745B2 (en) Method and device for determining a jitter buffer level
US8526449B2 (en) Apparatus for controlling data traffic and a method for measuring QoE
US20060018266A1 (en) Roundtrip delay time measurement apparatus and method for variable bit rate multimedia data
US20110149775A1 (en) System and method for interworking between media quality assessment at terminal device and qos control in transport network
WO2009111361A1 (en) Monitoring quality of a packet flow in packet-based communication networks
CN104335526B (zh) 用于数据传送路径的可用路径容量的改进的估计的方法和节点
US8873590B2 (en) Apparatus and method for correcting jitter
KR20110044258A (ko) 시-변화 전송 미디어를 통한 데이터 스트리밍
EP2364540A1 (en) Method for estimating the &#39;quality of experience&#39; of a user in respect of audio and/or video contents distributed through telecommunications networks
JP5300278B2 (ja) ネットワークジッターを測定するメディアレートを検出する方法
CN104394485B (zh) 视频流的帧大小检测方法及装置
CN103595593A (zh) 一种基于探针测量mdi的系统及方法
EP3324639A1 (en) A system and method for estimating performance metrics for video streaming
JP5083059B2 (ja) パケット中継装置およびパケット中継方法
JP3686378B2 (ja) 通信品質管理方法及びその実施装置並びにその処理プログラムと記録媒体

Legal Events

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