一种数据传输的方法及装置与流程

文档序号:11207330阅读:532来源:国知局
一种数据传输的方法及装置与流程

本发明涉及数据传输技术领域,尤其涉及一种数据传输的方法及装置。



背景技术:

随着无线通信技术的发展,以智能手机为代表的便携式移动终端的高度普及,为构建面向移动环境的视频传输提供了便利条件,现有的视频数据传输时,首先将待传输的视频数据按照实时流传输协议(realtimestreamingprotocol,rtsp)或实时传输协议(real-timetransportprotocol,rtp)格式进行分包,然后将分包用传输控制协议(transmissioncontrolprotocol,tcp)或用户数据报协议(userdatagramprotocol,udp)发送出去。

现有的待传输的视频数据的分包过程如图1所示,针对待传输的视频数据,进行rtsp打包,此时需要对待传输的视频数据进行第1次拷贝,即将待传输的视频数据拷贝到用户态的内存中,并在内存中加上rtsp头;将待传输的视频数据从用户态传输到内核态时,对待传输的视频数据进行第2次拷贝,即将待传输的视频数据拷贝到内核态的内存中;通过tcp和因特网互联协议(internetprotocol,ip)协议栈对待传输的视频数据进行打包,加上tcp头和ip头;将待传输的视频数据写入以太网(ethernet)直接内存存取(directmemoryaccess,dma)发送队列;所述rtsp头、tcp头和ip头和待传输的视频数据都保存在内核态的内存中,将rtsp头地址、tcp头和ip头地址和待传输的视频数据地址写入网络描述符;网卡根据网络描述符中的地址获取rtsp头、tcp头和ip头,以及待传输的视频数据,并发送待传输的视频数据。

现有技术中将待传输的视频数据拷贝到用户态的内存中,加上rtsp头;再拷贝到内核态的内存中,加上tcp头和ip头;这样使得rtsp头、tcp头和ip头和视频数据都保存在内核态的内存中。但是,网卡在发送数据时,只要根据网络扫描符中的地址,能够获取rtsp头、tcp头和ip头,以及待传输的视频数据即可,rtsp头、tcp头和ip头和视频数据并不一定保存在同一个内存中。因此现有的视频数据的分包过程中,额外增加了一次待传输的视频数据的拷贝过程,即上述第1次拷贝,将待传输的视频数据拷贝到用户态的内存中,增加了数据传输过程中的带宽消耗。



技术实现要素:

本发明实施例提供了一种数据传输的方法及装置,用以解决数据传输过程中带宽消耗大的问题。

本发明实施例提供了一种数据传输的方法,该方法包括:

将待传输的视频数据划分为多个第一子视频数据,针对每个第一子视频数据,确定该第一子视频数据的实时流传输协议rtsp头或实时传输协议rtp头,将所述rtsp头或rtp头写入内核态中的第一内存;

将所述每个第一子视频数据拷贝到内核态中的第二内存;

针对每个第一子视频数据,确定该第一子视频数据的第一传输控制协议tcp头和第一因特网互联协议ip头,将所述第一tcp头和第一ip头写入内核态中的第一内存;

针对每个第一子视频数据,将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,以使网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送。

进一步地,所述将所述rtsp头或rtp头写入内核态中的第一内存包括:

判断第一内存中已经写入的rtsp头或rtp头的第一数据量及所述已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和是否达到通用分段卸载gso驱动的最大支持发送量;

如果否,将所述rtsp头或rtp头写入内核态中的第一内存。

进一步地,如果所述第一数据量和第二数据量的和达到通用分段卸载gso驱动的最大支持发送量,所述将所述每个第一子视频数据拷贝到内核态中的第二内存包括:

将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存。

进一步地,所述将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存包括:

根据所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,确定待封装的第二子视频数据的第二tcp头和第二ip头;

将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,及确定的第二tcp头和第二ip头封装为第二子视频数据,将所述第二子视频数据拷贝到内核态中的第二内存。

进一步地,所述确定待封装的第二子视频数据的第二tcp头和第二ip头之后,将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,及确定的第二tcp头和第二ip头封装为第二子视频数据之前,所述方法还包括:

