提高nginx-rtmp拉流服务质量的方法及装置与流程

文档序号:17049287发布日期:2019-03-05 19:52阅读:749来源:国知局
提高nginx-rtmp拉流服务质量的方法及装置与流程

本发明涉及直播技术领域,更具体地,涉及提高nginx-rtmp拉流服务质量的方法及装置。



背景技术:

如何保证直播的流畅性和稳定性,保证用户的观看直播体验是每个直播平台都会关注的焦点,而目前在直播流cdn拉流转发到前端展示的过程中,偶然会出现后端服务与cdn服务连接异常导致前端用户观看直播的过程中卡住或者黑屏,给用户不好的直播体验,用户可能会选择直接退出直播间。

目前解决后端服务与cdn服务连接异常的问题,通常需要人工定位关键节点,并重启相关服务。这种方案存在的问题是定位关键节点时间会较长,因为cdn后端可能又有多次跳转,使得恢复服务连接的时间较长,进而导致前端展示很长时间没有响应,用户体验仍然较差。



技术实现要素:

本发明提供一种克服上述问题或者至少部分地解决上述问题的提高nginx-rtmp拉流服务质量的方法及装置。

根据本发明的一个方面,提供提高nginx-rtmp拉流服务质量的方法,包括:

s1,当后端服务连接出现异常时,调用中继会话关闭方法,判断当前中继会话是否为拥有主备的拉流;

s2,若判断结果为是,则从所述中继会话中获取会话加载时所注册的主备模式间切换的异步处理事件,并为所述异步处理事件添加第一定时器;

s3,关闭当前中继会话,待所述第一定时器时间到后,调用所述异步处理事件所对应的事件处理函数,为后端服务器创建新的服务连接。

其中,在所述步骤s1之前还包括:

s0,在nginx-rtmp模块配置文件的pull配置项中添加backups参数,所述backups参数的值为备用拉流的url;

s01,通过解析所述配置文件对主备模式进行初始化,并根据解析结果创建主备模式间切换的异步处理事件和第二定时器,并注册所述异步处理事件触发后的事件处理函数;

s02,启动第二定时器任务,若主服务连接异常,则待所述第二定时器超时后,执行所述事件处理函数。

其中,所述步骤s01进一步包括:

s011,解析所述配置文件,将解析所述backups参数所得的结果和解析主服务所对应的url所得的结果同时存入拉流所对应的target结构中,并在所述target结构中添加初始化后的控制切换标识;

s012,根据所述target结构中的数据,创建主备模式间切换的事件处理对象;

s013,注册所述事件处理对象的事件处理函数,并为所述事件处理对象添加第二定时器。

其中,步骤s011中解析所述配置文件进一步包括:

在nginx-rtmprelay模块中添加解析backups参数的命令,将主服务和备用拉流所对应的url均解析为ip地址、端口地址和http参数。

其中,所述步骤s012进一步包括:

从nginx-pool中申请一个新的事件存储空间;

将获取到的主备用服务所对应的url解析完成的target结构设置为事件处理对象;

从全局events队列中申请一个slot,将所述事件处理对象插入到所述全局events队列中。

其中,步骤s3中调用所述异步处理事件所对应的事件处理函数,为后端服务器创建新的服务连接的步骤进一步包括:

通过epoll事件获取所述事件处理对象所对应的target结构中的数据;

根据所述target结构中的控制切换标识的值,判断待链接的服务为主服务还是备用服务;

创建与所述判断结果相对应的服务连接,并修改所述控制切换标识的值。

其中,所述步骤s3还包括:

若创建与所述判断结果相对应的服务连接失败,则在第三定时器超时后,再次调用所述所述异步处理事件的事件处理函数为后端服务器创建其他服务连接。

根据本发明的另一个方面,提供提高nginx-rtmp拉流服务质量的装置,包括:

判断模块,用于当后端服务连接出现异常时,调用中继会话关闭方法,判断当前中继会话是否为拥有主备的拉流;

事件获取模块,用于若判断结果为是,则从所述中继会话中获取会话加载时所注册的主备模式间切换的异步处理事件,并为所述异步处理事件添加第一定时器;

