对直播消息的发布进行优化的方法及系统的制作方法

文档序号:10516193阅读:255来源:国知局
对直播消息的发布进行优化的方法及系统的制作方法【专利摘要】本发明实施例提供一种对直播消息的发布进行优化的方法及系统,该方法包括:在用于发布直播消息的消息发布池与用于生产流的组件之间配置消息中转站;所述用于生产流的组件生成直播消息,并将所述直播消息发送至所述消息中转站;所述消息中转站将接收到的所述直播消息发送至所述消息发布池。本发明实施例的方法和系统提升了线上设备的负载能力和消息发布池对外发布消息的能力,降低了生产流的组件与消息发布池之间的对接难度。【专利说明】对直播消息的发布进行优化的方法及系统
技术领域
[0001]本发明实施例涉及视频直播
技术领域
,尤其涉及一种对直播消息的发布进行优化的方法及系统。【
背景技术
】[0002]由于现有线上直播平台均是按照流为基本单位来生产数据的,一个流的生产对应一个进程或线程,因此当直播流的个数越来越多时,如果按照传统的消息发布方式,就需要每个进程或线程来与本机的消息发布池(MessagerPool,设备对外发布和接收消息的模块,可以接受订阅和发布请求)建立TCP长连接通讯。但在流的个数达到成千上万后,一方面受限于操作系统本机端口的个数有限,另一方面,大量TCP套接字的建立对于操作系统的资源开销逐步增大,进而导致单机服务能力受限。而且,随着单机的生产流的进程数和线程数逐步增多时,对消息发布池的连接挑战将越来越大,也会进一步拖累消息发布池对外发布消息的能力。【
发明内容】[0003]本发明实施例提供一种对直播消息的发布进行优化的方法和系统,以解决传统的直播平台,每个流进程或线程都要与消息发布池建立TCP长连接,流进程或线程较多时,系统资源开销大,单机服务能力受限,且影响消息发布池对外发布消息的能力的问题,达到大幅提升线上设备的负载能力和消息发布池对外发布消息的能力的效果。[0004]本发明实施例提供一种对直播消息的发布进行优化的方法,包括:[0005]在用于发布直播消息的消息发布池与用于生产流的组件之间配置消息中转站;[0006]所述用于生产流的组件生成直播消息,并将所述直播消息发送至所述消息中转站;[0007]所述消息中转站将接收到的所述直播消息发送至所述消息发布池。[0008]本发明实施例提供一种对直播消息的发布进行优化的系统,包括用于发布直播消息的消息发布池和用于生产流的组件,在所述消息发布池和所述用于生产流的组件之间还配置有消息中转站,其中,[0009]所述用于生产流的组件生成直播消息发送至所述消息中转站,所述消息中转站接收所述直播消息发送至所述消息发布池。[0010]本发明实施例提供的对直播消息的发布进行优化的方法及系统,通过在进行生产直播消息流文件的组件和消息发布池之间增设消息中转站,有效提升了线上设备的负载能力和消息发布池对外发布消息的能力,降低了生产流的组件与消息发布池之间的对接难度。【附图说明】[0011]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。[0012]图1为现有技术中进行直播消息发布的系统的框架结构图;[0013]图2为本发明对直播消息的发布进行优化的系统的实施例结构示意图;[0014]图3为本发明对直播消息的发布进行优化的方法的实施例流程图。【具体实施方式】[0015]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。[0016]以下结合附图,对本发明实施例做更详细的阐述。[0017]图1示意性地显示了现有技术中进行直播消息的发布的系统的框架结构。由于一个流的生产对应一个进程或线程,如图1所示,用于生产流的组件2—般是生产流的进程组20和线程组21,每个进程组20包括多个用于生产流的进程201(例如图中的Hls_creat0r进程,即是一个将各种协议的直播流转换成特定内部his协议的生产进程,可以生成一个带ts的m3u8文件,每个线程组21包括多个用于生产流的线程211(例如图中的Thread线程,即是一个将各种直播流、点播文件模拟转换为直播his协议的轮播生产线程,可以生成一个m3u8文件)。需要说明的是,his(httplivestreaming,实时流传输协议)协议是一种流媒体协议,基于HTTP协议实现,传输内容包括两部分,一是m3u8描述文件,二是ts媒体文件。[0018]按照传统的直播消息的发布方式,如图1所示,需要每个进程201或线程211都与本机的消息发布池1(即消息发布池)建立TCP长连接(图1中的每个双向箭头都代表一个TCP连接),并通过TCP长连接将生成的直播消息发送到消息发布池I,然后由消息发布池I将直播消息进行发布。因此,当单机的直播流的个数越来越多时,特别是达到成千上万个之后,一方面受限于操作系统本机端口的个数有限,另一方面大量TCP套接字的建立会增大操作系统资源的开销,必将会进一步导致单机服务能力受限,而且对消息发布池的连接挑战也将越来越大,并会拖累消息发布池的对外发布消息的能力。[0019]因而本发明提出一种对直播消息的发布进行优化的系统和方法,以解决传统发布架构和方式的缺陷。[0020]图2示意性地显示了本发明实施例的对直播消息的发布进行优化的系统的框架结构。如图2所示,该系统在用于发布直播消息的消息发布池I和用于生产流的组件2之间还配置有消息中转站3。根据本发明实施例的系统,组件2中的进程组20和线程组21在生成直播消息之后,会将直播消息先发送到消息中转站3,由消息中转站3将直播消息发送至消息发布池I进行发布。由此,各个进程201和线程211将不再需要单独与消息发布池I直接建立TCP连接,而是将消息发送到消息中转站3即可。由于在直播中各生产流的进程和线程是同步阻塞的,而消息中转站3是异步非阻塞的,因而只需在消息中站3和消息发布池I之间建立有限条数的TCP连接,就可以将直播消息有序发送到消息发布池I,然后再由消息发布池I进行发布。由此,可以降低生产流的组件2与消息发布池I之间的对接困难,提高消息发布池I对外发布消息的能力。[0021]其中,在具体实现中,如图2所示,用于生产流的组件2将直播消息发送到消息中转站3的方式是通过PosixMQ(PortableOperatingSystemInterfaceMessageQueue,可移植操作系统接口消息队列,以下称为Posix消息队列)。用于生产流的组件2中包括消息写入单元(图未示出),用于将生成的直播消息写入本地的Posix消息队列。消息中转站3包括消息读取单元30,用于从Posix消息队列中读取直播消息,并将直播消息插入消息中转队列中。由于用于生产流的组件2是进程或线程,本发明实施例中的消息写入单元可以是各个生产流的进程或线程本身,消息读取单元30可以消息中转站3单独开通的一个线程,各进程和线程可以直接对本地的Posix消息队列进行读写操作(如图中的虚线箭头即为通过线程或进程对Posix消息队列进行读写操作),并不需要建立TCP连接进行传输,因而系统开销极小,能够大幅提升线上设备的负载能力。如图2所示,消息中转站3中还包括消息发送单元31,用于在消息中转站3与消息发布池I之间建立固定数量的TCP连接,实时或每隔固定时间间隔将消息中转队列中的全部直播消息,通过TCP连接发送至消息发布池I。当消息中转站3将直播消息插入自己的消息中转队列中后,就通过消息发送单元31与消息发布池建立有限条数的TCP连接,实时将消息中转队列中的全部直播消息发送给消息发布池I,由消息发布池I进行发布。其中,为了保证实时性,正常情况下,消息发送单元31会持续地发送消息中转队列中的直播消息,而为了保证系统的性能,可以设置为当检测到消息中转队列为空时,则等待固定时间间隔如200毫秒后,再检测消息中转队列是否有内容,如果有内容则将消息中转队列中的直播消息全部发送出去,如果没有内容则再等待固定时间间隔如200毫秒后再进行检测。[0022]其中,消息发送单元31建立的与消息发布池I之间的TCP连接的数量,可以根据需求进行设置,如数据量大时建立五条,数据量小时建立一条等。优选地,建立的TCP连接的数量为一条,此时线上设备的系统开销为最小,即为原有部署成本的1/N,N为生产流的组件2中的进程和线程的总条数。[0023]其中,为了更清楚地标记各直播消息和方便快速将直播消息有序地发布给用户,用于生产流的组件2中的各进程或线程将直播消息写入Posix消息队列时,例如可以是将写入的直播消息的传输格式设置为json格式。即消息写入单元首先将直播消息封装为json格式,并在json格式的消息中封装直播消息对应的m3u8文件的生成时间、序列号、m3u8的类型(包括直播和轮播两种)以及发布主题地址(即将该直播消息发送到消息发布池中的哪个主题,例如1^]^7/1118/11111130/113_201^116_1300)。由此,可以消息写入单元就可以将封装后的直播消息按序列号的顺序写入到PoSiX消息队列,消息读取单元在从PoSiX消息队列中读取到json格式的数据后,也可以将直播消息按序列号插入至消息中转队列中,这样就能够保证直播消息的有序性,防止发生混乱或跳播,并且能保证快速准确地发布到目的地。[0024]图3示意性地显示了本发明实施例的对直播消息的发布进行优化的方法流程。如图3所示,该方法包括:[0025]步骤S301:在用于发布直播消息的消息发布池与用于生产流的组件之间配置消息中转站。[0026]用于生产流的组件生成直播消息,消息发布池将生成的直播消息发布出去,生产流的组件主要为进程组或线程组,消息发布池为消息发布的模块。在用于生产流的组件和消息发布池之间新增一个模块(即消息中转站),用于接收产生的直播消息和将直播消息发送给消息发布池。[0027]步骤S302:生成直播消息,并将生成的直播消息发送至消息中转站。[0028]用于生产流的组件的各进程和线程生成直播消息,并将直播消息发送给消息中转站。由于在直播或轮播中,各进程和线程生成直播消息是同步阻塞的,而消息中转站作为中转模块,是异步非阻塞的,因而可通过将生成的直播消息写入Posix消息队列来实现将直播消息发送至消息中转站。具体为,生成流的组件中的各进程和线程产生直播消息,写入Posix消息队列,该写入过程可以是根据特定规则执行。消息中转站开通一个独立的线程,负责从Posix消息队列读取直播消息。消息中转站中包括一个消息中转队列,用于存储从PosiX消息队列读取的直播消息。[0029]其中,写入直播消息的特定规则例如可以是,将写入的直播消息的传输格式设置为json格式,即首先将直播消息封装为json格式的数据,并在json格式的消息中封装直播消息对应的m3u8文件的生成时间、序列号、m3u8的类型(包括直播和轮播两种)以及发布主题位置(即将该直播消息发送到消息发布池中的哪个主题,例如relay/hls/lunb0/lb_ZOnghe_1300)。由此,可以将直播消息按序列号有序写入到Posix消息队列和插入到消息中转队列,不会发生混乱,并且能保证快速准确发布到目的地。[0030]步骤S303:消息中转站将接收到的直播消息发送到消息发布池。[0031]在消息中转站和消息发布池之间建立有限数量的TCP连接(如一条或多条),消息中转站通过建立的TCP连接将直播消息发送到消息发布池,消息发布池收到直播消息就可以进行发布。正常情况下,消息中转站会实时发送消息中转队列中的数据给消息发布池。在本发明另一实施例中,可以设置为在检测到消息中转队列为空时,等待固定时间间隔(如200毫秒)后,再次检测消息中转队列是否有内容,如果有内容则将消息中转队列中的全部数据通过TCP连接发送给消息发布池,如果依然为空,则再次等待固定时间间隔后再进行检测。由此,就可以减少不必要的开销,优化系统性能。[0032]通过本发明实施例的系统和方法,不需要在消息发布池与生产流的各进程及线程之间逐一建立TCP长连接,只需要在消息中转站与消息发布池之间建立有限数量的TCP连接,即可将生成的直播消息实时发送到消息发布池进行发布,生产流的各进程及线程不再需要关心与消息发布池的TCP连接及消息通知协议,只需源源不断地将生成的直播消息写入本地的Posix消息队列,能够有效降低生产流的线程及进程与消息发布池间的对接难度,大幅提升线上设备的负载能力,节约部署成本,提升消息发布能力。[0033]以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。[0034]通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如R0M/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。[0035]最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。【主权项】1.一种对直播消息的发布进行优化的方法,其特征在于,包括:在用于发布直播消息的消息发布池与用于生产流的组件之间配置消息中转站;所述用于生产流的组件生成直播消息,并将所述直播消息发送至所述消息中转站;所述消息中转站将接收到的所述直播消息发送至所述消息发布池。2.根据权利要求1所述的方法,其中,所述用于生产流的组件将所述直播消息发送至所述消息中转站包括:所述用于生产流的组件将生成的所述直播消息写入本地的消息队列;所述消息中转站从所述消息队列中读取直播消息,并将所述直播消息插入消息中转队列中。3.根据权利要求2所述的方法,其中,所述用于生产流的组件将生成的所述直播消息写入本地的消息队列包括:所述用于生产流的组件将生成的直播消息进行封装,封装的内容包括所述直播消息对应的m3u8的生成时间、序列号、m3u8的类型及发布主题位置,并将封装后的数据按序列号写入消息队列;所述消息中转站从所述消息队列中读取直播消息,并将所述直播消息插入消息中转队列中包括:所述消息中转站开设单独的线程从所述消息队列中读取直播消息,并将直播消息按序列号插入所述消息中转队列。4.根据权利要求2或3所述的方法,其中,所述消息中转站将接收到的所述直播消息发送至所述消息发布池包括:在所述消息中转站与所述消息发布池之间建立固定数量的TCP连接;通过所述TCP连接,实时发送所述直播消息至所述消息发布池,或在检测到所述消息中转队列为空时,每隔固定时间间隔对所述消息中转队列进行再次检测,并在所述消息中转队列不为空时,通过所述TCP连接发送所述消息中转队列中的全部直播消息至所述消息发布池。5.根据权利要求4所述的方法,其特征在于,所述固定数量的TCP连接为一条。6.—种对直播消息的发布进行优化的系统,包括用于发布直播消息的消息发布池和用于生产流的组件,其特征在于,在所述消息发布池和所述用于生产流的组件之间还配置有消息中转站,其中,所述用于生产流的组件生成直播消息发送至所述消息中转站,所述消息中转站接收所述直播消息发送至所述消息发布池。7.根据权利要求6所述的系统,其特征在于,所述用于生产流的组件包括消息写入单元,用于将生成的直播消息写入本地的消息队列;所述消息中转站中包括消息读取单元,用于从所述消息队列中读取直播消息,并将所述直播消息插入消息中转队列中。8.根据权利要求7所述系统,其中,所述消息写入单元用于将生成的直播消息封装的内容包括所述直播消息对应的m3u8的生成时间、序列号、m3u8的类型及发布主题位置,并将封装后的数据按序列号写入消息队列;所述消息读取单元用于开设单独的线程从所述消息队列中读取直播消息,并将直播消息按序列号插入所述消息中转队列。9.根据权利要求7或8所述的系统,其特征在于,所述消息中转站还包括消息发送单元,用于在所述消息中转站与所述消息发布池之间建立固定数量的TCP连接,通过所述TCP连接,实时发送所述直播消息至所述消息发布池,或在检测到所述消息中转队列为空时,每隔固定时间间隔对所述消息中转队列进行再次检测,并在所述消息中转队列不为空时,通过所述TCP连接发送所述消息中转队列中的全部直播消息至所述消息发布池。10.根据权利要求9所述的系统,其特征在于,所述固定数量的TCP连接为一条。【文档编号】H04N21/2187GK105872574SQ201610191728【公开日】2016年8月17日【申请日】2016年3月30日【发明人】刘斌【申请人】乐视控股(北京)有限公司,乐视云计算有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1