判断是否对所述待封装的第二子视频数据进行加速处理;

如果是,将确定的所述第二ip头中的服务类型tos字段作为原始tos字段拷贝到所述第一内存,将确定的所述第二ip头中的tos字段中的对应预留位设置为1;

所述将所述第二子视频数据拷贝到内核态中的第二内存包括:

判断确定的所述第二ip头中的tos字段中的对应预留位是否为1;

如果是,将所述第二子视频数据拷贝到内核态中的第二内存。

进一步地,所述针对每个第一子视频数据,确定该第一子视频数据的第一传输控制协议tcp头和第一因特网互联协议ip头包括:

确定所述第二子视频数据包含的每个第一子视频数据,针对每个第一子视频数据,根据该第一子视频数据的rtsp头或rtp头中包含的数据量,对所述第二tcp和第二ip头中包含的数据量进行更新,并根据所述原始tos字段,对所述更新后的第二ip头中的对应tos字段进行更新,将经过更新后的第二tcp头和第二ip头作为该第一子视频数据的第一tcp头和第一ip头。

另一方面,本发明实施例提供了一种数据传输的装置,所述装置包括:

第一写入模块,用于将待传输的视频数据划分为多个第一子视频数据,针对每个第一子视频数据,确定该第一子视频数据的实时流传输协议rtsp头或实时传输协议rtp头,将所述rtsp头或rtp头写入内核态中的第一内存;

拷贝模块,用于将所述每个第一子视频数据拷贝到内核态中的第二内存;

第二写入模块,用于针对每个第一子视频数据,确定该第一子视频数据的第一传输控制协议tcp头和第一因特网互联协议ip头,将所述第一tcp头和第一ip头写入内核态中的第一内存;

第三写入模块,用于针对每个第一子视频数据,将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,以使网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送。

进一步地,所述第一写入模块,具体用于判断第一内存中已经写入的rtsp头或rtp头的第一数据量及所述已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和是否达到通用分段卸载gso驱动的最大支持发送量;如果否,将所述rtsp头或rtp头写入内核态中的第一内存。

进一步地,所述拷贝模块,具体用于如果所述第一数据量和第二数据量的和达到通用分段卸载gso驱动的最大支持发送量,将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存。

进一步地,所述拷贝模块,具体用于根据所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,确定待封装的第二子视频数据的第二tcp头和第二ip头;将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,及确定的第二tcp头和第二ip头封装为第二子视频数据,将所述第二子视频数据拷贝到内核态中的第二内存。

进一步地,所述装置还包括:

判断设置模块,用于判断是否对所述待封装的第二子视频数据进行加速处理;如果是,将确定的所述第二ip头中的服务类型tos字段作为原始tos字段拷贝到所述第一内存,将确定的所述第二ip头中的tos字段中的对应预留位设置为1;

所述拷贝模块,具体用于判断确定的所述第二ip头中的tos字段中的对应预留位是否为1;如果是,将所述第二子视频数据拷贝到内核态中的第二内存。

进一步地,所述第二写入模块,具体用于确定所述第二子视频数据包含的每个第一子视频数据,针对每个第一子视频数据,根据该第一子视频数据的rtsp头或rtp头中包含的数据量,对所述第二tcp和第二ip头中包含的数据量进行更新,并根据所述原始tos字段,对所述更新后的第二ip头中的对应tos字段进行更新,将经过更新后的第二tcp头和第二ip头作为该第一子视频数据的第一tcp头和第一ip头。

本发明实施例提供了一种数据传输的方法及装置,所述方法包括:将待传输的视频数据划分为多个第一子视频数据,针对每个第一子视频数据,确定该第一子视频数据的实时流传输协议rtsp头或实时传输协议rtp头,将所述rtsp头或rtp头写入内核态中的第一内存;将所述每个第一子视频数据拷贝到内核态中的第二内存;针对每个第一子视频数据,确定该第一子视频数据的第一传输控制协议tcp头和第一因特网互联协议ip头,将所述第一tcp头和第一ip头写入内核态中的第一内存;针对每个第一子视频数据,将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,以使网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送。由于在本发明实施例中,直接将每个第一子视频数据拷贝到内核态中的第二内存,第一子视频数据的rtsp头或rtp头,以及第一tcp头和第一ip头写入内核态的第一内存中,虽然第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头与该第一子视频数据保存在内存的不同地址中,但是网卡根据网络扫描符中的地址,仍然可以获取所述第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头,以及该第一子视频数据并发送,因此减少了每个第一子视频数据拷贝到用户态的内存的过程,降低了数据传输过程中带宽的消耗。

