CN108270732A - 一种流媒体处理方法及系统 - Google Patents
一种流媒体处理方法及系统 Download PDFInfo
- Publication number
- CN108270732A CN108270732A CN201611261387.1A CN201611261387A CN108270732A CN 108270732 A CN108270732 A CN 108270732A CN 201611261387 A CN201611261387 A CN 201611261387A CN 108270732 A CN108270732 A CN 108270732A
- Authority
- CN
- China
- Prior art keywords
- data packet
- task
- thread
- communication handle
- completing port
- 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.)
- Granted
Links
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L65/00—Network arrangements, protocols or services for supporting real-time applications in data packet communication
- H04L65/60—Network streaming of media packets
- H04L65/75—Media network packet handling
- H04L65/765—Media network packet handling intermediate
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/133—Protocols for remote procedure calls [RPC]
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/2866—Architectures; Arrangements
- H04L67/2876—Pairs of inter-processing entities at each side of the network, e.g. split proxies
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/34—Network arrangements or protocols for supporting network services or applications involving the movement of software or configuration parameters
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L69/00—Network arrangements, protocols or services independent of the application payload and not provided for in the other groups of this subclass
- H04L69/16—Implementation or adaptation of Internet protocol [IP], of transmission control protocol [TCP] or of user datagram protocol [UDP]
- H04L69/161—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields
- H04L69/162—Implementation details of TCP/IP or UDP/IP stack architecture; Specification of modified or new header fields involving adaptations of sockets based mechanisms
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Multimedia (AREA)
- Computer Security & Cryptography (AREA)
- Information Transfer Between Computers (AREA)
Abstract
本发明实施例涉及流媒体服务器领域,特别是涉及一种流媒体处理方法及系统,上述方法包括:监听完成端口对应的各通信句柄;上述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与上述完成端口绑定;上述完成端口包括待处理任务队列,用来缓存待处理的数据包;若监听到客户端发送的数据包,则判断有没有工作线程在运行;若没有工作线程在运行,则启用线程池中的一个空闲线程为工作线程;上述工作线程轮询上述完成端口的待处理任务队列,若上述待处理任务队列中存在数据包,则解析并处理上述数据包。本发明实施例使得信令和媒体流能够得到及时处理,提升了用户体验。
Description
技术领域
本发明涉及流媒体服务器领域,特别是涉及一种流媒体处理方法及系统。
背景技术
随着网络科技的快速发展,企业对高性能服务器的性能要求也越来越高,尤其是在高峰期,面临万级用户同时访问,为了保证实时性,一般通过多线程的方式来完成,即一个客户端连入,至少需要启动一个新的线程和客户端进行通信,因此系统不得不在所有可运行的线程之间进行上下文的切换,而线程切换是相当浪费CPU时间的;如果连入客户终端过多,则会导致音视频实时性差,并且客户终端数量还受到线程数的限制。
现有的技术方案是采用IOCP(I/O Completion Port,I/O完成端口,简称完成端口),通过异步收发的模式,用尽可能少的线程来处理与大量客户端的所有通信,但是因为采用异步处理,因此信令和媒体流处理不及时,有很大延时,用户体验不好。
发明内容
鉴于上述问题,提出了本发明实施例以便提供一种克服上述问题或者至少部分地解决上述问题的一种流媒体处理方法及系统。
为了解决上述问题,本发明实施例公开了一种流媒体处理方法,包括:
监听完成端口对应的各通信句柄;所述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与所述完成端口绑定;所述完成端口包括待处理任务队列,用来缓存待处理的数据包;
若监听到客户端发送的数据包,则判断有没有工作线程在运行;
若没有工作线程在运行,则启用线程池中的一个空闲线程为工作线程;
所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包。
优选地,在所述监听完成端口对应的通信句柄的步骤之前还包括:
监听各通信句柄,若监听到客户端的连接,则将对应的通信句柄与完成端口绑定;
投递给所述对应的通信句柄一个接收请求;所述接收请求在接收完数据包后会发出完成通知;
若接收到所述完成通知,则将所述数据包与对应的通信句柄封装,放置于所述完成端口的待处理任务队列中,并且投递给所述对应的通信句柄一个接收请求。
优选地,所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包的步骤包括:
所述工作线程轮询所述完成端口的待处理任务队列;
若所述待处理任务队列中存在数据包,则解析所述数据包;
若所述数据包为信令,则对所述信令进行响应;
若所述数据包为媒体流,则根据所述数据包的包头信息,将所述数据包发送出去;
清除所述待处理任务队列中的所述数据包。
优选地,在所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包的步骤之后还包括:
若所述待处理任务队列中没有数据包,则回收所述工作线程为空闲线程。
优选地,所述通信句柄采用socket,并采用心跳机制维持socket连接。
另一方面,本发明实施例公开了一种流媒体处理系统,所述系统包括流媒体服务器,所述流媒体服务器包括:
监听模块,用于监听完成端口对应的各通信句柄;所述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与所述完成端口绑定;所述完成端口包括待处理任务队列,用来缓存待处理的数据包;
线程运行判断模块,用于若监听到客户端发送的数据包,则判断有没有工作线程在运行;
线程启用模块,用于若没有工作线程在运行,则启用线程池中的一个空闲线程为工作线程;
处理模块,用于所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包。
优选地,所述流媒体服务器还包括:
通信句柄绑定模块,用于监听各通信句柄,若监听到客户端的连接,则将对应的通信句柄与完成端口绑定;
接收请求投递模块,用于投递给所述对应的通信句柄一个接收请求;所述接收请求在接收完数据包后会发出完成通知;
数据缓存模块,用于若接收到所述完成通知,则将所述数据包与对应的通信句柄封装,放置于所述完成端口的待处理任务队列中,并且投递给所述对应的通信句柄一个接收请求。
优选地,所述处理模块包括:
轮询模块,用于所述工作线程轮询所述完成端口的待处理任务队列;
解析模块,用于若所述待处理任务队列中存在数据包,则解析所述数据包;
信令处理模块,用于若所述数据包为信令,则对所述信令进行响应;
媒体流处理模块,用于若所述数据包为媒体流,则根据所述数据包的包头信息,将所述数据包发送出去;
清除模块,用于清除所述待处理任务队列中的所述数据包。
优选地,所述流媒体服务器还包括:
线程回收模块,用于若所述待处理任务队列中没有数据包,则回收所述工作线程为空闲线程。
优选地,所述通信句柄采用socket,并采用心跳机制维持socket连接。
本发明实施例包括以下优点:
本发明实施例在IOCP模式的基础上,若监听到客户端发送的数据包,则采用线程池中的线程轮询完成端口的待处理任务队列,同步处理待处理任务队列中的数据包,使得信令和媒体流能够得到及时处理,提升了用户体验。
附图说明
图1是本发明实施例的技术方案的简单示意图;
图2是本发明实施例的技术方案的另一简单示意图;
图3是本发明实施例一提供的一种流媒体处理方法的流程示意图;
图4是本发明实施例二提供的另一种流媒体处理方法的流程示意图;
图5是本发明实施例三提供的一种流媒体处理系统的结构框图;
图6是本发明实施例四提供的另一种流媒体处理系统的结构框图。
具体实施方式
为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。
参照图1与图2所示,示出了本发明实施例的技术方案的简单示意图,在流媒体服务器与多个客户端的交互场景下,在IOCP模式(异步收发)的基础上,对信令和媒体流,采用异步接收结合同步发送的处理方式,即异步接收数据包并缓存于待处理任务队列中等待处理,而当监测到客户端发送的数据包时,则判断有没有线程池中的工作线程正在运行,如果没有,则启用线程池中的空闲线程为工作线程,采用轮询的方式,当待处理任务队列中存在数据包时,解析并处理待处理任务队列中的数据包,即同步处理;更进一步地,采用socket通信句柄进行通信,并采用心跳机制维持socket连接。
实施例一:
参照图3所示,本发明实施例提供了一种流媒体处理方法,包括步骤301-304:
步骤301:监听完成端口对应的各通信句柄;所述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与所述完成端口绑定;所述完成端口包括待处理任务队列,用来缓存待处理的数据包。
流媒体服务器监听所述完成端口对应的各通信句柄;所述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与所述完成端口绑定;相当于所述完成端口通过各通信句柄与对应的各客户端绑定;所述完成端口包括待处理任务队列,用来缓存待处理的数据包,即各客户端通过对应的通信句柄发送的数据包缓存于共同绑定的所述完成端口的待处理任务队列中。因为接收到的数据包有可能不是一个完整包,或者接收到的数据包超过一个包的大小,因此需要把接收的数据包进行缓存,还可以进行分包处理。
所述流媒体服务器初始化时,需要调用相关函数函数创建一个完成端口,比如CreateIoCompletionPort()函数,相关参数分别为:FileHandle是关联的文件句柄;ExistingCompletionPort是已经存在的完成端口,如果为NULL,则为新建一个IOCP;CompletionKey是传送给处理函数的参数,一般可以为0;NumberOfConcurrentThreads是有多少个线程在访问这个完成端口对应的待处理任务队列,当参数不为0的时候,系统忽略该参数,当该参数为0表示允许同时相等数目于CPU核心的线程访问该完成端口对应的待处理任务队列。在一般情况下,只需要建立一个完成端口,相当于申请一块内存资源,用来缓存已连接的各客户端发送的数据包。
此外还需要创建监听的通信句柄,比如在互联网环境下创建socket通信句柄,首先初始化socket动态链接库,然后对socket进行初始化,将socket与所述流媒体服务器端口绑定;当通过socket监听到客户端的连接成功时,得到客户端的地址,成功建立socket连接。
当通过通信句柄与客户端建立连接后,将所述通信句柄与所述完成端口绑定;如此,所述完成端口与多个已连接的通信句柄绑定,相当于同时与多个已连接的客户端(相当于完成端口的对象)绑定,可以同时管理多个客户端的I/O请求。此时,仍然可以采用CreateIoCompletionPort()函数完成绑定。
同时,还需要创建线程池,同时将线程池中的线程与所述完成端口绑定。根据实际需要可以修改所创建的线程池中线程的数量,而一般情况下可以根据CPU的核心来确定线程的数量,理论上,N核的CPU可以同时运行N个线程。在本发明实施例中,对线程池中的线程数量不做限制。优选地,采用线程数量为3,因为在本发明中采用了同步线程非阻塞模式来处理,即线程池中的工作线程轮询所述待处理任务队列,若所述待处理任务队列中存在数据包,则进行处理;因此只需要极少数的线程即可完成待处理任务队列中数据包的处理。在创建线程池的过程中还要做一些相关的初始化操作,例如添加信号量(用来保证线程安全,例如当设定的事件触发时,用来唤醒线程池中的线程)。
步骤302:若监听到客户端发送的数据包,则判断有没有工作线程在运行。
所述流媒体服务器若通过通信句柄监听到,所述通信句柄对应的客户端发送的数据包,则判断有没有工作线程在运行;即可以是所述通信句柄对应的客户端发送数据包这一事件,触发了数据包的处理机制,先判断有没有工作线程在运行,所述工作线程为线程池中的工作线程,用来处理待处理任务队列中的数据包;通过所述通信句柄对应的客户端发送数据包这一事件来触发处理机制,而不是待处理任务队列中存在数据包这一事件来触发,可以使得数据包的处理更加及时。
若没有工作线程在运行,则执行步骤303;若有工作线程在运行,则无操作。
步骤303:若没有工作线程在运行,则启用线程池中的一个空闲线程为工作线程。
若没有线程池中的所述工作线程在运行,则所述流媒体服务器启用线程池中的一个空闲线程为工作线程。因为需要及时的对数据包进行处理,而且因为本发明实施例中采用同步非阻塞的线程处理模式,因此一般地只需要一个线程处于运行状态即可,当没有线程池中的所述工作线程在运行时,就需要启用线程池中的空闲线程为工作线程,来准备处理待处理任务队列中的数据包。
步骤304:所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包。
所述流媒体服务器通过所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包;所述工作线程可以通过定时发出询问,当所述待处理任务队列中存在数据包时,则解析并处理所述数据包,直到所述待处理任务队列中没有数据包。
值得说明的是,本发明实施例应用于互联网环境时,所述流媒体服务器与各客户端之间可以通过TCP/IP协议进行通信,通信句柄则采用socket。
本发明实施例包括以下优点:
本发明实施例在IOCP模式的基础上,若监听到客户端发送的数据包,则采用线程池中的线程轮询完成端口的待处理任务队列,同步处理待处理任务队列中的数据包,使得信令和媒体流能够得到及时处理,提升了用户体验。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
实施例二:
参照图4所示,本发明实施例提供了一种流媒体处理方法,包括步骤401-412:
步骤401:监听各通信句柄,若监听到客户端的连接,则将对应的通信句柄与完成端口绑定。
流媒体服务器监听各通信句柄,若监听到客户端的连接,获取所述客户端的网络地址,将所述客户端的网络地址与所述对应的通信句柄绑定,并将所述对应的通信句柄与完成端口绑定,相当于所述完成端口通过各通信句柄与各客户端绑定。
首先,参照步骤301的说明,所述流媒体服务器需要创建完成端口、通信句柄以及线程池,所述通信句柄已经与所述流媒体服务器的端口绑定,所述线程池中的线程已经与所述完成端口绑定。
步骤402:投递给所述对应的通信句柄一个接收请求;所述接收请求在接收完数据包后会发出完成通知。
在监听到客户端的连接,并将所述客户端对应的通信句柄与所述完成端口绑定之后,所述流媒体服务器投递给所述客户端对应的通信句柄一个接收请求;所述接收请求在接收完所述客户端发送的数据包后会发出完成通知。
例如,在互联网环境下,基于socket的通信句柄,所述接收请求可以通过WSARecv()函数来通过socket接收数据,并在所述流媒体服务器的操作系统完成WSARecv操作后会把完成结果发送到所述完成端口。所述WSARecv()函数的相关参数包括:s,一个标识已连接套接口(即socket)的描述字;lpBuffers,一个指向WSABUF结构数组的指针,每一个WSABUF结构包含一个缓冲区的指针和缓冲区的长度;dwBufferCount,lpBuffers数组中WSABUF结构的数目;lpNumberOfBytesRecvd,如果接收操作立即结束,一个指向本调用所接收的字节数的指针;lpFlags,一个指向标志位的指针;lpOverlapped:一个指向WSAOVERLAPPED结构的指针(对于重叠套接口而言,对于非重叠套接口则忽略);lpCompletionRoutine,一个指向接收操作结束后调用的例程的指针(对于非重叠套接口则忽略)。
步骤403:若接收到所述完成通知,则将所述数据包与对应的通信句柄封装,放置于所述完成端口的待处理任务队列中,并且投递给所述对应的通信句柄一个接收请求。
若接收到所述完成通知,则所述流媒体服务器从对应的通信句柄的缓冲区中获取所述客户端发送的数据包,并与对应的通信句柄封装,缓存于所述完成端口的待处理任务队列中,并且投递给所述对应的通信句柄一个接收请求;当再次接收到完成通知时,则再次投递给对应所述完成通知的通信句柄一个接收请求;如此循环,直至所述客户端不再发送数据包或者连接断开。
步骤404:监听完成端口对应的各通信句柄;所述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与所述完成端口绑定;所述完成端口包括待处理任务队列,用来缓存待处理的数据包。
流媒体服务器监听所述完成端口对应的各通信句柄;所述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与所述完成端口绑定;相当于所述完成端口通过各通信句柄与对应的各客户端绑定;所述完成端口包括待处理任务队列,用来缓存待处理的数据包,即各客户端通过对应的通信句柄发送的数据包缓存于共同绑定的所述完成端口的待处理任务队列中。
当通过通信句柄与客户端建立连接后,将所述通信句柄与所述完成端口绑定;如此,所述完成端口与多个已连接的通信句柄绑定,相当于同时与多个已连接的客户端(相当于完成端口的对象)绑定,可以同时管理多个客户端的I/O请求。
步骤405:若监听到客户端发送的数据包,则判断有没有工作线程在运行。
所述流媒体服务器若通过通信句柄监听到,所述通信句柄对应的客户端发送的数据包,则判断有没有工作线程在运行;即可以是所述通信句柄对应的客户端发送数据包这一事件,触发了数据包的处理机制,先判断有没有工作线程在运行,所述工作线程为线程池中的工作线程,用来处理待处理任务队列中的数据包;通过所述通信句柄对应的客户端发送数据包这一事件来触发处理机制,而不是待处理任务队列中存在数据包这一事件来触发,可以使得数据包的处理更加及时。
若没有工作线程在运行,则执行步骤406;若有工作线程在运行,则无操作。
步骤406:若没有工作线程在运行,则启用线程池中的一个空闲线程为工作线程。
若没有线程池中的所述工作线程在运行,则所述流媒体服务器启用线程池中的一个空闲线程为工作线程。因为需要及时的对数据包进行处理,而且因为本发明实施例中采用同步非阻塞的线程处理模式,因此一般地只需要一个线程处于运行状态即可,当没有线程池中的所述工作线程在运行时,就需要启用线程池中的空闲线程为工作线程,来准备处理待处理任务队列中的数据包。
步骤407:所述工作线程轮询所述完成端口的待处理任务队列。
所述流媒体服务器通过所述工作线程轮询所述完成端口的待处理任务队列,所述工作线程可以通过定时发出询问,当所述待处理任务队列中存在数据包时,则解析并处理所述数据包,直到所述待处理任务队列中没有数据包。
所述流媒体服务器通过所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则执行步骤408;若所述待处理任务队列中没有数据包,则执行步骤412。
步骤408:若所述待处理任务队列中存在数据包,则解析所述数据包。
若所述待处理任务队列中存在数据包,则所述流媒体服务器通过所述工作线程解析所述数据包,判断所述数据包为信令还是媒体流;若所述数据包为信令,则执行步骤409;若所述数据包为媒体流,则执行步骤410。
步骤409:若所述数据包为信令,则对所述信令进行响应。
若所述数据包为信令,则所述流媒体服务器通过所述工作线程对所述信令进行响应,然后执行步骤411;信令为协调通讯过程中的命令,例如建立视频通话的过程中,所述信令可以为开始通话的命令、音视频编解码格式、带宽、客户端的地址与端口信息、连接断开等,可以通过预置的处理模式来处理,例如对信令为音视频编解码格式的响应就是将所述信令发送到对应的客户端,对信令为连接断开的响应就是分别发送ACK报文和FIN报文到对应的客户端。
步骤410:若所述数据包为媒体流,则根据所述数据包的包头信息,将所述数据包发送出去。
若所述数据包为媒体流,则所述流媒体服务器通过所述工作线程根据解析出的所述数据包的包头信息中的发送地址,将所述数据包发送出去。
步骤411:清除所述待处理任务队列中的所述数据包。
所述流媒体服务器在将所述待处理任务队列中的所述数据包发送出去之后,将所述数据包从所述待处理任务队列中清除。
步骤412:若所述待处理任务队列中没有数据包,则回收所述工作线程为空闲线程。
在所述流媒体服务器通过所述工作线程轮询所述完成端口的待处理任务队列时,若所述待处理任务队列中没有数据包,则所述流媒体服务器回收所述工作线程为空闲线程,提高线程的利用效率。
优选地,所述通信句柄采用socket,并采用心跳机制维持socket连接。
在互联网环境下,所述通信句柄采用socket,并采用心跳机制维持socket连接,因为各客户端与所述流媒体服务器在连接过程中可能长时间没有数据交互,因此可能面临连接被某些节点(例如防火墙)强行断掉的风险,因此可以由所述流媒体服务器每隔一段时间(可以设定)通过各socket通信句柄,分别发送一个固定信息,比如一个很小的数据包给各客户端,各客户端收到后回复一个固定信息,以此维持socket连接;如果所述流媒体服务器在设定时间内没有收到某客户端的信息,则视为该客户端已经断开连接。
本发明实施例包括以下优点:
本发明实施例在IOCP模式的基础上,若监听到客户端发送的数据包,则采用线程池中的线程轮询完成端口的待处理任务队列,同步解析并处理待处理任务队列中的数据包对应的信令和媒体流,使得信令和媒体流能够得到及时处理,提升了用户体验;通过线程的回收提高了线程的利用效率;通过IOCP的接收模式,即通过将与客户端已连接的通信句柄绑定到完成端口,通过异步接收数据包并缓存于待处理任务队列中等待处理,能够应对大量用户的并发需求,且降低了CPU的负担;同时在减少了线程数量的基础上,提升了服务器的负载能力。
因为本发明实施例的优选方式中,通信句柄采用socket,并采用心跳机制维持socket连接,使得连接过程稳定、安全。
需要说明的是,对于方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明实施例并不受所描述的动作顺序的限制,因为依据本发明实施例,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作并不一定是本发明实施例所必须的。
实施例三:
参照图5所示,本发明实施例提供了一种流媒体处理系统,所述系统包括流媒体服务器50,所述流媒体服务器50包括:
监听模块501,用于监听完成端口对应的各通信句柄;所述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与所述完成端口绑定;所述完成端口包括待处理任务队列,用来缓存待处理的数据包;
线程运行判断模块502,用于若监听到客户端发送的数据包,则判断有没有工作线程在运行;
线程启用模块503,用于若没有工作线程在运行,则启用线程池中的一个空闲线程为工作线程;
处理模块504,用于所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包。
本发明实施例包括以下优点:
本发明实施例在IOCP模式的基础上,若监听到客户端发送的数据包,则采用线程池中的线程轮询完成端口的待处理任务队列,同步处理待处理任务队列中的数据包,使得信令和媒体流能够得到及时处理,提升了用户体验。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
实施例四:
参照图6所示,本发明实施例提供了一种流媒体处理系统,所述系统包括流媒体服务器50,所述流媒体服务器50包括:
通信句柄绑定模块505,用于监听各通信句柄,若监听到客户端的连接,则将对应的通信句柄与完成端口绑定;
接收请求投递模块506,用于投递给所述对应的通信句柄一个接收请求;所述接收请求在接收完数据包后会发出完成通知;
数据缓存模块507,用于若接收到所述完成通知,则将所述数据包与对应的通信句柄封装,放置于所述完成端口的待处理任务队列中,并且投递给所述对应的通信句柄一个接收请求;
监听模块501,用于监听完成端口对应的各通信句柄;所述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与所述完成端口绑定;所述完成端口包括待处理任务队列,用来缓存待处理的数据包;
线程运行判断模块502,用于若监听到客户端发送的数据包,则判断有没有工作线程在运行;
线程启用模块503,用于若没有工作线程在运行,则启用线程池中的一个空闲线程为工作线程;
轮询模块50401,用于所述工作线程轮询所述完成端口的待处理任务队列;
解析模块50402,用于若所述待处理任务队列中存在数据包,则解析所述数据包;
信令处理模块50403,用于若所述数据包为信令,则对所述信令进行响应;
媒体流处理模块50404,用于若所述数据包为媒体流,则根据所述数据包的包头信息,将所述数据包发送出去;
清除模块50405,用于清除所述待处理任务队列中的所述数据包。
线程回收模块508,用于若所述待处理任务队列中没有数据包,则回收所述工作线程为空闲线程。
优选地,所述通信句柄采用socket,并采用心跳机制维持socket连接。
本发明实施例包括以下优点:
本发明实施例在IOCP模式的基础上,若监听到客户端发送的数据包,则采用线程池中的线程轮询完成端口的待处理任务队列,同步解析并处理待处理任务队列中的数据包对应的信令和媒体流,使得信令和媒体流能够得到及时处理,提升了用户体验;通过线程的回收提高了线程的利用效率;通过IOCP的接收模式,即通过将与客户端已连接的通信句柄绑定到完成端口,通过异步接收数据包并缓存于待处理任务队列中等待处理,能够应对大量用户的并发需求,且降低了CPU的负担;同时在减少了线程数量的基础上,提升了服务器的负载能力。
因为本发明实施例的优选方式中,通信句柄采用socket,并采用心跳机制维持socket连接,使得连接过程稳定、安全。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
本领域内的技术人员应明白,本发明实施例的实施例可提供为方法、装置、或计算机程序产品。因此,本发明实施例可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明实施例是参照根据本发明实施例的方法、终端设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理终端设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理终端设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理终端设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理终端设备上,使得在计算机或其他可编程终端设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程终端设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明实施例的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例做出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明实施例范围的所有变更和修改。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者终端设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者终端设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者终端设备中还存在另外的相同要素。
以上对本发明所提供的一种流媒体处理方法及系统,进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (10)
1.一种流媒体处理方法,其特征在于,包括:
监听完成端口对应的各通信句柄;所述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与所述完成端口绑定;所述完成端口包括待处理任务队列,用来缓存待处理的数据包;
若监听到客户端发送的数据包,则判断有没有工作线程在运行;
若没有工作线程在运行,则启用线程池中的一个空闲线程为工作线程;
所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包。
2.根据权利要求1所述的方法,其特征在于,在所述监听完成端口对应的通信句柄的步骤之前还包括:
监听各通信句柄,若监听到客户端的连接,则将对应的通信句柄与完成端口绑定;
投递给所述对应的通信句柄一个接收请求;所述接收请求在接收完数据包后会发出完成通知;
若接收到所述完成通知,则将所述数据包与对应的通信句柄封装,放置于所述完成端口的待处理任务队列中,并且投递给所述对应的通信句柄一个接收请求。
3.根据权利要求1所述的方法,其特征在于,所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包的步骤包括:
所述工作线程轮询所述完成端口的待处理任务队列;
若所述待处理任务队列中存在数据包,则解析所述数据包;
若所述数据包为信令,则对所述信令进行响应;
若所述数据包为媒体流,则根据所述数据包的包头信息,将所述数据包发送出去;
清除所述待处理任务队列中的所述数据包。
4.根据权利要求1所述的方法,其特征在于,在所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包的步骤之后还包括:
若所述待处理任务队列中没有数据包,则回收所述工作线程为空闲线程。
5.根据权利要求1所述的方法,其特征在于,所述通信句柄采用socket,并采用心跳机制维持socket连接。
6.一种流媒体处理系统,其特征在于,所述系统包括流媒体服务器,所述流媒体服务器包括:
监听模块,用于监听完成端口对应的各通信句柄;所述各通信句柄与流媒体服务器端口已绑定,并在与客户端建立连接后与所述完成端口绑定;所述完成端口包括待处理任务队列,用来缓存待处理的数据包;
线程运行判断模块,用于若监听到客户端发送的数据包,则判断有没有工作线程在运行;
线程启用模块,用于若没有工作线程在运行,则启用线程池中的一个空闲线程为工作线程;
处理模块,用于所述工作线程轮询所述完成端口的待处理任务队列,若所述待处理任务队列中存在数据包,则解析并处理所述数据包。
7.根据权利要求6所述的系统,其特征在于,所述流媒体服务器还包括:
通信句柄绑定模块,用于监听各通信句柄,若监听到客户端的连接,则将对应的通信句柄与完成端口绑定;
接收请求投递模块,用于投递给所述对应的通信句柄一个接收请求;所述接收请求在接收完数据包后会发出完成通知;
数据缓存模块,用于若接收到所述完成通知,则将所述数据包与对应的通信句柄封装,放置于所述完成端口的待处理任务队列中,并且投递给所述对应的通信句柄一个接收请求。
8.根据权利要求6所述的系统,其特征在于,所述处理模块包括:
轮询模块,用于所述工作线程轮询所述完成端口的待处理任务队列;
解析模块,用于若所述待处理任务队列中存在数据包,则解析所述数据包;
信令处理模块,用于若所述数据包为信令,则对所述信令进行响应;
媒体流处理模块,用于若所述数据包为媒体流,则根据所述数据包的包头信息,将所述数据包发送出去;
清除模块,用于清除所述待处理任务队列中的所述数据包。
9.根据权利要求6所述的系统,其特征在于,所述流媒体服务器还包括:
线程回收模块,用于若所述待处理任务队列中没有数据包,则回收所述工作线程为空闲线程。
10.根据权利要求6所述的系统,其特征在于,所述通信句柄采用socket,并采用心跳机制维持socket连接。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611261387.1A CN108270732B (zh) | 2016-12-30 | 2016-12-30 | 一种流媒体处理方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611261387.1A CN108270732B (zh) | 2016-12-30 | 2016-12-30 | 一种流媒体处理方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108270732A true CN108270732A (zh) | 2018-07-10 |
CN108270732B CN108270732B (zh) | 2019-02-19 |
Family
ID=62753789
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611261387.1A Active CN108270732B (zh) | 2016-12-30 | 2016-12-30 | 一种流媒体处理方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108270732B (zh) |
Cited By (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109753354A (zh) * | 2018-11-26 | 2019-05-14 | 平安科技(深圳)有限公司 | 基于多线程的流媒体任务的处理方法、装置及计算机设备 |
CN109814996A (zh) * | 2019-01-04 | 2019-05-28 | 平安科技(深圳)有限公司 | 流媒体传输控制方法、装置及存储介质、计算机设备 |
CN110399329A (zh) * | 2019-07-12 | 2019-11-01 | 苏州浪潮智能科技有限公司 | 一种rdma的数据处理方法及相关装置 |
CN110442442A (zh) * | 2019-08-13 | 2019-11-12 | 中国核动力研究设计院 | 核电厂dcs平台工程师站软件维护网络通讯方法 |
CN110535940A (zh) * | 2019-08-29 | 2019-12-03 | 北京浪潮数据技术有限公司 | 一种bmc的连接管理方法、系统、设备及存储介质 |
CN110798450A (zh) * | 2019-09-25 | 2020-02-14 | 视联动力信息技术股份有限公司 | 一种音视频数据的处理方法、装置及存储介质 |
CN111221642A (zh) * | 2018-11-23 | 2020-06-02 | 珠海格力电器股份有限公司 | 一种数据处理方法、装置、存储介质及终端 |
CN111510759A (zh) * | 2020-03-17 | 2020-08-07 | 视联动力信息技术股份有限公司 | 视频显示方法、装置及可读存储介质 |
CN111786957A (zh) * | 2020-06-09 | 2020-10-16 | 中国人民解放军海军工程大学 | 媒体流分发方法、服务器及电子设备 |
CN111901689A (zh) * | 2020-06-17 | 2020-11-06 | 视联动力信息技术股份有限公司 | 流媒体数据的传输方法、装置、终端设备和存储介质 |
CN112114955A (zh) * | 2020-09-28 | 2020-12-22 | 广州锦行网络科技有限公司 | Windows平台下实现单进程单线程完成端口的方法 |
CN112148493A (zh) * | 2020-09-30 | 2020-12-29 | 武汉中科通达高新技术股份有限公司 | 一种流媒体任务管理方法及装置、数据服务器 |
CN115174214A (zh) * | 2022-07-05 | 2022-10-11 | 中孚安全技术有限公司 | 一种操作系统应用层全局网络抓包方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20110106983A (ko) * | 2010-03-24 | 2011-09-30 | 경운대학교 산학협력단 | 인터넷 전화 기반의 crm 시스템 |
CN103391289A (zh) * | 2013-07-16 | 2013-11-13 | 中船重工(武汉)凌久高科有限公司 | 一种基于完成端口模型的多链路安全通信方法 |
CN103458236A (zh) * | 2013-09-18 | 2013-12-18 | 张家港美核电子科技有限公司 | 危化品物流智能监控系统 |
CN106131162A (zh) * | 2016-06-29 | 2016-11-16 | 广州慧睿思通信息科技有限公司 | 一种基于iocp机制实现网络服务代理的方法 |
-
2016
- 2016-12-30 CN CN201611261387.1A patent/CN108270732B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR20110106983A (ko) * | 2010-03-24 | 2011-09-30 | 경운대학교 산학협력단 | 인터넷 전화 기반의 crm 시스템 |
CN103391289A (zh) * | 2013-07-16 | 2013-11-13 | 中船重工(武汉)凌久高科有限公司 | 一种基于完成端口模型的多链路安全通信方法 |
CN103458236A (zh) * | 2013-09-18 | 2013-12-18 | 张家港美核电子科技有限公司 | 危化品物流智能监控系统 |
CN106131162A (zh) * | 2016-06-29 | 2016-11-16 | 广州慧睿思通信息科技有限公司 | 一种基于iocp机制实现网络服务代理的方法 |
Cited By (19)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111221642A (zh) * | 2018-11-23 | 2020-06-02 | 珠海格力电器股份有限公司 | 一种数据处理方法、装置、存储介质及终端 |
CN111221642B (zh) * | 2018-11-23 | 2023-08-15 | 珠海格力电器股份有限公司 | 一种数据处理方法、装置、存储介质及终端 |
CN109753354A (zh) * | 2018-11-26 | 2019-05-14 | 平安科技(深圳)有限公司 | 基于多线程的流媒体任务的处理方法、装置及计算机设备 |
CN109814996A (zh) * | 2019-01-04 | 2019-05-28 | 平安科技(深圳)有限公司 | 流媒体传输控制方法、装置及存储介质、计算机设备 |
CN109814996B (zh) * | 2019-01-04 | 2024-03-22 | 平安科技(深圳)有限公司 | 流媒体传输控制方法、装置及存储介质、计算机设备 |
CN110399329A (zh) * | 2019-07-12 | 2019-11-01 | 苏州浪潮智能科技有限公司 | 一种rdma的数据处理方法及相关装置 |
CN110442442B (zh) * | 2019-08-13 | 2022-07-26 | 中核控制系统工程有限公司 | 核电厂dcs平台工程师站软件维护网络通讯方法 |
CN110442442A (zh) * | 2019-08-13 | 2019-11-12 | 中国核动力研究设计院 | 核电厂dcs平台工程师站软件维护网络通讯方法 |
CN110535940A (zh) * | 2019-08-29 | 2019-12-03 | 北京浪潮数据技术有限公司 | 一种bmc的连接管理方法、系统、设备及存储介质 |
CN110535940B (zh) * | 2019-08-29 | 2023-01-24 | 北京浪潮数据技术有限公司 | 一种bmc的连接管理方法、系统、设备及存储介质 |
CN110798450B (zh) * | 2019-09-25 | 2022-08-23 | 视联动力信息技术股份有限公司 | 一种音视频数据的处理方法、装置及存储介质 |
CN110798450A (zh) * | 2019-09-25 | 2020-02-14 | 视联动力信息技术股份有限公司 | 一种音视频数据的处理方法、装置及存储介质 |
CN111510759A (zh) * | 2020-03-17 | 2020-08-07 | 视联动力信息技术股份有限公司 | 视频显示方法、装置及可读存储介质 |
CN111510759B (zh) * | 2020-03-17 | 2023-10-13 | 视联动力信息技术股份有限公司 | 视频显示方法、装置及可读存储介质 |
CN111786957A (zh) * | 2020-06-09 | 2020-10-16 | 中国人民解放军海军工程大学 | 媒体流分发方法、服务器及电子设备 |
CN111901689A (zh) * | 2020-06-17 | 2020-11-06 | 视联动力信息技术股份有限公司 | 流媒体数据的传输方法、装置、终端设备和存储介质 |
CN112114955A (zh) * | 2020-09-28 | 2020-12-22 | 广州锦行网络科技有限公司 | Windows平台下实现单进程单线程完成端口的方法 |
CN112148493A (zh) * | 2020-09-30 | 2020-12-29 | 武汉中科通达高新技术股份有限公司 | 一种流媒体任务管理方法及装置、数据服务器 |
CN115174214A (zh) * | 2022-07-05 | 2022-10-11 | 中孚安全技术有限公司 | 一种操作系统应用层全局网络抓包方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN108270732B (zh) | 2019-02-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108270732B (zh) | 一种流媒体处理方法及系统 | |
EP3352431B1 (en) | Network load balance processing system, method, and apparatus | |
CN108494817A (zh) | 数据传输方法、相关装置及系统 | |
Laufer et al. | Climb: Enabling network function composition with click middleboxes | |
CN109547162B (zh) | 基于两套单向边界的数据通信方法 | |
WO2014180407A1 (zh) | 推送方法及装置 | |
CN112631788B (zh) | 数据传输方法及数据传输服务器 | |
CN107528891B (zh) | 一种基于WebSocket的自动集群方法及其系统 | |
CN108234190B (zh) | 一种视联网设备的管理方法和系统 | |
US20140222960A1 (en) | Method and Apparatus for Rapid Data Distribution | |
WO2012088954A1 (zh) | 基于网络配置协议的网络配置管理方法、设备和系统 | |
CN103607423A (zh) | 一种基于WebSocket协议的分布式广播系统 | |
CN110535811B (zh) | 远端内存管理方法及系统、服务端、客户端、存储介质 | |
CN108566390B (zh) | 一种卫星消息监听与分发服务系统 | |
CN113259415B (zh) | 一种网络报文处理方法、装置及网络服务器 | |
CN111522663B (zh) | 一种基于分布式存储系统的数据传输方法、装置和系统 | |
CN112104679B (zh) | 处理超文本传输协议请求的方法、装置、设备和介质 | |
JP2014528611A5 (zh) | ||
WO2024067529A1 (zh) | 基于rdma的建连方法、装置、设备及存储介质 | |
CN109358760A (zh) | 一种鼠标控制方法和装置 | |
CN111404986B (zh) | 数据传输处理方法、设备和存储介质 | |
CN105915587B (zh) | 内容推送方法、系统、以及缓存服务器 | |
CN107995315B (zh) | 业务板间信息的同步方法、装置、存储介质及计算机设备 | |
CN110753043B (zh) | 一种通信方法、装置、服务器及介质 | |
CN102693434B (zh) | 射频识别设备接口层的通信装置及方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100000 Dongcheng District, Beijing, Qinglong Hutong 1, 1103 house of Ge Hua building. Applicant after: Video Link Power Information Technology Co., Ltd. Address before: 100000 Beijing Dongcheng District gogoa building A1103-1113 Applicant before: BEIJING VISIONVERA INTERNATIONAL INFORMATION TECHNOLOGY CO., LTD. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |