CN101631128A - 发送流媒体数据的方法和装置 - Google Patents
发送流媒体数据的方法和装置 Download PDFInfo
- Publication number
- CN101631128A CN101631128A CN200910164895A CN200910164895A CN101631128A CN 101631128 A CN101631128 A CN 101631128A CN 200910164895 A CN200910164895 A CN 200910164895A CN 200910164895 A CN200910164895 A CN 200910164895A CN 101631128 A CN101631128 A CN 101631128A
- Authority
- CN
- China
- Prior art keywords
- packet
- time
- unloading
- data
- queue
- 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.)
- Pending
Links
Images
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种发送流媒体数据的方法和装置,以解决现有技术中由于延时系统调用或者定时器系统调用的时间精确性较差而导致媒体服务器服务质量下降的问题。实施例中的方法有:从流媒体文件中读取数据然后打包得到多个数据包,以及设置每个数据包的转存时刻;每隔预设的时间间隔检查当前是否有数据包的转存时刻到达,以及在确认当前有数据包的转存时刻到达后将该数据包转存到发送接口,由发送接口发送该数据包。对于通过网络向终端设备提供流媒体数据的媒体服务器来说,使用本实施例的技术方案能够提高服务质量。
Description
技术领域
本发明涉及计算机网络技术领域,特别地涉及一种发送流媒体数据的方法和装置。
背景技术
在基于Linux操作系统的流媒体服务器应用中,需要将大量的流媒体数据从磁盘上传递到网络上。当流媒体数据从磁盘上到网络上传输时,需要根据媒体的格式控制发包的间隔。
流媒体数据从磁盘上到网络上传输由媒体服务器执行,主要包括如下3个步骤:(1)将流媒体数据从磁盘空间读入用户数据缓存中;(2)将用户数据缓存中存放的流媒体数据打包成实时传输协议RTP(Real-time Transport Protocol)数据包然后发到用户发送缓存中;(3)将用户发送缓存中存放的RTP数据包通过用户数据报协议UDP(User Datagram Protocol)网络套接字向用户的终端设备发送。网络侧的服务器可以向多个终端发送流媒体数据,即形成多通道的传输,每个通道对应一个终端。
在Linux操作系统中,用户进程通过调用直接输入输出接口系统调用,可以用来读取磁盘数据,该系统调用将磁盘数据通过直接内存访问DMA(DirectMemory Access)机制直接写入到用户缓存中;通过调用UDP网络套接字相关系统调用接口,可以用来发送RTP数据包,该系统调用将RTP数据包从用户空间复制到内核空间,进行相应的封装,通过DMA机制映射到网卡的发送缓冲区,网卡将该RTP数据包发送出去。
在现有技术的这种方式下,对于每一路媒体流,都需要使用网络套接字,用户进程将媒体数据打包成RTP数据包后,调用UDP数据包发送接口,将数据包发送出去。
在目前的技术下,对于上述步骤中的第(2)步,是用一个定时器系统调用或延时系统调用的方式来控制媒体包发往用户发送缓存,延时系统调用或者定时器系统调用本身的精确性会影响到发送流媒体数据包的时间间隔的精确性,特别是在系统负荷较重的情况下延时系统调用或者定时器系统调用的时间精确性较差;在多通道传输的情况下,每个通道都使用一个定时器系统调用或延时系统调用,若通道数量较多则会导致通道所使用的定时器系统调用或延时系统调用发生调用延迟。这些都会使上述第(3)步中向用户的终端设备发送流媒体数据的时间精确性受到影响,从而导致媒体服务器的服务质量下降。
发明内容
本发明的主要目的是提供一种发送流媒体数据的方法和装置,;本发明的另一目的是解决多通道传输的情况下定时器系统调用或延时系统调用发生调用延迟而导致媒体服务器服务质量下降的问题。
为解决上述问题,本发明提供如下的技术方案:
一种发送流媒体数据的方法,包括:
从流媒体文件中读取数据然后打包得到多个数据包,以及设置每个数据包的转存时刻;
每隔预设的时间间隔检查当前是否有数据包的转存时刻到达,以及在确认当前有数据包的转存时刻到达后将该数据包转存到发送接口,由发送接口发送该数据包。
根据上述方法:
所述设置每个数据包的转存时刻,包括:将数据包按照打包的先后顺序保存在时间队列中,记录每个数据包在时间队列中的位置;所述预设的时间间隔包括时间队列相邻位置的时间间隔;所述每隔预设的时间间隔检查当前是否有数据包的转存时刻到达,包括:根据时间先后次序逐一检查时间队列中各位置上是否有数据包。
所述将数据包按照打包的先后顺序保存在时间队列中,包括:针对多个通道中的每个通道,按照该通道的数据打包的先后顺序将该通道的数据包保存在时间队列中;所述确认当前有数据包的转存时刻到达后将该数据包转存到发送接口,包括:确认当前有多个通道的数据包的转存时刻到达,然后同时将这些多个通道的数据包转存到发送接口。
一种发送流媒体数据的装置,包括打包模块、转存模块和发送模块,其中,
打包模块,用于从流媒体文件中读取数据然后打包得到多个数据包;
转存模块,用于设置每个数据包的转存时刻,每隔预设的时间间隔检查当前是否有数据包的转存时刻到达,以及在确认当前有数据包的转存时刻到达后将该数据包转存到发送模块;
发送模块,用于发送来自于转存模块的数据包。
根据上述装置:
所述转存模块包括:时间队列单元,用于按照预设的时间间隔设置时间队列的各个位置,以及将数据包按照打包的先后顺序保存在时间队列中,记录每个数据包在时间队列中的位置;检查单元,用于根据时间先后次序逐一检查时间队列中各位置上是否有数据包;转存单元,用于在检查单元确认时间队列中的位置上有数据包后,将该数据包转存到发送模块。
所述时间队列单元进一步用于针对多个通道中的每个通道,按照该通道的数据打包的先后顺序将该通道的数据包保存在时间队列中;所述检查单元进一步用于根据时间先后次序逐一检查时间队列中各位置上是否有多个通道的数据包;所述转存单元进一步用于在检查单元确认时间队列中的位置上有多个通道的数据包后,同时将这些多个通道的数据包转存到发送模块。
根据本实施例的技术方案,因为对于打包得到的每个数据包设置了转存时刻,并且按照数据包的转存时刻将数据包转存到发送接口,所以使数据包能够准时地到达发送接口,避免了现有技术中延时系统调用或者定时器系统调用的精确性不足而带来的影响。本实施例中利用时间队列来管理数据包向发送接口的转存,这样能够做到每个数据包的转存时刻都得到了记录,保证了转存数据包的时间精确性。并且利用时间队列统一管理多个通道的数据包转存,在某一时刻若有多通道数据包需转存则作统一处理,这种方式节省了系统资源,有助于提高系统的工作效率。因此,对于通过网络向终端设备提供流媒体数据的媒体服务器来说,使用本实施例的技术方案能够提高服务质量。
附图说明
图1为实施例中的方法总体流程图;
图2A和图2B为实施例中使用定时器控制的打包进程示意图;
图3A、图3B和图3C为实施例中使用时间队列管理数据包转存示意图;
图4为实施例中时间队列的同一位置下挂接多个数据包示意图。
具体实施方式
下面结合附图对本发明实施例中的技术方案作出说明。附图用于帮助理解实施例的技术方案,在实现中可以不限于附图所示的形式。
在本实施例中,如图1所示,首先从流媒体文件中读取数据然后打包得到多个数据包,以及设置每个数据包的转存时刻;接下来每隔预设的时间间隔进行检查,若当前有数据包的转存时刻到达,则将该数据包转存到发送接口,再由发送接口发送该数据包,否则继续检查是否有数据包的转存时刻到达。这种方法可以由网络侧的媒体服务器来执行,媒体服务器具有发送接口,用于将媒体数据向用户的终端设备发送。
因为从数据包的数据中可以提取到该数据在流媒体中的时间信息,所以可以根据该时间信息确定数据包的发送时刻,该发送时刻可以是根据一个设置的起始时刻和从数据中提取的时间信息来确定得到的一个相对时刻,在发送接口发送数据包的时候可以是根据设置的起始时刻和该相对时刻确定数据的发送时刻,再按该发送时刻发送数据。
媒体服务器可以从多个通道向多个用户发送流媒体数据。对于数据打包的过程,各个通道的处理方式相同。可以采用定时器来控制打包进程,根据打包时长的倍数设置定时器,当定时器超时时从流媒体文件中读取数据,读取的数据量为多个数据包的数据量,然后将读取的数据打包。以下结合图2A和图2B对此作进一步说明。如图2A所示,例如有一通道例如通道n中打一个数据包的时长即打包时长为10ms,打包定时器为30ms超时,则一次定时时间内可以打三个数据包。为了在下文中将要介绍的时间队列中有缓存的包,把第一个包推迟30ms发送,从而当第一个数据包发送的时候,会保证有新的数据存到队列中,如图2B所示,从而使队列中一直存有待发送数据。
在本实施例中,为了精确地控制数据包转存到发送接口的时间,预先设置了每个数据包的转存时刻,按照该转存时刻将数据包转存至发送接口。因为数据包的数量较大并且数据包之间有发送的先后关系,因此可以利用时间队列来设置数据包的转存时刻。
在数据打包得到数据包之后即存入时间队列中,并且记录每个数据包在时间队列中的位置。可以采用时间队列中的索引来进行该记录,即用索引来表示时间队列中的各个位置,时间队列中各位置的先后与各位置上的数据包转存时间先后相一致,每个位置有一个索引。时间队列中的各相邻位置之间有相同的时间间隔,每一个索引也同时对应一个转存时刻,即提取该索引对应的位置的数据包时,按照该索引对应的转存时刻进行转存操作。并且记录该转存时刻而且在转存操作之后进行更新。
以下举例说明索引的形式及数据包的索引的确定方法。设置时间队列中相邻位置的数据转存的时刻相隔时长为t,并设置一个数据包的转存时刻为t0,该数据包可以是流媒体文件的第一个数据包,它在时间队列中的索引为0,于是索引0对应数据转存时刻t0,索引1对应数据转存时刻t0+t,索引2对应数据转存时刻t0+2t,依此类推,如图3中所示,根据时间队列的长度,它的末位位置的索引为N,对应的数据转存时刻是t0+Nt。时间队列的长度可以根据打包时长和需要缓存数据包的个数来设置。时间队列以t为步进持续向前推进,对时间队列每个索引逐一检查,也就实现了每隔一个时间间隔检查当前是否有数据包的转存时刻到达。如果检查到的索引所在的位置上有数据包,就将该数据包进行转存,如图3A,例如当前时刻为t0+2t,就转存索引为2的位置上的数据包。并不是每个位置上都有数据包,这根据打包时长决定。例如打包时长为4ms,t=2ms,则在索引0、2、4、6等位置上有数据包。可以看出步进t应该小于打包时长,以保证每个打包得到的数据包能够在时间队列中获得位置。
结合图3A和图3B可以看出,在转存了索引为0的位置的数据包之后,索引为0的位置的数据转存时刻应更新为t0+(N+1)t,从时间队列上则表现为该索引的位置被移到了时间队列的末位,该位置上可以继续缓存打包得到的数据包。在进行了n次转存之后,时间队列的状态如图3C所示。所以时间队列是一个缓存内容保持更新的循环队列。
对于多个通道,可以使用同一个时间队列,于是时间队列的同一个位置下可以挂接多个通道的数据包,各个通道是各自打包并按打包先后顺序保存到时间队列中,通道之间互不影响。如图4所示,索引为0的位置下挂接了n个数据包,这些数据包分属于不同的通道。当然其他位置下也可能挂接多个数据包,图中未示出。根据各通道的数据格式,各通道的打包时长也可能不同,因此各通道的数据包在时间队列中的间隔也不同。可以看出在多通道的系统中,时间队列的步进应当小于各通道中的最小打包时长,可以将步进设置为各通道打包时长的公约数。
利用时间队列,可以方便地实现数据包的准时转存。因为时间队列中的相邻位置的时间间隔预先设定,所以根据时间先后次序逐一检查时间队列中各位置即实现了按设定的时间间隔检查当前是否有数据包的转存时刻到达。从图3可以看出,并不是时间队列中的每个位置上都有数据包,而且有些位置上不止一个数据包,这些数据包属于多个通道。所以当检查到有多个数据包的位置时,可以将这些数据包一并转存到发送接口,这种方式有助于节省系统资源,提高系统运行效率。
基于上述方法,以下对本实施例中的装置作出说明。本实施例中的装置可以利用软件、硬件或者二者结合的方式实现。以下按功能模块来划分装置结构,在实现中各模块可以各自成为设备,或为同一设备的组成部分。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于一计算机可读取存储介质中,如:ROM/RAM、磁碟、光盘等。
本实施例中的发送流媒体数据的装置的一种结构是包括打包模块、转存模块和发送模块,其中打包模块用于从流媒体文件中读取数据然后打包得到多个数据包;转存模块用于设置每个数据包的转存时刻,每隔预设的时间间隔检查当前是否有数据包的转存时刻到达,以及在确认当前有数据包的转存时刻到达后将该数据包转存到发送模块;发送模块用于发送来自于转存模块的数据包。
打包模块可进一步用于记录每个数据包的发送时刻;这样,发送模块可一步用于根据打包模块记录的每个数据包的发送时刻发送每个数据包。
对于打包模块,它的一种结构可以是包括:定时单元,用于根据打包时长的倍数设置定时器;读取单元,用于当定时单元设置的定时器超时时从流媒体文件中读取数据,读取的数据量为单个数据包的所述倍数;以及打包单元,用于将读取单元读取的数据打包。
对于转存模块,它的一种结构可以是包括:时间队列单元,用于按照预设的时间间隔设置时间队列的各个位置,以及将数据包按照打包的先后顺序保存在时间队列中,记录每个数据包在时间队列中的位置;检查单元,用于根据时间先后次序逐一检查时间队列中各位置上是否有数据包;转存单元,用于在检查单元确认时间队列中的位置上有数据包后,将该数据包转存到发送模块。
对于转存模块的这种结构,其中的时间队列单元可进一步用于针对多个通道中的每个通道,按照该通道的数据打包的先后顺序将该通道的数据包保存在时间队列中;这样,检查单元可进一步用于根据时间先后次序逐一检查时间队列中各位置上是否有多个通道的数据包;并且转存单元可进一步用于在检查单元确认时间队列中的位置上有多个通道的数据包后,同时将这些多个通道的数据包转存到发送模块。
根据本实施例的技术方案,因为对于打包得到的每个数据包设置了转存时刻,并且按照数据包的转存时刻将数据包转存到发送接口,所以使数据包能够准时地到达发送接口,避免了现有技术中延时系统调用或者定时器系统调用的精确性不足而带来的影响。并且本实施例中发送接口根据从数据包中得出的发送时间发送数据包,进一步保证了数据包发出的时机。本实施例中利用时间队列来管理数据包向发送接口的转存,这样能够做到每个数据包的转存时刻都得到了记录,保证了转存数据包的时间精确性。并且利用时间队列统一管理多个通道的数据包转存,在某一时刻若有多通道数据包需转存则作统一处理,这种方式节省了系统资源,有助于提高系统的工作效率。因此,对于通过网络向终端设备提供流媒体数据的媒体服务器来说,使用本实施例的技术方案能够提高服务质量。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1、一种发送流媒体数据的方法,其特征在于,包括:
从流媒体文件中读取数据然后打包得到多个数据包,以及设置每个数据包的转存时刻;
每隔预设的时间间隔检查当前是否有数据包的转存时刻到达,以及在确认当前有数据包的转存时刻到达后将该数据包转存到发送接口,由发送接口发送该数据包。
2、根据权利要求1所述的方法,其特征在于,所述从流媒体文件中读取数据然后打包得到多个数据包之后进一步包括:记录每个数据包的发送时刻;
所述由发送接口发送该数据包,包括:由发送接口根据记录的每个数据包的发送时刻发送数据包。
3、根据权利要求1或2所述的方法,其特征在于,所述从流媒体文件中读取数据然后打包得到多个数据包,包括:
根据打包时长的倍数设置定时器,当定时器超时时从流媒体文件中读取数据,读取的数据量为多个数据包的数据量,然后将读取的数据打包。
4、根据权利要求1或2所述的方法,其特征在于,所述设置每个数据包的转存时刻,包括:
将数据包按照打包的先后顺序保存在时间队列中,记录每个数据包在时间队列中的位置;
所述预设的时间间隔包括时间队列相邻位置的时间间隔;
所述每隔预设的时间间隔检查当前是否有数据包的转存时刻到达,包括:
根据时间先后次序逐一检查时间队列中各位置上是否有数据包。
5、根据权利要求4所述的方法,其特征在于,所述将数据包按照打包的先后顺序保存在时间队列中,包括:
针对多个通道中的每个通道,按照该通道的数据打包的先后顺序将该通道的数据包保存在时间队列中;
所述确认当前有数据包的转存时刻到达后将该数据包转存到发送接口,包括:
确认当前有多个通道的数据包的转存时刻到达,然后同时将这些多个通道的数据包转存到发送接口。
6、一种发送流媒体数据的装置,其特征在于,包括打包模块、转存模块和发送模块,其中,
打包模块,用于从流媒体文件中读取数据然后打包得到多个数据包;
转存模块,用于设置每个数据包的转存时刻,每隔预设的时间间隔检查当前是否有数据包的转存时刻到达,以及在确认当前有数据包的转存时刻到达后将该数据包转存到发送模块;
发送模块,用于发送来自于转存模块的数据包。
7、根据权利要求6所述的装置,其特征在于,所述打包模块进一步用于记录每个数据包的发送时刻;
所述发送模块进一步用于根据打包模块记录的每个数据包的发送时刻发送每个数据包。
8、根据权利要求6或7所述的装置,其特征在于,所述打包模块包括:
定时单元,用于根据打包时长的倍数设置定时器;
读取单元,用于当定时单元设置的定时器超时时从流媒体文件中读取数据,读取的数据量为单个数据包的所述倍数;
打包单元,用于将读取单元读取的数据打包。
9、根据权利要求6或7所述的装置,其特征在于,所述转存模块包括:
时间队列单元,用于按照预设的时间间隔设置时间队列的各个位置,以及将数据包按照打包的先后顺序保存在时间队列中,记录每个数据包在时间队列中的位置;
检查单元,用于根据时间先后次序逐一检查时间队列中各位置上是否有数据包;
转存单元,用于在检查单元确认时间队列中的位置上有数据包后,将该数据包转存到发送模块。
10、根据权利要求9所述的装置,其特征在于,所述时间队列单元进一步用于针对多个通道中的每个通道,按照该通道的数据打包的先后顺序将该通道的数据包保存在时间队列中;
所述检查单元进一步用于根据时间先后次序逐一检查时间队列中各位置上是否有多个通道的数据包;
所述转存单元进一步用于在检查单元确认时间队列中的位置上有多个通道的数据包后,同时将这些多个通道的数据包转存到发送模块。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910164895A CN101631128A (zh) | 2009-08-19 | 2009-08-19 | 发送流媒体数据的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200910164895A CN101631128A (zh) | 2009-08-19 | 2009-08-19 | 发送流媒体数据的方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101631128A true CN101631128A (zh) | 2010-01-20 |
Family
ID=41576073
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910164895A Pending CN101631128A (zh) | 2009-08-19 | 2009-08-19 | 发送流媒体数据的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101631128A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107222793A (zh) * | 2017-05-05 | 2017-09-29 | 浙江大华技术股份有限公司 | 一种数据传输的方法及装置 |
CN108989314A (zh) * | 2018-07-20 | 2018-12-11 | 北京木瓜移动科技股份有限公司 | 一种流式数据传输、处理方法及装置 |
CN110502545A (zh) * | 2019-08-15 | 2019-11-26 | 中国平安财产保险股份有限公司 | 数据存储方法、装置、设备及计算机可读存储介质 |
-
2009
- 2009-08-19 CN CN200910164895A patent/CN101631128A/zh active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107222793A (zh) * | 2017-05-05 | 2017-09-29 | 浙江大华技术股份有限公司 | 一种数据传输的方法及装置 |
CN107222793B (zh) * | 2017-05-05 | 2019-11-19 | 浙江大华技术股份有限公司 | 一种数据传输的方法及装置 |
CN108989314A (zh) * | 2018-07-20 | 2018-12-11 | 北京木瓜移动科技股份有限公司 | 一种流式数据传输、处理方法及装置 |
CN110502545A (zh) * | 2019-08-15 | 2019-11-26 | 中国平安财产保险股份有限公司 | 数据存储方法、装置、设备及计算机可读存储介质 |
CN110502545B (zh) * | 2019-08-15 | 2023-12-05 | 中国平安财产保险股份有限公司 | 数据存储方法、装置、设备及计算机可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101340574B (zh) | 一种实现零拷贝发送流媒体数据的方法及系统 | |
RU2477930C2 (ru) | Способ и система для передачи потоковых мультимедийных данных с нулевым копированием | |
JP5795592B2 (ja) | 中央制御装置により制御されるデータパケットを受信し記憶する装置および方法 | |
CN101075930B (zh) | 网络存储装置 | |
US7508815B2 (en) | Method and system for facilitating network troubleshooting | |
US20050240688A1 (en) | Efficient data transfer from an ASIC to a host using DMA | |
JP5749732B2 (ja) | キューの充填レベルの更新を制御することにより帯域幅を節約しながらデータを受信し記憶するアセンブリおよび方法 | |
KR101738620B1 (ko) | 시간 스탬핑 및 중앙 제어기를 사용한 복수의 어댑터들에 의한 데이터 프레임들의 분산 처리 | |
CN102750238A (zh) | 用于连接到主机的存储设备的优化的提示模型和用于存储设备的写优化方案 | |
CN101877666B (zh) | 基于零拷贝方式的多应用程序报文接收方法和装置 | |
CN104717189A (zh) | 网络数据包的发送方法及装置 | |
CN101631128A (zh) | 发送流媒体数据的方法和装置 | |
CN112199309A (zh) | 基于dma引擎的数据读取方法、装置和数据传输系统 | |
CN105488108A (zh) | 一种多个视频文件高速并行存储的方法及装置 | |
CN110716695A (zh) | 一种节点日志的存储方法、系统、电子设备及存储介质 | |
CN111416763A (zh) | 消息推送方法 | |
JP2003122703A (ja) | 複数のデータ・ストリームを管理するためのバッファ分割 | |
EP3776234B1 (en) | Store and forward logging in a content delivery network | |
US20030061414A1 (en) | Controlling data flow between processor systems | |
EP4296842A1 (en) | Storage devices, methods of operating storage devices, and streaming systems including storage devices | |
CN103442091A (zh) | 一种数据传输方法及装置 | |
US6766423B2 (en) | Message-based memory system for DSP storage expansion | |
US10430352B1 (en) | Methods and apparatus for reduced overhead data transfer with a shared ring buffer | |
CN107911317B (zh) | 一种报文调度方法及装置 | |
CN113992609B (zh) | 一种处理多链路业务数据乱序的方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20100120 |