附图说明

为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简要介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域的普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为现有技术提供的一种数据传输的过程示意图;

图2为本发明实施例1提供的一种数据传输的过程示意图;

图3为本发明实施例2提供的一种数据传输的过程示意图;

图4本发明实施例提供的一种数据传输的装置结构示意图。

具体实施方式

下面将结合附图对本发明作进一步地详细描述,显然,所描述的实施例仅仅是本发明一部份实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围。

实施例1:

图2为本发明实施例提供的一种数据传输的过程示意图,该过程包括以下步骤:

s201:将待传输的视频数据划分为多个第一子视频数据,针对每个第一子视频数据,确定该第一子视频数据的rtsp头或rtp头,将所述rtsp头或rtp头写入内核态中的第一内存。

本发明实施例提供的数据传输的方法应用于电子设备,所述电子设备可以是pc、智能电视及手机等设备。

电子设备在进行数据传输时,最终由网卡发送数据,而网卡每次发送的数据大小是有一定限制的,因此在进行数据传输时,需要将待传输的视频数据进行划分。在本发明实施例中,针对待传输的视频数据,所述电子设备可以将待传输的视频数据划分为多个第一子视频数据,在进行划分时,可以将待传输的视频数据任意划分,只要保证划分后的每个第一子视频数据的数据大小能够满足网卡每次发送数据的数据大小要求即可。当然,为了更方便的将待传输的视频数据划分为多个第一子视频数据,也可以将待传输的视频数据平均划分为多个第一子视频数据,使每个第一子视频数据的数据大小相同。

较佳的,为了提高数据传输的效率,在将待传输的视频数据平均划分为多个第一子视频数据时,可以根据网卡每次发送的数据中视频数据的大小,对待传输的视频数据进行划分。

例如,网卡每次发送的数据中视频数据最大为1.4k,在将待传输的视频数据划分为多个第一子视频数据时,可以将待传输的视频数据任意划分,只要划分后的每个第一子视频数据的数据大小不大于1.4k即可;当然,可以将待传输的视频数据平均划分为多个第一子视频数据,只要划分后的每个第一子视频数据的数据大小不大于1.4k即可,比如每个子视频数据的数据大小可以为0.8k、1.0k、1.3k等等。较佳的,可以将待传输的视频数据平均划分为多个第一子视频数据,使每个第一子视频数据的大小为1.4k。

电子设备在进行数据传输时,需要根据数据的rtsp头或rtp头实现数据传输,因此,在将待传输的视频数据划分为多个第一子视频数据后,针对每个第一子视频数据,确定该第一子视频数据的rtsp头或rtp头。其中,针对每个第一子视频数据,确定该第一子视频数据的rtsp头或rtp头的过程属于现有技术,在本发明实施例中不对此过程进行赘述。

电子设备在进行数据传输之前,通过初始化,确定内核态中的第一内存,将所述针对每个第一子视频数据确定的rtsp头或rtp头写入内核态中的第一内存。

s202:将所述每个第一子视频数据拷贝到内核态中的第二内存。

电子设备预先在内核态中确定有能够存储视频数据的第二内存,针对待传输的视频数据划分后得到的每个第一子视频数据,将所述每个第一子视频数据拷贝到内核态中的第二内存。

s203:针对每个第一子视频数据,确定该第一子视频数据的第一tcp头和第一ip头,将所述第一tcp头和第一ip头写入内核态中的第一内存。

电子设备在进行数据传输时,需要根据数据的第一tcp头和第一ip头实现数据传输。因此,在将待传输的视频数据划分为多个第一子视频数据后,针对每个第一子视频数据,确定该第一子视频数据的第一tcp头和第一ip头。一般电子设备可以根据tcp和ip协议栈,确定所述第一子视频数据的第一tcp头和第一ip头。其中,针对每个第一子视频数据,确定该第一子视频数据的第一tcp头和第一ip头的过程属于现有技术,在本发明实施例中不对此过程进行赘述。

