本发明涉及的是一种图像通信领域的技术,具体是一种流媒体数据发送方法。
背景技术:
网络摄像机是采集外界数据的专用设备,是目前安防领域重要的一个组成部分。在捕捉图像的同时也提供了网络传输的功能,因此如何组织、存储和转发流媒体数据成了必须要面对的一个问题。该项服务需解决的是一个很明显的生产者消费者问题,流媒体数据的生产者负责将产生的数据写入缓冲区中,网络发送模块作为媒体数据的消费者负责将数据取走并发送,但是生产与消费之间速度与状态的不对等加重了问题处理的复杂性。
在码流的生产消费模型中一般采用以下处理方式:由若干“控制信息块”来记录环形缓冲区的状态。采用系统提供的互斥访问手段来组织环形帧缓冲,以达到“帧数据”的生产与消费。该“控制信息块”是多个生产者和多个消费者之间沟通的媒介,通常采用进程和线程的同步方法解决访问问题,常用的方法有互斥锁和信号量等,如果解决方法不够完善,则容易出现计算资源的浪费甚至死锁的情况。
技术实现要素:
本发明针对现有技术存在的上述不足,提出一种流媒体数据发送方法。本发明通过设置多个独立的缓冲区,提高了数据的处理能力,发送之前计算发送位置的q值,根据q值直接判断是否进行发送操作,从而提高了响应的速度,减少了系统资源的开销。
本发明是通过以下技术方案实现的:
本发明涉及一种流媒体数据发送方法,其中,应用于网络摄像机,在所述网络摄像机的内存中预先设置多个缓冲区,每一所述缓冲区为首尾相接的环形缓冲区;
所述缓冲区中设有一预设长度的滑动窗口;
每一缓冲区独立的执行流媒体数据的发送过程,所述发送过程包括:
步骤s1,以所述流媒体数据的当前的写入位置作为进行发送操作的发送位置;
步骤s2,比较发送位置和所述写入位置:
若所述写入位置大于所述发送位置且所述发送位置和所述写入位置之间的距离小于等于所述滑动窗口的所述预设长度,进行所述发送操作;
否则,中止所述发送操作。
优选的,该流媒体数据发送方法,其中,在所述步骤s2中,通过所述发送位置处的q值表征所述发送位置和所述写入位置之间的距离小于所述滑动窗口的所述预设长度:
若q值大于等于0,则所述发送位置和所述写入位置之间的距离小于等于所述滑动窗口的所述预设长度;
若q值小于0,则所述发送位置和所述写入位置之间的距离大于所述滑动窗口的所述预设长度。
优选的,该流媒体数据发送方法,其中,所述q值的计算公式为:q=((x+l)modl)-y,其中:x为所述发送位置,y为所述写入位置,l为所述滑动窗口的所述预设长度,l为所述缓冲区的长度。
优选的,该流媒体数据发送方法,其中,所述流媒体数据封装于多个具有预设格式的数据包,所述预设格式包括:协议包头、所述流媒体数据的信息头以及用于存放所述流媒体数据的数据段。
优选的,该流媒体数据发送方法,其中,每一所述缓冲区中的所述流媒体数据通过一独立的写入过程写入,所述的写入过程包括:
步骤a1,在所述缓冲区的所述写入位置写入所述流媒体数据;
步骤a2,将所述写入位置与所述缓冲区的尾端之间的容量作为剩余空间,将所述剩余空间和所述数据包的大小进行比较:
若所述剩余空间不足以存储所述数据包的所述协议包头,则在所述缓冲区的头部开始写入所述数据包;
若所述剩余空间不足以存储所述数据包且足以存储所述协议包头,则在所述剩余空间写入所述数据包的所述协议包头,并将所述数据包的其余部分从所述缓冲区的头部写入;
若所述剩余空间足以存储所述数据包,则继续写入所述数据包。
优选的,该流媒体数据发送方法,其中,所述的流媒体数据包括音频数据和视频数据。
优选的,该流媒体数据发送方法,其中,所述音频数据的所述写入操作和所述视频数据的写入操作互斥。
优选的,该流媒体数据发送方法,其中,每一所述缓冲区的大小为2nbit,其中n为大于零的整数。
优选的,该流媒体数据发送方法,其中,所述缓冲区包括一大小为8mb的第一缓冲区、一大小为4mb的第二缓冲区以及一大小为4mb的第三缓冲区。
上述技术方案的有益效果是:
本发明通过设置多个独立的缓冲区,提高了数据的处理处理能力,发送之前计算发送位置的q值,根据q值直接判断是否进行发送操作,从而提高了响应的速度,减少了系统资源的开销。
附图说明
图1为本发明的较佳的实施例中,一种流媒体数据发送方法的流程示意图;
图2为本发明的较佳的实施例中,一种流媒体数据发送方法的缓冲区结构示意图;
图3为本发明的较佳的实施例中,一种流媒体数据发送方法的滑动窗口位置示意图;
图4本发明的较佳的实施例中,一种流媒体数据发送方法的多个发送操作过程示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚和完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
下面结合附图和具体实施例对本发明作进一步说明,但不作为本发明的限定。
本实施例涉及一种流媒体数据发送方法,适用于网络摄像头产生的数据的传输,网络摄像头需要一流媒体的形式将其产生的数据通过网络发送。
流媒体数据封装于多个具有预设格式的数据包,预设格式包括:协议包头、流媒体数据的信息头以及用于存放流媒体数据的数据段。
的流媒体数据包括音频数据和视频数据。
如图1所示,本实施例中,在网络摄像机的内存中预先设置多个缓冲区,每一缓冲区为首尾相接的环形缓冲区;
缓冲区中设有一预设长度的滑动窗口;
每一缓冲区独立的执行流媒体数据的发送过程,发送过程包括:
步骤s1,以流媒体数据的当前的写入位置作为进行发送操作的发送位置;
步骤s2,比较发送位置和写入位置:
若写入位置大于发送位置且发送位置和写入位置之间的距离小于等于滑动窗口的预设长度,进行发送操作;
否则,中止发送操作。
在步骤s2中,通过发送位置处的q值表征发送位置和写入位置之间的距离小于滑动窗口的预设长度:
若q值大于等于0,则发送位置和写入位置之间的距离小于等于滑动窗口的预设长度;
若q值小于0,则发送位置和写入位置之间的距离大于滑动窗口的预设长度。
每一缓冲区中的流媒体数据通过一独立的写入过程写入,的写入过程包括:
步骤a1,在缓冲区的写入位置写入流媒体数据;
步骤a2,将写入位置与缓冲区的尾端之间的容量作为剩余空间,将剩余空间和数据包的大小进行比较:
若剩余空间不足以存储数据包的协议包头,则在缓冲区的头部开始写入数据包;
若剩余空间不足以存储数据包且足以存储协议包头,则在剩余空间写入数据包的协议包头,并将数据包的其余部分从缓冲区的头部写入;
若剩余空间足以存储数据包,则继续写入数据包。
如图2所示,本实施例中,在内存中预先设置多个条形的缓冲区,通过缓冲区来暂时存放生产者产生的流媒体数据。
每一个缓冲区都为共享区域,这样可以便于其它进程对缓冲区进行访问。
每一缓冲区的大小为2nbit,其中n为大于零的整数。
在每一缓冲区中,首先进行流媒体数据的写入操作以形成一写入数据流,而后在流媒体数据的存放区域的多个发送位置进行发送操作以形成多个独立的发送数据流。
缓冲区中需要对流媒体数据中的视频数据以及音频数据进行写入,音频的写入线程和视频数据的写入线程互斥。流媒体数据的写入位置即为写入指针所指向的位置。音频数据的写入线程和视频数据写入线程分别在写入指针所指向的缓冲区位置进行写入操作。
每一个缓冲区都可以进行写入操作以及发送操作,并且在同一个缓冲区中可以有多个线程同时进行发送操作。同一个缓冲区中的不同发送线程在其对应的发送位置即发送指针所指向的位置进行发送操作。
这样,在每一缓冲区中,存在一个写入数据流和多个发送数据流。写入线程以写入指针所指向的位置为写入位置。每一个发送线程都对写入缓冲区中的数据进行发送,从而形成多个独立的发送数据流。
网络摄像头所产生的所有的视频数据和音频数据通过各个缓冲区来进行缓冲,在每一个缓冲区内都有多个发送线程形成发送数据流,将摄像头产生的视频数据和音频数据发送出去。
较佳的实施例中,缓冲区包括一大小为8mb的第一缓冲区、一大小为4mb的第二缓冲区以及一大小为4mb的第三缓冲区。
如图3所示,在每一个缓冲区中设置一个滑动窗口,通过滑动窗口来控制生产者和消费者之间的距离,即各个发送位置和写入位置之间的距离。通过滑动窗口来防止缓冲区中的某一个发送数据流发送数据过慢,从而导致数据积压过多。
当发送位置和写入位置之间的数据过多时,写入位置就可能在存有未发送的数据位置进行写入操作,从而覆盖了原有的数据。
在每一发送数据流中,每次进行发送操作之前,获得发送位置处的q值:
若q值大于等于0,则进行发送数据流的发送操作;
若q值小于0,则中止发送数据流的发送操作。
q值的计算公式为:
q=((x+l)modl)-y;
其中:x为发送数据流的发送位置;
y为写入位置;
l为设置于每一缓冲区中一滑动窗口的预设长度;
l为缓冲区的长度。
当q值小于0时,则表示该发送数据流发送数据过慢,即进行发送操作的发送位置与进行写入操作的写入位置之间的距离过大,这样就导致了发送位置和写入位置之间的数据积压。这时,需要进行中止该发送数据流的发送操作。
发送数据流中止后,可以将发送位置提前,即跳过一定大小的数据段,从而使得该发送数据流的发送位置的q值大于等于0。
发送数据流中止后,也可以采取间隔发送策略,即将发送指针略过缓冲区中部分区域,实现间隔发送数据,从而提高整个发送数据流的发送速度。
发送数据流中止后,也可将进行该发送操作的线程进行重置,从而解决发送过慢的问题。
若缓冲区的尾部的剩余空间小于数据包,则将数据包的协议包头与剩余空间比较:
若剩余空间小于数据包,则在缓冲区的头部开始写入数据包;
若剩余空间大于等于数据包,则在剩余空间写入数据包的协议包头,并将数据包的其余部分从缓冲区的头部写入。
相应的,若剩余空间存在数据包的协议包头,则发送数据流对应的发送指针指向该存有协议包头的位置,将该数据包头发送。否则,则发送数据流的发送指针跳转到该缓冲区的头部的起始位置进行发送操作。
如图4所示,图中的缓冲区存在三个发送位置,即有三个发送线程同时发送数据。
处于滑动窗口内的发送位置处的q至大于等于0,数据并未积压,对该位置继续进行发送操作,通过形成的发送数据流发送流媒体数据。而处于滑动窗口以外的灰色区域内的发送位置出的q至小于0,数据积压,则中止发送,中止该发送线程。
本发明的流媒体数据发送方法,与现有技术相比:
本发明通过设置多个独立的缓冲区,提高了数据的处理处理能力,发送之前计算发送位置的q值,根据q值直接判断是否进行发送操作,从而提高了响应的速度,减少了系统资源的开销。
以上所述仅为本发明较佳的实施例,并非因此限制本发明的实施方式及保护范围,对于本领域技术人员而言,应当能够意识到凡运用本发明说明书及图示内容所作出的等同替换和显而易见的变化所得到的方案,均应当包含在本发明的保护范围内。