服务连接切换模块,用于关闭当前中继会话,待所述第一定时器时间到后,调用所述异步处理事件所对应的事件处理函数,为后端服务器创建新的服务连接。

根据本发明的另一个方面,提供提高nginx-rtmp拉流服务质量的设备,包括:存储器、处理器、以及总线,

所述处理器和存储器通过所述总线完成相互间的通信;

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述存储器中的程序指令,以执行如前所述的方法。

根据本发发明的又一个方面,提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如前所述的方法。

本发明提出的提高nginx-rtmp拉流服务质量的方法及装置,通过在nginx-rtmp中添加主备逻辑,当某个服务连接断开时,启动主备用服务之间的无缝切换进行拉流转发,能使拉流转发服务质量提高一个量级,且前端展示基本不受影响。

附图说明

图1为根据本发明一实施例提供的提高nginx-rtmp拉流服务质量的方法的流程示意图;

图2为根据本发明另一实施例提供的提高nginx-rtmp拉流服务质量的装置的结构示意图;

图3为根据本发明另一实施例提供的提高nginx-rtmp拉流服务质量的设备的结构示意图。

具体实施方式

下面结合附图和实施例,对本发明的具体实施方式作进一步详细描述。以下实施例用于说明本发明,但不用来限制本发明的范围。

如图1所示,为本发明一实施例提供的提高nginx-rtmp拉流服务质量的方法的流程示意图,包括:

s1,当后端服务连接出现异常时,调用中继会话关闭方法,判断当前中继会话是否为拥有主备的拉流;

s2,若判断结果为是,则从所述中继会话中获取会话加载时所注册的主备模式间切换的异步处理事件,并为所述异步处理事件添加第一定时器;

s3,关闭当前中继会话,待所述第一定时器时间到后,调用所述异步处理事件所对应的事件处理函数,为后端服务器创建新的服务连接。

在本发明实施例的直播平台架构中,视频服务器端是一台nginx服务器,用于接受主播端提供的视音频源,同时提供给客户端流服务。主播端将录制的视音频源经过一定的处理后(前处理、编码和封装)通过网络传输到视频服务器端的过程叫做推流。可知,推流前必须把视音频数据使用传输协议进行封装,变成流数据。常用的流传输协议有rtsp、rtmp和hls等,使用rtmp传输的延时通常在1–3秒,对于手机直播这种实时性要求非常高的场景,rtmp已成为手机直播中最常用的流传输协议。然后通过一定的qos算法将视音频流数据推送到视频服务器端。视频服务器端对接收到的视音频流数据进行一定的处理,转码,使得数据流支持hls、http-flv和rtmp等格式的拉流,支持一转多,适配不同网络、分辨率的终端,再通过cdn节点将视音频流数据分发给客户端。用指定地址将视音频流数据进行拉取后提供给客户端,此过程就是拉流。推流作为视频源的传输,在稳定性和速度上都比拉流高得多,拉流的稳定性和速度就成为影响用户观看直播的体验较关键的因素。因此,本发明实施例主要考虑如何提高拉流转发的服务质量。

具体地,拉流是指后端服务器(即视频服务器)上已有直播内容,用指定地址将直播内容进行拉取的过程,s1中后端服务出现异常是指当后端服务器与cdn节点连接出现异常时,cdn节点无法拉取直播内容导致前端播放直播内容出现卡顿、延时或黑屏等情况出现,带给用户不好的体验。当后端服务连接出现异常时,为了保证用户体验,本发明实施例在关闭当前中继会话之前添加定时处理任务,尝试切换服务连接,进行备用服务的连接过程。因此,在s1中,当后端服务连接出现异常时,调用中继会话关闭方法ngx_rtmp_relay_close,在所述ngx_rtmp_relay_close方法中判断当前中继会话是否为拥有主备的拉流,即判断当前拉流线路是否同时拥有主线路和备用线路。要使拉流成为拥有主备模式的拉流,需要在原有nginx-rtmp模块配置文件的pull配置项中添加值为备用拉流url的参数,根据解析配置文件所得的结果中是否含有备用拉流url解析的结果来判断当前拉流线路是否同时拥有主线路和备用线路。