电子设备在确定每个第一子视频数据的第一tcp头和第一ip头后,将所述第一tcp头和第一ip头写入所述通过初始化,确定的内核态中的第一内存。其中,所述第一tcp头和第一ip头,rtsp头或rtp头都保存在内核态中的第一内存,但是所述第一tcp头和第一ip头,rtsp头或rtp头在第一内存中的地址不同。

s204:针对每个第一子视频数据,将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,以使网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送。

在数据传输的过程中,每个第一子视频数据对应一个网络描述符,网络描述符中记录有该第一子视频数据的地址,以及该第一子视频数据的rtsp头或rtp头、对应的第一tcp头和第一ip头的地址,网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、对应的第一tcp头和第一ip头以及第一子视频数据并发送。

由于在本发明实施例中,直接将每个第一子视频数据拷贝到内核态中的第二内存,第一子视频数据的rtsp头或rtp头,以及第一tcp头和第一ip头写入内核态的第一内存中,虽然第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头与该第一子视频数据保存在内存的不同地址中,但是网卡根据网络扫描符中的地址,仍然可以获取所述第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头,以及该第一子视频数据并发送,因此减少了每个第一子视频数据拷贝到用户态的内存的过程,降低了数据传输过程中带宽的消耗。

实施例2:

为了提高数据传输的效率,在上述实施例的基础上,在本发明实施例中,所述将所述rtsp头或rtp头写入内核态中的第一内存包括:

判断第一内存中已经写入的rtsp头或rtp头的第一数据量及所述已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和是否达到通用分段卸载(genericsegmentationoffload,gso)驱动的最大支持发送量;

如果否,将所述rtsp头或rtp头写入内核态中的第一内存。

电子设备在进行数据传输时,可以每次发送一个第一子视频数据,即针对待发送的第一子视频数据,将该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头写入内核态中的第一内存,将该第一子视频数据拷贝到内核态中的第二内存,进而将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,以使网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送。

为了提高数据传输的效率,在本发明实施例中,也可以一次发送几个第一子视频数据。具体的该过程包括:确定第一内存中已经写入的rtsp头或rtp头的第一数据量及已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和,如果该第一数据量和第二数据量的和未达到gso驱动的最大支持发送量时,将确定该第一子视频数据的rtsp头或rtp头写入内核态中的第一内存。

在将所述rtsp头或rtp头写入内核态中的第一内存时,只要保证第一内存中已经写入的rtsp头或rtp头的第一数据量及已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和不超过gso驱动的最大支持发送量即可。

例如,gso驱动的最大支持发送量为64k,每个第一子视频数据的数据大小为1.4k,可以将10个第一子视频数据的rtsp头或rtp头写入内核态中的第一内存,也可以20个、30个等等第一子视频数据的rtsp头或rtp头写入内核态中的第一内存,只要保证第一内存中已经写入的rtsp头或rtp头的第一数据量及已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和不超过gso驱动的最大支持发送量即可。

在将每个第一子视频数据的rtsp头或rtp头写入内核态中的第一内存时,首先需要判断第一内存中已经写入的rtsp头或rtp头的第一数据量及所述已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和是否达到gso驱动的最大支持发送量,如果否,将所述rtsp头或rtp头写入内核态中的第一内存。例如,将第40个第一子视频数据的rtsp头或rtp头写入内核态中的第一内存时,判断所述第一内存中已经写入的39个第一子视频数据的rtsp头或rtp头的第一数据量及所述39个rtsp头或rtp头对应的第一子视频数据的第二数据量的和是否达到gso驱动的最大支持发送量,如果否,则将第40个第一子视频数据的rtsp头或rtp头写入内核态中的第一内存。

在本发明实施例中,如果所述第一数据量和第二数据量的和达到gso驱动的最大支持发送量,所述将所述每个第一子视频数据拷贝到内核态中的第二内存包括:

将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存。

电子设备在进行数据传输时,可以每次发送一个第一子视频数据,即针对待发送的第一子视频数据,将该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头写入内核态中的第一内存,将该第一子视频数据拷贝到内核态中的第二内存,进而将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,以使网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送。

