视频流分发方法技术

技术编号:15355714 阅读:88 留言:0更新日期:2017-05-17 14:13
视频流分发方法,涉及流媒体传输,尤其是一种分发性能高,负载均衡的视频流分发方法。本发明专利技术的视频流分发方法,其特征在于该方法包括数据源线程与分发线程,一个数据源线程对应N个分发线程,一个分发线程仅对应一个数据源线程。本发明专利技术的视频流分发方法,在同等硬件资源的条件下,有效提高了流媒体的分发性能,支持更多的请求者,且能够很好的提高请求端显示的实时性,充分利用了已有硬件资源,做到了负载均衡。

【技术实现步骤摘要】

本专利技术涉及流媒体传输,尤其是一种分发性能高,负载均衡的视频流分发方法
技术介绍
在开发流媒体平台的过程中,为了解决前端设备,如摄像机、IPSAN或DVR等设备的压力,翼板都采用了流分发策略。在硬件环境同等的条件下,如何提高分发效率是一个技术难题。当前普遍采用的方式有两种:1、数据源和分发处理在同一个线程,此种方式分发效率不高,且分发的份数也不多;2、每个分发对象是一个线程,此种方式过多占用线程资源,每个线程没有得到充分利用,线程过多在线程切换时也会消耗资源;以上两种方式在请求者过多时都会出现接收延时,显示滞后的问题,没有考虑到负载均衡。
技术实现思路
本专利技术所要解决的就是现有流媒体分发过程中,分发效率低,资源占用高,导致接收延时,显示滞后的问题,提供一种分发性能高,负载均衡的视频流分发方法。本专利技术的视频流分发方法,其特征在于该方法包括数据源线程与分发线程,一个数据源线程对应N个分发线程,一个分发线程仅对应一个数据源线程;具体分发步骤如下:1)、建立线程池,将线程池中的线程分为数据源线程和分发线程,并建立对应原则;2)、为数据源线程建立循环队列,该队列默认缓存50帧数据,循环队列的头指向新入队列的数据,循环队列的尾指向获取数据的位置;3)、每个分发线程有一个指向共享队列取数据的指针,指针初始指向位置是循环队列的头的上一帧数据;4)、设定分发线程的分发数量上限;5)、当新分发任务添加时,先找到该任务的数据源线程,此时有以下两种情况:A、该任务未建立数据源线程,则从线程池中抽取空闲线程创建数据源线程,同时抽取线程池的空闲线程建立该任务的分发线程;B、该任务存在数据源线程,找到该数据源对应的所有分发线程,从中找到任务量最少的分发线程,若所有分发线程均达到分发上限,则抽取线程池的空闲线程建立该任务新的分发线程;6)、当数据源线程销毁时,释放该数据源线程以及其对应的所有分发线程,数据源线程及分发线程进入线程池待用。上述分发步骤中,当仅删除一个分发线程时,则通过该分发线程对应的数据源线程找到该数据源线程对应的其他分发线程,对剩余所有分发线程的分发任务进行平均分配,以达到分发线程任务的均衡。所述的分发线程的数据读取策略是:当分发线程在从数据源循环队列获取数据时,发现自己与数据源的写入位置相差比较大的时候,会一次读取多帧数据进行发送,且读取的位置不能超过写入位置。所述的每个分发线程的分发任务不超过三个。所述的线程池中线程数量为服务器所用cpu线程的两倍。本专利技术的视频流分发方法,在同等硬件资源的条件下,有效提高了流媒体的分发性能,支持更多的请求者,且能够很好的提高请求端显示的实时性,充分利用了已有硬件资源,做到了负载均衡。具体实施方式实施例1:一种视频流分发方法,包括数据源线程与分发线程,一个数据源线程对应N个分发线程,一个分发线程仅对应一个数据源线程;具体分发步骤如下:1)、建立线程池,创建两倍于服务器所使用的cpu的线程数,并将线程池中的线程分为数据源线程和分发线程,建立对应原则,即一个数据源线程对应N个分发线程,一个分发线程仅对应一个数据源线程;2)、为数据源线程建立循环队列,该队列默认缓存50帧数据,循环队列的头指向新入队列的数据,循环队列的尾指向获取数据的位置;3)、每个分发线程有一个指向共享队列取数据的指针,指针初始指向位置是循环队列的头的上一帧数据;4)、设定分发线程的分发数量上限,每个分发线程的分发任务不超过三个;5)、当新分发任务添加时,先找到该任务的数据源线程,此时有以下两种情况:A、该任务未建立数据源线程,则从线程池中抽取空闲线程创建数据源线程,同时抽取线程池的空闲线程建立该任务的分发线程;B、该任务存在数据源线程,找到该数据源对应的所有分发线程,从中找到任务量最少的分发线程,若所有分发线程均达到分发上限,则抽取线程池的空闲线程建立该任务新的分发线程;6)、当数据源线程销毁时,释放该数据源线程以及其对应的所有分发线程,数据源线程及分发线程进入线程池待用;当仅删除一个分发线程时,则通过该分发线程对应的数据源线程找到该数据源线程对应的其他分发线程,对剩余所有分发线程的分发任务进行平均分配,以达到分发线程任务的均衡。分发线程的数据读取策略是:当分发线程在从数据源循环队列获取数据时,发现自己与数据源的写入位置相差比较大的时候,会一次读取多帧数据进行发送,且读取的位置不能超过写入位置。本文档来自技高网...