在s2中,若当前中继会话为拥有主备的拉流,则说明可以进行切流,从当前中继会话中获取该会话加载时所注册的主备模式间切换的异步处理事件,其中,该异步处理事件用于在异常连接情况发生时被触发,相应的事件处理函数会被调用,从而实现主备模式间的切换。同时,为所获取到的异步处理事件添加第一定时器。

若当前中继会话不是拥有主备的拉流,则直接关闭当前中继会话。

s3,关闭当前中继会话,释放资源,待第一定时器超时后,则调用所述异步处理事件所对应的事件处理函数,创建新的服务连接。若当前链接的后端服务器是主服务器,则通过该异步事件的触发,相应的事件处理函数被调用,将当前链接切换到备用服务器,从而实现服务连接从主模式到备用模式的切换;若当前链接的后端服务器是备用服务器,则通过该异步事件的触发,相应的事件处理函数被调用,将当前链接切换到主服务器,从而实现服务连接从备用模式到主模式的切换。通过主备模式间的无缝切换,实现拉流转发的稳定性。

本发明实施例,在nginx-rtmp拉流后端服务异常情况下,在关闭对应会话之前添加定时处理任务,尝试切换服务,进行辅助服务连接过程。无缝对前端用户提供可靠的服务,前端基本对后端的切换是无察觉的,可有效提高服务质量。并且无缝切换不需要人为干预,从而省去了人为的响应排查问题时间,前端展示不会受到影响。在后端服务出问题后相关人员还是需要定位排查相关问题,只是不再影响前端用户展示,也同样是使问题处理过程对用户透明。如果单个服务对外服务异常率为x%,那主备对外服务异常率为(x%*x%),所以理论上利用此方法,能使nginx-rtmp拉流转发服务质量提高一个量级。

本发明另一实施例,在上述实施例的基础上,在所述步骤s1之前还包括:

s0,在nginx-rtmp模块配置文件的pull配置项中添加backups参数,所述backups参数的值为备用拉流的url;

s01,通过解析所述配置文件对主备模式进行初始化,并根据解析结果创建主备模式间切换的异步处理事件和第二定时器,并注册所述异步处理事件触发后的事件处理函数;

s02,启动第二定时器任务,若主服务连接异常,则待所述第二定时器超时后,执行所述事件处理函数。

具体地,为了实现在nginx-rtmp拉流后端服务异常情况下服务连接的切换,需要首先修改配置文件,因为本发明实施例整体修改基于nginx-rtmp模块,具体实现为在原有的nginx-rtmp配置文件的pull配置项中添加backups参数,参数的值为备用pull拉流的url。

然后,在nginx-rtmp服务器启动时,解析修改后的配置文件,解析配置文件的主要目的是为了实现对主备用服务连接模式的初始化,使得主服务和备用服务的url地址被转化为具体的ip地址、端口地址和htttp相关参数,待需要服务时可以根据这些解析结果快速地创建连接。由于nginx服务器是事件驱动机制,为了实现服务连接在主备模式间的切换,还需要根据解析结果创建主备模式间切换的异步处理事件,并为所述异步处理事件添加第二定时器,注册所述异步处理事件触发后的事件处理函数。

启动第二定时器任务,若当前情况下主服务连接异常,则在所述第二定时器超时后,第一次调用该事件处理函数即可以将主服务连接切换为备用服务连接,从而实现第一次的优选过程。

其中,所述步骤s01进一步包括:

s011,解析所述配置文件,将解析所述backups参数所得的结果和解析主服务所对应的url所得的结果同时存入拉流所对应的target结构中,并在所述target结构中添加初始化后的控制切换标识;

具体实现如下:在nginx-rtmprelay模块中添加解析backups参数的命令,将对应的主服务的url和备用服务的url解析为ip/port/args等,即ip地址、端口地址和http参数等,并将解析备用url所得的结果与主服务器url的所得的结果同时存入到pull拉流对应的target中(每个pull对后服务都有一个target结构),target中添加初始化后控制切换标识,该标识用于标识切换到哪一个后端服务。

s012,根据所述target结构中的数据,创建主备模式间切换的事件处理对象;