在本发明实施例中,当第一内存中已经写入的rtsp头或rtp头的第一数据量及已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和达到gso驱动的最大支持发送量时,可以将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存,这样可以实现将多个第一子视频数据拷贝到内核态中的第二内存,从而提高数据传输的效率。

在将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存后,针对每个第一子视频数据,确定该第一子视频数据的第一tcp头和第一ip头,将所述第一tcp头和第一ip头写入内核态中的第一内存,针对每个第一子视频数据,将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,以使网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送。

例如,根据gso驱动的最大支持发送量,将40个第一子视频数据的rtsp头或rtp头写入内核态中的第一内存时,达到所述gso驱动的最大支持发送量,则将所述第一内存中已经写入的rtsp头或rtp头对应的所述40个第一子视频数据依次拷贝到内核态中的第二内存。

另外,由于电子设备将待传输的视频数据划分为多个第一子视频数据,针对每个第一子视频数据,确定该第一子视频数据的rtsp头或rtp头,如果所述第一内存中已经写入的rtsp头或rtp头的第一数据量及所述已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和达到gso驱动的最大支持发送量,将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存。但是当写入所述第一内存中的rtsp头或rtp头为最后一个第一子视频数据的rtsp头或rtp头时,有可能此时第一内存中已经写入的rtsp头或rtp头的第一数据量及所述已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和未达到gso驱动的最大支持发送量,此时也将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存。

在将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存之后,将第二内存中写入的第一子视频数据发送出去,并且判断是否还存在未被发送的第一子视频数据,如果是,则将所述第一内存进行初始化,依次确定未被发送每个第一子视频数据的rtsp头或rtp头,在将每个第一子视频数据的rtsp头或rtp头写入第一内存时,判断第一内存中已经写入的rtsp头或rtp头的第一数据量及所述已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和是否达到gso驱动的最大支持发送量;如果否,将该第一子视频数据的rtsp头或rtp头写入第一内存,如果是,将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存,并针对第二内存中写入的每个第一子视频数据,确定该第一子视频数据的第一tcp头和第一ip头,将所述第一tcp头和第一ip头写入内核态中的第一内存。

图3为本发明实施例提供的一种数据传输的过程示意图,该过程包括以下步骤:

s301:确定当前该第一子视频数据的rtsp头或rtp头,其中将待传输的视频数据划分为多个第一子视频数据,当前该第一子视频数据可以为其中的任意一个第一子视频数据。

s302:判断第一内存中已经写入的rtsp头或rtp头的第一数据量及所述已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和是否达到gso驱动的最大支持发送量,如果否,进行s303,如果是,进行s305。

s303:将该第一子视频数据的rtsp头或rtp头写入内核态中的第一内存。

s304:判断该第一子视频数据是否为最后一个第一子视频数据,如果是,进行s305,如果否,读取下一个第一子视频数据,将该下一个第一子视频数据作为当前该第一子视频数据并返回s301。

s305:将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存。

s306:针对所述内核态中的第二内存中的每个第一子视频数据,确定该第一子视频数据的第一tcp头和第一ip头,将所述第一tcp头和第一ip头写入内核态中的第一内存。

s307:针对所述内核态中的第二内存中的每个第一子视频数据,将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,以使网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送。

在将所述内核态中的第二内存中的每个第一子视频数据的第一tcp头和第一ip头写入内核态中的第一内存之后,在通过网卡发送所述内核态中的第二内存中的每个第一子视频数据时,针对所述内核态中的第二内存中的每个第一子视频数据,需要将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,进而网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及内核态中的第二内存中的第一子视频数据并发送。

s308:将所述第一内存进行初始化,进行步骤s303。

由于在本发明实施例中,当第一内存中已经写入的rtsp头或rtp头的第一数据量及已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和达到gso驱动的最大支持发送量时,将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存,这样可以实现将多个第一子视频数据写入内核态中的第二内存,从而提高了数据传输的效率。

实施例3:

为了进一步提高数据的传输效率,在上述各实施例的基础上,在本发明实施例中,所述将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存包括:

