一种视联网中视频流的播放方法和装置
技术领域
本申请涉及网络技术领域,特别是涉及一种视联网中视频流的播放方法,以及,一种视联网中视频流的播放装置。
背景技术
视联网是一个实时交换平台,是互联网的更高级形态,面对网络上潜在的巨大视频流量,视联网采用以太网的异步和包交换两个优点,在全兼容的前提下消除了以太网缺陷,具备全网端到端无缝连接,直通用户终端,直接承载IP数据包,并且,用户数据在全网范围内不需任何格式转换,能够实现目前互联网无法实现的全网高清视频实时传输。
因此,视联网将众多互联网应用推向高清视频化、统一化,高清面对面。最终将实现世界无距离,实现全球范围内人与人的距离只是一个屏幕的距离;另一方面,视联网具备分组交换的灵活、简单和低价,同时具备电路交换的品质和安全保证,在通讯历史上第一次实现了全网交换式虚拟电路,以及数据格式的无缝连接。
在实际应用中,采用视联网进行ES(elementary stream,原始流/基本数据流)网络视频流传输时,由于没有时间戳信息,也就是说无法确定视频解码播放的时间。每一个视频帧的大小都是不一样的,尤其是I帧(关键帧)跟P帧(差别帧)之间,经常会相差很多倍。而且网络传输也存在着很多不确定因素,因此播放的时候经常会有卡顿的现象。
发明内容
本申请提供了一种视联网中视频流的播放方法,以避免通过视联网接收视频流并进行播放时出现的视频卡顿问题。
相应的,本申请还提供了一种视联网中视频流的播放装置,用以保证上述方法的实现。
本申请提供了一种一种视联网中视频流的播放方法,其特征在于,包括:
在视频发送端预先设置针对视频流的编码参数,所述视频流中包括关键帧和多个差别帧;
所述视频发送端按照所述编码参数对各帧视频流进行编码,编码后,所述关键帧和所述差别帧的大小差值小于第一预设值,各个差别帧的大小差值小于第二预设值;
所述视频发送端通过视联网向视频接收端发送所述视频流,在发送时控制每间隔第三预设值的时间段发送一帧视频流,并在第四预设值的时间段之内将一帧视频流发送出去;
视频接收端接收所述视频流,针对各帧视频流添加时间戳信息;
根据所述时间戳信息计算当前的帧率信息,并根据所述帧率信息等时间间隔地对接收到的各帧视频流进行解码,并对解码后的视频流进行播放。
优选地,所述视频发送端通过视联网向视频接收端发送所述视频流的步骤包括:
所述视频发送端连入视联网,并通过视联网与视频接收端建立连接;
所述视频发送端生成包含套接字信息,并按照所述套接字信息经视联网向所述视频接收端发送所述视频流,所述套接字信息标识所述视频流在视联网的数据链路层进行传输的传输路径。
优选地,所述套接字信息包括数据链路层的物理层的协议号、接口索引号、报头类型、分组类型、物理层地址和物理层地址长度中的一种或多种。
优选地,所述根据时间戳信息计算当前的帧率信息,并根据帧率信息等时间间隔地对接收到的各帧视频流进行解码的步骤包括:
根据当前接收到的一帧视频流携带的时间戳信息和接收到的第一帧视频流的的时间戳信息计算所述帧率信息;
根据所述帧率信息确定两帧视频流之间的平均的时间间隔,并休眠一个时间间隔后向解码器发送下一帧视频流;
所述解码器对接收到的一帧视频流进行解码。
优选地,在向解码器发送下一帧视频流之前,接收到的各帧视频流缓冲在所述视频接收端,所述视频流为原始流。
本申请还提供了一种视联网中视频流的播放装置,包括:
参数设置模块,用于在视频发送端预先设置针对视频流的编码参数,所述视频流中包括关键帧和多个差别帧;
编码模块,用于所述视频发送端按照所述编码参数对各帧视频流进行编码,编码后,所述关键帧和所述差别帧的大小差值小于第一预设值,各个差别帧的大小差值小于第二预设值;
发送模块,用于所述视频发送端通过视联网向视频接收端发送所述视频流,在发送时控制每间隔第三预设值的时间段发送一帧视频流,并在第四预设值的时间段之内将一帧视频流发送出去;
接收模块,用于视频接收端接收所述视频流,针对各帧视频流添加时间戳信息;
帧率计算模块,用于根据所述时间戳信息计算当前的帧率信息;
解码模块,用于根据所述帧率信息等时间间隔地对接收到的各帧视频流进行解码;
播放模块,用于对解码后的视频流进行播放。
优选地,所述发送模块包括:
连接子模块,用于所述视频发送端连入视联网,并通过视联网与视频接收端建立连接;
信息生成子模块,用于所述视频发送端生成包含套接字信息;
视频流发送子模块,用于按照所述套接字信息经视联网向所述视频接收端发送所述视频流,所述套接字信息标识所述视频流在视联网的数据链路层进行传输的传输路径。
优选地,所述套接字信息包括数据链路层的物理层的协议号、接口索引号、报头类型、分组类型、物理层地址和物理层地址长度中的一种或多种。
优选地,所述帧率计算模块,具体用于根据当前接收到的一帧视频流携带的时间戳信息和接收到的第一帧视频流的的时间戳信息计算所述帧率信息;
所述解码模块包括:
间隔计算子模块,用于根据所述帧率信息确定两帧视频流之间的平均的时间间隔,并休眠一个时间间隔后向解码器发送下一帧视频流;
视频流解码子模块,用于所述解码器对接收到的一帧视频流进行解码。
优选地,所述装置还包括:
缓冲模块,用于在向解码器发送下一帧视频流之前在所述视频接收端缓冲从接收到的各帧视频流,所述视频流为原始流。
与背景技术相比,本申请包括以下优点:
通过本发明实施例,调整视频发送端的编码参数,缩小各个差别帧之间以及关键帧与差别帧之间的大小差异,使得每个帧的大小尽量均匀,通过视联网发送时,等间隔发送每帧视频流,并控制一帧视频流在预设的单位时间内发送出去,并且在视频接收端根据各个视频流携带的时间戳信息统计帧率信息,根据帧率信息等间隔往解码器发送数据,从而保证视频接收端可以等间隔地解码每帧视频流,实现均匀播放视频流,避免视频流的卡顿问题。
附图说明
图1是本申请实施例所述一种视联网中网络视频流的播放方法的流程图;
图2是本申请实施例的一个示例中处理ES流的流程图;
图3是本申请实施例所述一种视联网中网络视频流的播放装置的结构框图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参照图1,其示出了本申请实施例所述一种视联网中网络视频流的播放方法流程图。
步骤101、在视频发送端预先设置针对视频流的编码参数,所述视频流中包括关键帧和多个差别帧。
本发明实施例可以解决ES流通过视联网传输并播放时出现的卡顿的问题,也可以用于其它由于帧之间大小不一致导致的播放卡顿的问题。
针对ES流,I帧表示关键帧,可以理解为这一帧画面的完整保留,由于其包含完整画面,解码时只需要本帧数据就可以完成,P帧也就是差别帧,表示的是这一帧跟之前的一个关键帧(或P帧)的差别,解码时需要用之前缓存的画面叠加上本帧定义的差别,生成最终画面,P帧没有完整画面数据,只有与前一帧的画面差别的数据。
通过编码参数可以设定一帧图像压缩后的最大尺寸,这样I帧图像的尺寸就不会过大。只需要在编码器初始化时设置一次即可。
步骤102、所述视频发送端按照所述编码参数对各帧视频流进行编码,编码后,所述关键帧和所述差别帧的大小差值小于第一预设值,各个差别帧的大小差值小于第二预设值。
视频发送端按照编码参数对视频流进行编码,目的在于使得每个帧大小尽量均匀,即各个P帧之间,以及I帧和P帧的大小能尽量保持一致。
在这是编码参数时,可以根据具体的应用和需要来设置,由于在具体的实现中并无法使得各个帧之间大小完全相同,可以尽量使得各个帧大小比较接近,差值在可接受的范围之内,本发明实施例中,可以设置所述关键帧和所述差别帧的大小差值小于第一预设值,各个差别帧的大小差值小于第二预设值。
步骤103、所述视频发送端通过视联网向视频接收端发送所述视频流,在发送时控制每间隔第三预设值的时间段发送一帧视频流,并在第四预设值的时间段之内将一帧视频流发送出去。
本发明实施例中,视频发送端采用匀帧匀包的方式发送各帧视频流。
如果发送端能够均匀发送每帧数据,比如原始视频帧率是30fps,那么每隔33ms就发送一帧数据,那么接收端就会均匀的收到图像数据,然后就可以直接解码显示。这样就保证了发送端和接收端同步,视频播放就很流畅,这就是所谓匀帧。匀包是将一帧数据均匀的在单位时间内,即一帧时间内发送出去。这样网络流量会比较稳定,不会出现网络负载瞬时峰值过大的现象。
具体而言,通过在发送各帧视频流时,控制发送的时间间隔为第三预设值,即控制每间隔第三预设值的时间段发送一帧视频流,来实现匀帧,通过控制各帧视频流均在相同的时间内发送完毕,即在第四预设值的时间段之内将一帧视频流发送出去,来实现匀包。
在现实情况中,由于网络传输带宽有限,而且I帧通常比P帧大很多倍,无法在一帧的时间内发送完毕。因此,可以在带宽允许的条件下尽可能快的发送一帧数据,如果一个I帧过大,花费了好几个时间单元,那么在接下来的时间里就需要尽快发送P帧数据,直到恢复到能够按帧等间隔发送的正常状态。
本发明实施例中,视频发送端和视频接收端之间采用视联网进行连接并传输视频流数据,具体而言,视频发送端连入视联网,并通过视联网与视频接收端建立连接,视频接收端可以在视频发送端连入之前或之后连入视联网。
在具体的实现中,视频接收端和视频发送端均可以为机顶盒,作为视频接收端的机顶盒为机顶盒客户端(Client端),作为视频发送端的机顶盒为服务器端(server端),视频接收端和视频发送端也可以为其他可以连入视联网的设备。
本发明实施例中,优选地,所述视频发送端通过视联网向视频接收端发送所述视频流的步骤包括:
子步骤S11、所述视频发送端连入视联网,并通过视联网与视频接收端建立连接;
子步骤S12、所述视频发送端生成包含套接字信息,并按照所述套接字信息经视联网向所述视频接收端发送所述视频流,所述套接字信息标识所述视频流在视联网的数据链路层进行传输的传输路径。
视频接收端和视频发送端通过视联网建立连接后,视频接收端向视频发送端发送视频流。应用场景之一的机顶盒的相关环境是Linux环境,在linux环境中要从链路层(MAC)直接收发数据帧,本发明实施例中,视频流经视联网传输,与传统的以太网的传输方式不同之处在于:经以太网传输视频流时,视频流传输在ISO的第三层即应用层(网络层),通过IP地址对视频接收端和视频发送端进行识别,视频流传输时携带视频接收端和视频发送端的IP地址;经视联网传输数据时,视频流传输在ISO的第二层即链路层,通过链路层信息对视频流的视频接收端和视频发送端进行识别,视频流传输时携带链路层信息。
在linux环境中可以通过libpcap与libnet两个动态库来分别完成收与发的工作。虽然它已被广泛使用,但在要求进行跨平台移植的软件中使用仍然有很多弊端;又因为视联网的视频都是通过二层(链路层)来进行收发数据的,同时为了减少flash的使用空间。本发明实施例使用了一种更为直接地、无须安装其它库的从链路层收发数据帧的方式,即通过定义链路层的套接字来完成,即packet套接字,packet套接字用于在MAC层上收发原始数据帧,这样就允许在用户空间完成链路层上各个层次的实现,无论是进行开发还是测试工作都带来了极大的便利性。
本发明实施例中采用套接字信息作为链路层的信息。视频接收端在生成视频流时在视频流包中添加套接字信息,向第视频发送端发送视频流时,按照套接字信息中标识的视联网数据链路层传输路径进行传输,套接字信息可以包括数据链路层的物理层的协议号、接口索引号、报头类型、分组类型、物理层地址和物理层地址长度中的一种或多种。
步骤104、视频接收端接收所述视频流,针对各帧视频流添加时间戳信息。
背景技术中,视频流传输时并没有携带时间戳信息,本发明实施例中,针对各帧视频流添加时间戳信息。以用于计算帧率信息。
步骤105、根据所述时间戳信息计算当前的帧率信息,并根据所述帧率信息等时间间隔地对接收到的各帧视频流进行解码,并对解码后的视频流进行播放。
接收端收到第一帧数据时需要记录当时的时间戳信息,并根据时间戳信息统计帧率信息,本发明实施例中,所述步骤105可以包括:
子步骤S21、根据当前接收到的一帧视频流携带的时间戳信息和接收到的第一帧视频流的的时间戳信息计算所述帧率信息;
子步骤S22、根据所述帧率信息确定两帧视频流之间的平均的时间间隔,并休眠一个时间间隔后向解码器发送下一帧视频流;
子步骤S23、所述解码器对接收到的一帧视频流进行解码。
在接收到一定数量的帧后可以根据当前时间和第一帧的时间差计算出帧率信息,即根据当前接收到的一帧视频流携带的时间戳信息和接收到的第一帧视频流的的时间戳信息计算帧率信息。随着时间的推移,计算得到的帧率信息就更加准确。获取到帧率信息后,根据所述帧率信息确定两帧视频流之间的平均的时间间隔,就可以休眠一个时间间隔的时间,也即是一帧时间,再往解码器送数据。解码器可以进一步对接收到的一帧视频流进行解码。
本发明实施例中,在向解码器发送下一帧视频流之前,接收到的各帧视频流可以缓冲在所述视频接收端。
综上所述,可见本发明实施例从视频编码、网络发送、网络接收三个方面着手,基本上实现了视频的流畅播放,主要做了以下三个方面的改进:
1、调整发送端编码参数,使得每个帧大小尽量均匀,即I帧和P帧的大小尽量保持一致。
2、发送端匀帧匀包,尽量在一帧时间内发送完一帧数据。
3、增加接收端缓冲,统计帧率信息,等间隔的往解码器送数据。
通过本发明实施例,调整视频发送端的编码参数,缩小各个差别帧之间以及关键帧与差别帧之间的大小差异,使得每个帧的大小尽量均匀,通过视联网发送时,控制等间隔发送每帧视频流,并控制一帧视频流在预设的单位时间内发送出去,并且在视频接收端缓冲接收到的视频流信息,根据各个视频流携带的时间戳信息统计帧率信息,根据帧率信息等间隔往解码器发送数据,从而保证视频接收端可以等间隔地解码每帧视频流,实现均匀播放视频流,避免视频流的卡顿问题。
为了使本领域技术人员更好地理解本发明,以下通过一个具体的示例说明进行说明,图2是本申请实施例的一个示例中处理ES流的流程图,发端即视频发送端,收端即视频接收端,如图可以包括如下步骤:
发端:
1、采集视频流。
2、调整编码参数,按照编码参数对数据进行编码。
3、编码后,发送端发送数据,控制数据的发送时间。
收端:
1、接收端接收并缓冲数据,等间隔发送到解码器。
2、解码器对视频流进行解码。
4、播放显示视频流。
本示例中,输入视频流的格式是720P60,编码参数如下:maxPicSizeRatio是200,目标码率是2mbps,码流控制方式是动态码流控制vbr,只有I帧和P帧,I帧间隔是60帧。截取编码后的60帧数据如下,其中第一帧是I帧,后续都是P帧,大小依次是42290,4050,2632,3480,2355,2356,2217,2206,2235…(单位是字节)。根据配置可知当前网络带宽是4mbps,则发送第一帧需要86ms左右,即5帧多点的时间,然后全速发送后面的2-7帧,到第8帧恢复正常,即每帧时间内仅仅发送一帧数据。
通过本发明实施例,调整视频发送端的编码参数,缩小各个差别帧之间以及关键帧与差别帧之间的大小差异,使得每个帧的大小尽量均匀,通过视联网发送时,控制等间隔发送每帧视频流,并控制一帧视频流在预设的单位时间内发送出去,并且在视频接收端缓冲接收到的视频流信息,根据各个视频流携带的时间戳信息统计帧率信息,根据帧率信息等间隔往解码器发送数据,从而保证视频接收端可以等间隔地解码每帧视频流,实现均匀播放视频流,避免视频流的卡顿问题。
需要说明的是,对于前述的方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为依据本申请,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本申请所必需的。
基于上述方法实施例的说明,本申请还提供了相应的视联网中网络视频流的播放装置实施例,来实现上述方法实施例所述的内容。
参照图3,其示出了本申请实施例所述一种视联网中网络视频流的播放装置结构框图。
参数设置模块201,用于在视频发送端预先设置针对视频流的编码参数,所述视频流中包括关键帧和多个差别帧;
编码模块202,用于所述视频发送端按照所述编码参数对各帧视频流进行编码,编码后,所述关键帧和所述差别帧的大小差值小于第一预设值,各个差别帧的大小差值小于第二预设值;
发送模块203,用于所述视频发送端通过视联网向视频接收端发送所述视频流,在发送时控制每间隔第三预设值的时间段发送一帧视频流,并在第四预设值的时间段之内将一帧视频流发送出去;
接收模块204,用于视频接收端接收所述视频流,针对各帧视频流添加时间戳信息;
帧率计算模块205,用于根据所述时间戳信息计算当前的帧率信息;
解码模块206,用于根据所述帧率信息等时间间隔地对接收到的各帧视频流进行解码;
播放模块207,用于对解码后的视频流进行播放。
本发明实施例中,优选地,所述发送模块包括:
连接子模块,用于所述视频发送端连入视联网,并通过视联网与视频接收端建立连接;
信息生成子模块,用于所述视频发送端生成包含套接字信息;
视频流发送子模块,用于按照所述套接字信息经视联网向所述视频接收端发送所述视频流,所述套接字信息标识所述视频流在视联网的数据链路层进行传输的传输路径。
本发明实施例中,优选地,所述套接字信息包括数据链路层的物理层的协议号、接口索引号、报头类型、分组类型、物理层地址和物理层地址长度中的一种或多种。
本发明实施例中,优选地,所述帧率计算模块,具体用于根据当前接收到的一帧视频流携带的时间戳信息和接收到的第一帧视频流的的时间戳信息计算所述帧率信息;
所述解码模块包括:
间隔计算子模块,用于根据所述帧率信息确定两帧视频流之间的平均的时间间隔,并休眠一个时间间隔后向解码器发送下一帧视频流;
视频流解码子模块,用于所述解码器对接收到的一帧视频流进行解码。
本发明实施例中,优选地,所述装置还包括:
缓冲模块,用于在向解码器发送下一帧视频流之前在所述视频接收端缓冲从接收到的各帧视频流,所述视频流为原始流。
通过本发明实施例,调整视频发送端的编码参数,缩小各个差别帧之间以及关键帧与差别帧之间的大小差异,使得每个帧的大小尽量均匀,通过视联网发送时,控制等间隔发送每帧视频流,并控制一帧视频流在预设的单位时间内发送出去,并且在视频接收端缓冲接收到的视频流信息,根据各个视频流携带的时间戳信息统计帧率信息,根据帧率信息等间隔往解码器发送数据,从而保证视频接收端可以等间隔地解码每帧视频流,实现均匀播放视频流,避免视频流的卡顿问题。
对于上述视联网中网络视频流的播放装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见图1所示方法实施例的部分说明即可。
本申请可用于众多通用或专用的计算装置环境或配置中。例如:个人计算机、服务器计算机、手持设备或便携式设备、平板型设备、多处理器装置、基于微处理器的装置、置顶盒、可编程的消费电子设备、网络PC、小型计算机、大型计算机、包括以上任何装置或设备的分布式计算环境等等。
本申请可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本申请,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
还需要说明的是,在本文中,术语“包括”、“包含”,不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本领域内的技术人员应明白,本申请的实施例可提供为方法、装置、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
以上对本申请所提供的一种视联网中网络视频流的播放方法和视联网中网络视频流的播放装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。