具体实现过程如下:首先,从nginx-pool中申请一个新的事件存储空间;将获取到的主备用服务所对应的url解析完成的target结构设置为事件处理对象;从全局events队列中申请一个slot,将所述事件处理对象插入到所述全局events队列中。

s013,注册所述事件处理对象的事件处理函数,并为所述事件处理对象添加第二定时器。

具体地,注册所述事件处理对象的事件处理函数,即给出了调用该事件处理函数的接口,并为所述事件处理对象添加第二定时器。通过events队列执行,启动第二定时器任务,当连接失败即主服务在当前情况下无法提供服务时,且在第二定时器超时后执行所述事件处理函数,将主服务切换为备用服务。

基于上述各实施例,步骤s3中调用所述异步处理事件所对应的事件处理函数,为后端服务器创建新的服务连接的步骤进一步包括:

通过epoll事件获取所述事件处理对象所对应的target结构中的数据;

根据所述target结构中的控制切换标识的值,判断待链接的服务为主服务还是备用服务;

创建与所述判断结果相对应的服务连接,并修改所述控制切换标识的值。

具体的,当后端服务出现异常,主备模式间切换的异步处理事件被触发,则调用事件处理函数创建新的连接,具体的实现过程为:通过epoll事件获取所述事件处理对象所对应的target结构中的数据,包含了主服务url解析结果、备用服务url的解析结果和控制切换标识;然后,根据所述控制切换标识的值,判断待链接的服务为主服务还是备用服务;根据所述判断结果,创建相应的服务连接,例如,若待链接的服务为备用服务,则根据备用服务url的解析结果创建备用服务链接,并修改所述控制切换标识的值,以供下次能够切换到另外一个服务。

其中,所述步骤s3还包括:

若创建与所述判断结果相对应的服务连接失败,则在第三定时器超时后,再次调用所述所述异步处理事件的事件处理函数为后端服务器创建其他服务连接。

如果系统中存在多条备用服务线路,则当创建与所述判断结果相对应的服务连接也失败时,在一定的时间之后,这里用第三定时器来进行计时,调用该事件处理函数选择其他的备用服务来创建新的连接。

如图2所示,为本发明另一实施例提供的提高nginx-rtmp拉流服务质量的装置的结构示意图,包括:判断模块21、事件获取模块22和服务连接切换模块23,其中,

判断模块21,用于当后端服务连接出现异常时,调用中继会话关闭方法,判断当前中继会话是否为拥有主备的拉流;

事件获取模块22,用于若判断结果为是,则从所述中继会话中获取会话加载时所注册的主备模式间切换的异步处理事件,并为所述异步处理事件添加第一定时器;

服务连接切换模块23,用于关闭当前中继会话,待所述第一定时器时间到后,调用所述异步处理事件所对应的事件处理函数,为后端服务器创建新的服务连接。

具体地,拉流是指后端服务器上已有直播内容,用指定地址将直播内容进行拉取的过程,后端服务出现异常是指当后端服务器与cdn节点连接出现异常时,cdn节点无法拉取直播内容导致前端播放直播内容出现卡顿、延时或黑屏等情况出现,带给用户不好的体验。当后端服务连接出现异常时,为了保证用户体验,本发明实施例在关闭当前中继会话之前添加定时处理任务,尝试切换服务连接,进行备用服务的连接过程。因此,判断模块21用于当后端服务连接出现异常时,调用中继会话关闭方法ngx_rtmp_relay_close,在所述ngx_rtmp_relay_close方法中判断当前中继会话是否为拥有主备的拉流,即判断当前拉流线路是否同时拥有主线路和备用线路。要使拉流成为拥有主备模式的拉流,需要在原有nginx-rtmp模块配置文件的pull配置项中添加值为备用拉流url的参数,根据解析配置文件所得的结果中是否含有备用拉流url解析的结果来判断当前拉流线路是否同时拥有主线路和备用线路。

事件获取模块22用于若当前中继会话为拥有主备的拉流,则说明可以进行切流,从当前中继会话中获取该会话加载时所注册的主备模式间切换的异步处理事件,其中,该异步处理事件用于在异常连接情况发生时被触发,相应的事件处理函数会被调用,从而实现主备模式间的切换。同时,为所获取到的异步处理事件添加第一定时器。