根据所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,确定待封装的第二子视频数据的第二tcp头和第二ip头;

将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,及确定的第二tcp头和第二ip头封装为第二子视频数据,将所述第二子视频数据拷贝到内核态中的第二内存。

在将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存时,可以将所述每个第一子视频数据依次拷贝到内核态中的第二内存,为了进一步提高数据传输的效率,可以根据所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,确定待封装的第二子视频数据的第二tcp头和第二ip头,一般电子设备可以根据tcp和ip协议栈,可以确定所述待封装的第二子视频数据的第二tcp头和第二ip头。将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,及确定的第二tcp头和第二ip头进行封装,得到第二子视频数据,进而将所述第二子视频数据拷贝到内核态中的第二内存。其中,根据tcp和ip协议栈确定所述待封装的第二子视频数据的第二tcp和第二ip头的过程属于现有技术,在本发明实施例中不对此过程进行赘述。在后续通过网卡发送每个第一子视频数据时,可以根据每个rtsp头或rtp头,确定所述第二子视频数据中的每个第一子视频数据。

由于将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,及确定的第二tcp头和第二ip头封装为第二子视频数据,将所述第二子视频数据拷贝到内核态中的第二内存,从而进一步提高了数据传输的效率。

为了使gso驱动能够识别需要加速处理的视频数据,从而保证对进行加速处理的视频数据传输时,利用gso驱动实现将第二子视频数据写入内核态中的第二内存,从而提高数据传输的效率,在本发明实施例中,所述确定待封装的第二子视频数据的第二tcp头和第二ip头之后,将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,及确定的第二tcp头和第二ip头封装为第二子视频数据之前,所述方法还包括:

判断是否对所述待封装的第二子视频数据进行加速处理;

如果是,将确定的所述第二ip头中的服务类型tos字段作为原始tos字段拷贝到所述第一内存,将确定的所述第二ip头中的tos字段中的对应预留位设置为1;

所述将所述第二子视频数据拷贝到内核态中的第二内存包括:

判断确定的所述第二ip头中的tos字段中的对应预留位是否为1;

如果是,将所述第二子视频数据拷贝到内核态中的第二内存。

电子设备在确定待封装的第二子视频数据的第二tcp头和第二ip头之后,判断是否对所述待封装的第二子视频数据进行加速处理,如果确定对所述待封装的第二子视频数据进行加速处理,则需要将所述待封装的第二子视频数据进行标记,从而使gso驱动能够根据所述待封装的第二子视频数据的标记识别所述待封装的第二子视频数据为需要加速处理的视频数据。

在本发明实施例中,通过第二ip头中的tos字段对所述第二子视频数据进行标记。在此利用的是tos字段的预留位对所述第二子视频数据进行标记,这样既能够使gso驱动能够识别所述待封装的第二子视频数据为需要加速处理的视频数据,也不会影响后续对所述待封装的第二子视频数据的发送。

在确定所述待封装的第二子视频数据的第二ip头之后,为了保证后续数据传输时协议的正确性和完整性,需要将确定的所述第二ip头中的tos字段作为原始tos字段拷贝到所述第一内存,并将确定的所述第二ip头中的tos字段中的对应预留位设置为1,所述第二ip头中的tos字段中的对应预留位为1即为使gso驱动能够识别所述待封装的第二子视频数据为需要进行加速处理的标记。

在将所述第二子视频数据拷贝到内核态中的第二内存时,首先判断确定的所述第二ip头中的tos字段中的对应预留位是否为1,如果为1,则说明所述第二子视频数据为需要进行加速处理的视频数据,则将所述第二子视频数据拷贝到内核态中的第二内存,如果所述第二ip头中的tos字段中的对应预留位不为1,则不能利用gso驱动对所述第二子视频数据进行加速处理,此时只能通过标准tcp和ip协议进行数据的传输。

tos字段中包括两个预留位,在本发明实施例中可以采用该tos字段中某一预留位进行标识,也可以采用两个预留位进行标识。但预先采用几个以及采用哪几个电子设备已知,因此在进行加速处理时,可以根据预先设定的对应预留位进行相应设置,并根据相应的预留位判断是否进行第二子视频数据的拷贝。