【技术保护点】
一种视频流分发方法,其特征在于该方法包括数据源线程与分发线程,一个数据源线程对应N个分发线程,一个分发线程仅对应一个数据源线程;具体分发步骤如下:1)、建立线程池,将线程池中的线程分为数据源线程和分发线程,并建立对应原则;2)、为数据源线程建立循环队列,该队列默认缓存50帧数据,循环队列的头指向新入队列的数据,循环队列的尾指向获取数据的位置;3)、每个分发线程有一个指向共享队列取数据的指针,指针初始指向位置是循环队列的头的上一帧数据;4)、设定分发线程的分发数量上限;5)、当新分发任务添加时,先找到该任务的数据源线程,此时有以下两种情况:A、该任务未建立数据源线程,则从线程池中抽取空闲线程创建数据源线程,同时抽取线程池的空闲线程建立该任务的分发线程;B、该任务存在数据源线程,找到该数据源对应的所有分发线程,从中找到任务量最少的分发线程,若所有分发线程均达到分发上限,则抽取线程池的空闲线程建立该任务新的分发线程;6)、当数据源线程销毁时,释放该数据源线程以及其对应的所有分发线程,数据源线程及分发线程进入线程池待用。

【技术特征摘要】
1.一种视频流分发方法,其特征在于该方法包括数据源线程与分发线程,一个数据源线程对应N个分发线程,一个分发线程仅对应一个数据源线程;具体分发步骤如下:1)、建立线程池,将线程池中的线程分为数据源线程和分发线程,并建立对应原则;2)、为数据源线程建立循环队列,该队列默认缓存50帧数据,循环队列的头指向新入队列的数据,循环队列的尾指向获取数据的位置;3)、每个分发线程有一个指向共享队列取数据的指针,指针初始指向位置是循环队列的头的上一帧数据;4)、设定分发线程的分发数量上限;5)、当新分发任务添加时,先找到该任务的数据源线程,此时有以下两种情况:A、该任务未建立数据源线程,则从线程池中抽取空闲线程创建数据源线程,同时抽取线程池的空闲线程建立该任务的分发线程;B、该任务存在数据源线程,找到该数据源对应的所有分发线程,从中找到任务量最少的分发线程,若所有分发线程均达到分发上限,则...

【专利技术属性】
技术研发人员:邵宗凯朱加权马万兵田灵
申请(专利权)人:昆明联诚科技股份有限公司
类型:发明
国别省市:云南;53

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1