若当前中继会话不是拥有主备的拉流,则直接关闭当前中继会话。

服务连接切换模块23用于关闭当前中继会话,释放资源,待第一定时器超时后,则调用所述异步处理事件所对应的事件处理函数,创建新的服务连接。若当前链接的是主服务器,则通过该异步事件的触发,相应的事件处理函数被调用,将当前链接切换到备用服务器,从而实现服务连接从主模式到备用模式的切换;若当前链接的是备用服务器,则通过该异步事件的出发,相应的事件处理函数被调用,将当前链接切换到主服务器,从而实现服务连接从备用模式到主模式的切换,通过主备模式间的无缝切换,实现拉流转发的稳定性。

基于上述实施例,还包括:

配置文件修改模块,用于在nginx-rtmp模块配置文件的pull配置项中添加backups参数,所述backups参数的值为备用拉流的url;

事件创建模块,用于通过解析所述配置文件对主备模式进行初始化,并根据解析结果创建主备模式间切换的异步处理事件和第二定时器,并注册所述异步处理事件触发后的事件处理函数;

定时任务启动模块,用于启动第二定时器任务,若主服务连接异常,则待所述第二定时器超时后,执行所述事件处理函数。

其中,所述事件创建模块具体用于:

解析所述配置文件,将解析所述backups参数所得的结果和解析主服务所对应的url所得的结果同时存入拉流所对应的target结构中,并在所述target结构中添加初始化后的控制切换标识;

根据所述target结构中的数据,创建主备模式间切换的事件处理对象;

注册所述事件处理对象的事件处理函数,并为所述事件处理对象添加第二定时器。

其中,所述服务连接切换模块23具体用于:

通过epoll事件获取所述事件处理对象所对应的target结构中的数据;

根据所述target结构中的控制切换标识的值,判断待链接的服务为主服务还是备用服务;

创建与所述判断结果相对应的服务连接,并修改所述控制切换标识的值。

其中,所述服务连接切换模块23还用于:

若创建与所述判断结果相对应的服务连接失败,则在第三定时器超时后,再次调用所述所述异步处理事件的事件处理函数创建其他服务连接。

本发明提出的提高nginx-rtmp拉流服务质量的装置,通过在nginx-rtmp中添加主备逻辑,当某个服务连接断开时,启动主备用服务之间的无缝切换进行拉流转发,能使拉流转发服务质量提高一个量级,且前端展示基本不受影响。

如图3所示,为本发明一实施例提供的提高nginx-rtmp拉流服务质量的设备的结构示意图,包括:存储器、处理器、以及总线,

所述处理器和存储器通过所述总线完成相互间的通信;

所述存储器存储有可被所述处理器执行的程序指令,所述处理器调用所述存储器中的程序指令,以执行如上述各实施例所述的方法,例如包括:s1,当后端服务连接出现异常时,调用中继会话关闭方法,判断当前中继会话是否为拥有主备的拉流;s2,若判断结果为是,则从所述中继会话中获取会话加载时所注册的主备模式间切换的异步处理事件,并为所述异步处理事件添加第一定时器;s3,关闭当前中继会话,待所述第一定时器时间到后,调用所述异步处理事件所对应的事件处理函数,为后端服务器创建新的服务连接。

根据本发发明的又一个方面,提供一种非暂态计算机可读存储介质,所述非暂态计算机可读存储介质存储计算机指令,所述计算机指令使所述计算机执行如上述各实施例所述的方法,例如包括:s1,当后端服务连接出现异常时,调用中继会话关闭方法,判断当前中继会话是否为拥有主备的拉流;s2,若判断结果为是,则从所述中继会话中获取会话加载时所注册的主备模式间切换的异步处理事件,并为所述异步处理事件添加第一定时器;s3,关闭当前中继会话,待所述第一定时器时间到后,调用所述异步处理事件所对应的事件处理函数,为后端服务器创建新的服务连接。

本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:rom、ram、磁碟或者光盘等各种可以存储程序代码的介质。

以上所描述的提高nginx-rtmp拉流服务质量的设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。

通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如rom/ram、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。

最后,本发明的方法仅为较佳的实施方案,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

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