可以预先设定tos字段中的任意一位预留位进行标识。比如预先设定采用tos字段中的预留位第6位进行标识,则在判断对所述待封装的第二子视频数据进行加速处理时,将tos字段的第6位设置为1;在将所述第二子视频数据拷贝到内核态中的第二内存时,判断确定的所述第二ip头中的tos字段中的第6位是否为1,如果是,将所述第二子视频数据拷贝到内核态中的第二内存;或者预先设定采用tos字段中的预留位第7位进行标识,则在判断对所述待封装的第二子视频数据进行加速处理后,将tos字段的第7位设置为1,在将所述第二子视频数据拷贝到内核态中的第二内存时,判断确定的所述第二ip头中的tos字段中的第7位是否为1,如果是,将所述第二子视频数据拷贝到内核态中的第二内存。

较佳的,为了保证gso驱动能够准确识别需要加速处理的视频数据,预先设定采用tos字段中的预留位第6位和第7位进行标识,则在判断对所述待封装的第二子视频数据进行加速处理后,将tos字段的第6位和第7位设置为1,在将所述第二子视频数据拷贝到内核态中的第二内存时,判断确定的所述第二ip头中的tos字段中的第6位和第7位是否都为1时,如果是将所述第二子视频数据拷贝到内核态中的第二内存。

由于在本发明实施例中,当确定对所述待传输的视频数据进行加速处理时,通过将确定的所述第二ip头中的tos字段中的对应预留位设置为1,使gso驱动能够识别需要加速处理的视频数据,将所述第二子视频数据拷贝到内核态中的第二内存。因此可以保证对进行加速处理的视频数据传输时,利用gso驱动实现将第二子视频数据写入内核态中的第二内存,从而提高数据传输的效率。

为了保证在通过网卡获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送时tcp和ip协议的正确性和完整性,在本发明实施例中,所述针对每个第一子视频数据,确定该第一子视频数据的第一tcp头和第一ip头包括:

确定所述第二子视频数据包含的每个第一子视频数据,针对每个第一子视频数据,根据该第一子视频数据的rtsp头或rtp头中包含的数据量,对所述第二tcp和第二ip头中包含的数据量进行更新,并根据所述原始tos字段,对所述更新后的第二ip头中的对应tos字段进行更新,将经过更新后的第二tcp头和第二ip头作为该第一子视频数据的第一tcp头和第一ip头。

网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送,因此,需要确定每个第一子视频数据的第一tcp头和第一ip头。针对第二子视频数据,确定了第二子视频数据的第二tcp头和第二ip头,在针对每个第一子视频数据,确定该第一子视频数据的第一tcp头和第一ip头时,由于将待传输的视频数据划分为多个第一子视频数据后,针对每个第一子视频数据,确定该第一子视频数据的rtsp或rtp头,因此,可以根据第一内存中已经写入的每个rtsp或rtp头,确定所述第二子视频数据包含的每个第一子视频数据。每个第一子视频数据的第一tcp头和第一ip头中的数据量信息与所述确定的第二子视频数据的第二tcp头和第二ip头中的数据量信息不同,因此,在确定所述第二子视频数据包含的每个第一子视频数据之后,针对每个第一子视频数据,根据该第一子视频数据的rtsp头或rtp头中包含的数据量,对所述第二tcp和第二ip头中包含的数据量进行更新。为了保证在通过网卡获取对应的rtsp或rtp头、第一tcp和第一ip头以及第一子视频数据并发送时tcp和ip协议的正确性和完整性,根据所述原始tos字段,对所述更新后的第二ip头中的对应tos字段进行更新,将经过更新后的第二tcp头和第二ip头作为该第一子视频数据的第一tcp头和第一ip头。

由于在本发明实施例中,针对所述第二子视频数据包含的每个第一子视频数据,根据该第一子视频数据的rtsp头或rtp头中包含的数据量,对所述第二tcp和第二ip头中包含的数据量进行更新,并根据所述原始tos字段,对所述更新后的第二ip头中的对应tos字段进行更新,将经过更新后的第二tcp头和第二ip头作为该第一子视频数据的第一tcp头和第一ip头。从而保证在通过网卡获取对应的rtsp或rtp头、第一tcp和第一ip头以及第一子视频数据并发送时tcp和ip协议的正确性和完整性。

图4本发明实施例提供的一种数据传输的装置结构示意图,所述装置包括:

第一写入模块41,用于将待传输的视频数据划分为多个第一子视频数据,针对每个第一子视频数据,确定该第一子视频数据的实时流传输协议rtsp头或实时传输协议rtp头,将所述rtsp头或rtp头写入内核态中的第一内存;

拷贝模块42,用于将所述每个第一子视频数据拷贝到内核态中的第二内存;

第二写入模块43,用于针对每个第一子视频数据,确定该第一子视频数据的第一传输控制协议tcp头和第一因特网互联协议ip头,将所述第一tcp头和第一ip头写入内核态中的第一内存;

第三写入模块44,用于针对每个第一子视频数据,将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,以使网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送。

所述第一写入模块41,具体用于判断第一内存中已经写入的rtsp头或rtp头的第一数据量及所述已经写入的rtsp头或rtp头对应的第一子视频数据的第二数据量的和是否达到通用分段卸载gso驱动的最大支持发送量;如果否,将所述rtsp头或rtp头写入内核态中的第一内存。

所述拷贝模块42,具体用于如果所述第一数据量和第二数据量的和达到通用分段卸载gso驱动的最大支持发送量,将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据拷贝到内核态中的第二内存。

所述拷贝模块42,具体用于根据所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,确定待封装的第二子视频数据的第二tcp头和第二ip头;将所述第一内存中已经写入的rtsp头或rtp头对应的每个第一子视频数据,及确定的第二tcp头和第二ip头封装为第二子视频数据,将所述第二子视频数据拷贝到内核态中的第二内存。

所述装置还包括:

判断设置模块45,用于判断是否对所述待封装的第二子视频数据进行加速处理;如果是,将确定的所述第二ip头中的服务类型tos字段作为原始tos字段拷贝到所述第一内存,将确定的所述第二ip头中的tos字段中的对应预留位设置为1;

所述拷贝模块42,具体用于判断确定的所述第二ip头中的tos字段中的对应预留位是否为1;如果是,将所述第二子视频数据拷贝到内核态中的第二内存。

所述第二写入模块43,具体用于确定所述第二子视频数据包含的每个第一子视频数据,针对每个第一子视频数据,根据该第一子视频数据的rtsp头或rtp头中包含的数据量,对所述第二tcp和第二ip头中包含的数据量进行更新,并根据所述原始tos字段,对所述更新后的第二ip头中的对应tos字段进行更新,将经过更新后的第二tcp头和第二ip头作为该第一子视频数据的第一tcp头和第一ip头。

本发明实施例提供了一种数据传输的方法及装置,所述方法包括:将待传输的视频数据划分为多个第一子视频数据,针对每个第一子视频数据,确定该第一子视频数据的实时流传输协议rtsp头或实时传输协议rtp头,将所述rtsp头或rtp头写入内核态中的第一内存;将所述每个第一子视频数据拷贝到内核态中的第二内存;针对每个第一子视频数据,确定该第一子视频数据的第一传输控制协议tcp头和第一因特网互联协议ip头,将所述第一tcp头和第一ip头写入内核态中的第一内存;针对每个第一子视频数据,将该第一子视频数据在所述第二内存中的地址以及该第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头在所述第一内存中的地址写入该第一子视频数据对应的网络描述符,以使网卡根据网络描述符中的地址,获取对应的rtsp头或rtp头、第一tcp头和第一ip头以及第一子视频数据并发送。由于在本发明实施例中,直接将每个第一子视频数据拷贝到内核态中的第二内存,第一子视频数据的rtsp头或rtp头,以及第一tcp头和第一ip头写入内核态的第一内存中,虽然第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头与该第一子视频数据保存在内存的不同地址中,但是网卡根据网络扫描符中的地址,仍然可以获取所述第一子视频数据的rtsp头或rtp头、第一tcp头和第一ip头,以及该第一子视频数据并发送,因此减少了每个第一子视频数据拷贝到用户态的内存的过程,降低了数据传输过程中带宽的消耗。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。

显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。

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