具体实施方式
本发明实施例通过提供一种基于浏览器的直播方法、服务器、主播端和用户端,解决了现有技术中直播方法中存在的实现复杂、并且占用大量服务器带宽的技术问题,实现了简单的直播方式,并提高了直播效率的技术效果。
本发明实施例中的技术方案,总体思路如下:主播端首先获取直播流,然后发送第一连接信息至服务器,所述第一连接信息包括第一本地会话描述符和第一网络地址信息;并通过服务器将所述第一连接信息发送至用户端,主播端然后接收所述服务器发送的来自所述用户端的基于所述第一连接信息设置的第二连接信息,所述第二连接信息包括第二本地会话描述符和用户端的第二网络地址信息;然后主播端将所述第二连接信息设置为主播端的远程连接信息,这样所述主播端与所述用户端之间就建立了基于浏览器的点对点直播连接;最后基于所述点对点直播连接,主播端可以直接将所述直播流传输至所述用户端。
上述方法中,由于服务器仅仅传递的是用户端和主播端之间的连接信息,解决了传统直播方法中占用大量服务器带宽的问题,并且用户端和主播端通过服务器传递连接信息后,双方可以建立点对点直播连接,这样主播端可以直接将直播流传输至所述用户端,在减少服务器带宽的同时,进一步避免了直播方法的复杂性,实现了简单的直播方式,并提高了直播的效率。
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例一
本实施例提供了一种基于浏览器的直播方法,应用于服务器,请参考图1,所述方法包括:
S101:获取主播端发送的第一连接信息,所述第一连接信息包括第一本地会话描述符和主播端的第一网络地址信息;
S102:将所述第一连接信息发送至用户端;
S103:获取所述用户端发送的基于所述第一连接信息设置的第二连接信息,所述第二连接信息包括第二会话描述符和用户端的第二网络地址信息;
S104:将所述第二连接信息发送至所述主播端,以使所述主播端基于所述第二连接信息与所述用户端建立基于浏览器的点对点直播连接。
需要说明的是WebSocket是HTML5一种新的协议,它可以实现主播端、用户端浏览器与服务器之间的全双工通信(full-duplex),在本发明实施例提供的一种基于浏览器的直播方法中,服务器分别与主播端和用户端建立基于WebSocket的双向通信连接,这样服务器可以接收来自主播端或用户端的连接信息,也可以转发或发送上述连接信息。
下面,结合1详细介绍本发明实施例提供的一种基于浏览器的直播方法的具体实现步骤:
首先,执行步骤S101,服务器首先获取主播端发送的第一连接信息,所述第一连接信息包括第一本地会话描述符和主播端的第一网络地址信息。
在本发明实施例中,为了使主播端与用户端建立点对点直播连接,需要服务器传递第一连接信息和第二连接信息,主播端的第一连接信息主要第一本地会话描述符和主播端的第一网络地址信息,其中第一本地会话描述的作用是约定通信双方的媒体支持格式和类型,从而协调通信,而第一网络地址信息,是在为了在建立点对点直播连接,让对方知道建立连接的对方的网络地址,所述第一网络地址信息包括公网的IP地址,通讯端口等信息,当然,在具体的实施过程中,本领域技术人员可以根据通信双方的实际需求,而具体设置第一连接信息的具体内容,对此,本发明不做其他具体限制。
接着,执行步骤S102,服务器将所述第一连接信息发送至用户端,服务器在接收到主播端发送的第一连接信息后,会将接收到的第一连接信息发送给用户端,在该步骤中,服务器实现了将主播端的第一连接信息发送给用户端。
然后,执行步骤S103,服务器获取所述用户端发送的基于所述第一连接信息设置的第二连接信息,所述第二连接信息包括第二会话描述符和用户端的第二网络地址信息。
在本发明实施例中,用户端接收到服务器发送的第一连接信息后,会根据第一连接信息而设置用户端的第二连接信息,以此与主播端建立相应的连接,同理,第二连接信息包括用户端的第二会话描述符和第二网络地址信息,上述信息与第一连接信息类似,在此不再赘述,在该步骤中,服务器接收到了用户端发送的第二连接信息。
最后执行步骤S104,服务器将所述第二连接信息发送至所述主播端,以使所述主播端基于所述第二连接信息与所述用户端建立基于浏览器的点对点直播连接。
由上述描述可知,服务器仅仅传递的是通信双方(主播端和用户端)之间的第一连接信息和第二连接信息,而上述第一连接信息和第二连接信息所占用的带宽较少,所以相对于与现有技术中,需要服务器对直播流进行截屏、录制和实时转码等操作而言,本发明中在很大程序上减少了服务器在直播方法中所占用的带宽。
可选的,本发明实施例一提供的一种基于浏览器的直播方法,还包括:获取所述用户端的请求观看直播信息;将所述请求观看直播信息发送至所述主播端。
在本发明实施例中,服务器在发送主播端的第一连接信息之前,可以根据用户端的请求观看直播信息,确定第一连接信息的发送对象,通过服务器会将用户端的请求观看直播信息发送给主播端。当然了,服务器还会接收主播端的创建直播信息,并对创建直播信息进行相关处理,一般而言,创建直播信息包括需要创建的第一房间号和创始人进程ID。
在具体的实现中,可以通过主播端浏览器的JavaScript调用WebSocket对象的send方法发送一个create的请求将第一房间号传递给服务器,服务器按照模式匹配的方式从请求中的room字段中获取到第一房间号,然后以第一房间号为索引通过调用Erlang标准库提供的ets:match_object函数通过查表的方式查找数据库中是否存在相同的房间号,如果第一房间号存在,说明主播已经开始直播,房间已经存在了。这个阶段,服务器会拒绝创建房间的请求,并返回房间存在的错误信息。如果主播端所请求创建的房间不存在,那么服务器就会初始化房间信息为一个Erlang的记录并存入会话数据库,描述该房间信息的Erlang记录为
-record(session,{room::integer(),
server::pid(),
audiences::[pid()]}).其中room为房间的数字编号,sever为发起人进程的ID,audiences为观众的进程ID列表。在这个阶段,主播端浏览器就与服务器建立了双向连接,并且房间的创始人进程ID和房间号存入了数据库。
具体来说,与主播端相类似的,服务器还会获取用户端的请求观看直播信息,所述进入直播室请求包括第二房间号,此时,服务器会在数据库中查询是否存在与所述第二房间号相匹配的第三记录;如果存在相应的记录,则表明该第二房间号已经创建,即已经开始直播了,则接受所述进入直播室请求;如果不存在相应的记录,则表明第二房间号还未被创建,直播还未开始,则拒绝所述创建直播室请求。可选地,所述进入直播室请求还包括用户名,用以验证用户是否存在。
在具体的实施过程中,可以通过服务器端浏览器中运行的JavaScript代码获取用户端的请求观看直播信息,然后通过调用RTCPeerConnection对象的构造函数创建一个RTCPeerConnection对象。此时,用户端浏览器的JavaScript通过WebSocket与服务器建立连接,可以将用户请求的房间号连同用户名一起作为一个enter的请求传递给服务器,服务器会通过请求的room字段查找数据库中的session记录(在Erlang记录中包含了房间的创始人和观众信息),如果记录不存在,那么说明了用户请求观看的房间还未进入直播状态,此时服务器端可以向对应的用户端进程传递一个“当前房间不存在”的错误信息,并拒绝该观看直播请求。由于处于直播中的房间在数据库中的记录是存在且唯一的,因此服务器一旦在数据库中查找到了请求房间的记录,服务器则会接受进入直播室请求,并会继续处理其他用户进入直播室请求,服务器会通过模式匹配的方式,匹配client这一字段从enter请求的client字段中解析出观众的用户名,由于当前房间已经加入的观众的信息会被存储在session记录的audiences字段,因此服务器端代码可以通过遍历的方式来通过观众端传递的用户名来遍历来audiences字段,一旦这一字段中无法找到对应的用户名,那么服务器就可以知道当前请求加入直播间的观众不在直播间的观众列表中了,因此当前的用户是新加入房间的,在通过房间和用户名的检测之后,服务器端会传递一个STATUS_ROOM_ENTERED的消息给发起人并将此观众的进程ID存在房间的audiences列表。这个阶段,用户的用户名和对应的进程ID也被加入到了房间的数据库中,而且更为重要的是,主播端浏览器JavaScript代码通过服务器端返回的EVENT_CLIENT_ENTER消息就可以知到新用户观看直播的请求。
基于同一发明构思,从主播端的角度,本发明提供了另一实施例,详见实施例二。
实施例二
本实施例提供了一种基于浏览器的直播方法,如图2所示,所述方法包括:
S201:获取直播流;
S202:发送第一连接信息至服务器,以使所述服务器将所述第一连接信息发送至用户端,所述第一连接信息包括第一本地会话描述符和第一网络地址信息;
S203:接收所述服务器发送的来自所述用户端的基于所述第一连接信息设置的第二连接信息,所述第二连接信息包括第二本地会话描述符和用户端的第二网络地址信息;
S204:将所述第二连接信息设置为主播端的第一远程连接信息,以使所述主播端基于所述第一远程连接信息与所述用户端建立基于浏览器的点对点直播连接;
S205:基于所述点对点直播连接,将所述直播流传输至所述用户端。
需要说明的是WebRTC(Web Real-Time Communication),即“源自网页即时通信”,是一个支持浏览器进行实时语音、视频对话的开源协议。WebRTC支持目前的主流浏览器,并且基于SRTP和UDP,即便在网络信号一般的情况下也具备较好的稳定性。本发明实施例中提供的一种基于浏览器的直播方法,WebRTC可以支持用户端端浏览器、主播端浏览器进行直播。
下面,结合图2详细介绍本发明实施例提供的基于浏览器的直播方法的具体实现步骤:
首先,执行步骤S201,主播端获取直播流。
在本发明实施例中,主播端作为直播的发起者,首先会获取直播流,当然了,在获取直播流之后,主播端会向服务器发送创建直播信息,这与实施例一种的实现过程类似,在此不再赘述。
在具体的实施过程中,可以通过主播端浏览器的JavaScript调用HTML5的Navigator.getUserMedia()API请求访问本地音视频设备。在获得了访问用户的音视频设备的权限之后,主播端浏览器的JavaScript代码会将流媒体显示在直播的HTML页面,被video标签上并且将流媒体保存在mediaStream的JavaScript变量上,以便后续使用。此时主播端已经获取了本机音视频设备采集的视频和音频。
接着,执行步骤S202,发送第一连接信息至所述服务器,以使所述服务器将所述第一连接信息发送至用户端,所述第一连接信息包括第一本地会话描述符和第一网络地址信息。
在本发明实施例中,发送的第一连接信息包括第一本地会话描述符和第一网络地址信息,第一本地会话符和第一网络地址信息的内容在实施一中已作出相关说明,下面对具体的实现过程进行说明。
在具体的实施过程中,可以通过主播端浏览器设置RTCPeerConnection对象来设置第一本地描述符,主播端浏览器的JavaScript代码首先创建一个RTCPeerConnection对象,然后为创建的RTCPeerConnection对象加入流媒体和相关的事件绑定,然后通过RTCPeerConnection的createOffer方法创建第一会话描述符(Session Description),当所述第一会话描述符创建完成后,主播端浏览器的JavaScript代码调用RTCPeerConnection的setLocalDescription()成员函数将此会话描述符设置成该RTCPeerConnection对象的本地描述符。关于第一网络地址信息,一般是通过获取ICE候选而得到的,ICE候选是指InteractiveConnectivity Establishment(交互式连通建立方式)信息,其中ICE候选中,包含了主播端的网络地址信息,例如公网的IP地址,通讯端口等信息,通过ICE候选,通信的双方可以通过网络地址信息建立通信通道,使得媒体流在通信双方顺利传输。而主播端浏览器在创建RTCPeerConnection的时候,通过参数指定了相应的STUN/TURN服务器,因此,通过RTCPeerConnection的onicecandidate回调,从而获取到STUN/TURN服务器返回的ICE候选,
接着,执行步骤S203,接收所述服务器发送的来自所述用户端的基于所述第一连接信息设置的第二连接信息,所述第二连接信息包括第二本地会话描述符和用户端的第二网络地址信息。
在本发明实施例中,用户端基于第一连接信息设置的第二连接信息,是作为与第一连接信息相对应的信息。其设置过程与第一连接信息相类似,在此不再赘述。
接着,执行步骤S204,将所述第二连接信息设置为主播端的第一远程连接信息,以使所述主播端基于所述第一远程连接信息与所述用户端建立基于浏览器的点对点直播连接。
在具体的实施过程中,可以通过主播端创建的RTCPeerConnection对象的addIceCandidate方法将用户端的第二连接信息加入到此RTCPeerConnection中,从而将第二连接信息设置成主播端的第一远程连接信息。
最后,执行步骤S205,基于所述点对点直播连接,将所述直播流传输至所述用户端。
在本发明实施例中,由于主播端在接收所述服务器发送的来自所述用户端的基于所述第一连接信息设置的第二连接信息,并将第二连接信息设置为主播端的第一远程连接信息之后,主播端与用户端建立了基于浏览器的点对点的直播连接,即点与点之间的通讯通道已经建立,主播端与用户端之间也可以通过各自的浏览器直接进行数据交换。
在具体的实施过程中,用户端的onaddstream会在主播端的流媒体就绪时被调用,通过这个回调的EVENT对象获取到了流之后,将流加入用户端的video HTML标签,此时观众端就可以观看到主播端的音视频信息了,同时也可以通过DataChannel,进行交互文字等信息,进行实时交流。而在这个阶段,主播端和用户端通信就不需要通过服务器了,而是通过点对点的方式进行直接直播通信。
由于通过上述步骤,用户端与主播端之间就建立了点对点直播连接,从而用户端与主播端之间就可以进行点对点的直接通信,相对于与现有技术而言,本发明中服务器只需要接收和发送用户端与主播端之间的连接信息,而这些信息占用带宽量很少,因此大大减少了服务器在直播方法中所占用的带宽,进一步地,用户端与主播端之间可以进行点对点的直接通信,主播端可以直接将直播流传输至用户端,因而避免了直播方法实现的复杂性。
可选的,在发送第一连接信息至所述服务器之前,还包括:接收服务器发送的来自用户端的请求观看直播信息,以确定与主播端建立连接的用户端。
可选的,所述第一本地会话描述符,包括:所述直播流传输的支持格式和类型。当然,在具体的实施过程中,本领域技术人员可以根据通信双方的实际需求,而具体设置第一连接信息的具体内容,对此,本发明不做其他具体限制。
基于同一发明构思,从用户端的角度,本发明提供了另一实施例,详见实施例三。
实施例三
本实施例提供了一种基于浏览器的直播方法,如图3所示,所述方法包括:
S301:接收服务器发送的来自主播端的第一连接信息,所述第一连接信息包括第一本地会话描述符和第一网络地址信息;
S302:基于所述第一连接信息设置用户端的第二连接信息,所述第二连接信息包括第二本地会话描述符和用户端的第二网络地址信息;
S303:将所述第二连接信息发送至所述服务器,以使所述服务器将所述第二连接信息发送至所述主播端;
S304:将所述第一连接信息设置为用户端的第二远程连接信息,以使所述用户端基于所述第二远程连接信息与所述主播端建立基于浏览器的点对点直播连接;
S305:接收所述主播端基于所述点对点直播连接发送的直播流。
由于用户端的数据处理过程与实施例二中主播端的数据处理过程相类似,因此,在此不再赘述。
在介绍了本实施例提供的方法的详细流程后,为了便于理解本实施例提供的方法的交互过程,下面,将结合图4来介绍本发明提供方法的一交互实例:
S401:主播端获取直播流;
S402:主播端将第一连接信息发送至所述服务器;
S403:服务器发送所述第一连接信息至用户端;
S404:用户端基于所述第一连接信息设置第二连接信息,所述第二连接信息包括第二本地会话描述符和第二网络地址信息;
S405:用户端将所述第一连接信息设置为第二远程连接信息;
S406:用户端将所述第二连接信息发送至服务器;
S407:服务器将所述第二连接信息发送至主播端;
S408:主播端将所述第二连接信息设置为第一远程连接信息;
S409:主播端将所述直播流发送至所述用户端;
S410:用户端接收所述主播端发送的直播流。
基于同一发明构思,本发明提供了一种服务器,详见实施例四。
实施例四
本实施例提供了一种服务器,如图5所示,所述服务器包括:
第一获取模块,用于获取主播端发送的第一连接信息,所述第一连接信息包括第一本地会话描述符和主播端的第一网络地址信息;
第一发送模块,用于将所述第一连接信息发送至用户端;
第二获取模块,用于获取所述用户端发送的基于所述第一连接信息设置的第二连接信息,所述第二连接信息包括第二会话描述符和用户端的第二网络地址信息;
第二发送模块,用于将所述第二连接信息发送至所述主播端,以使所述在主播端基于所述第二连接信息与所述用户端建立基于浏览器的点对点直播连接。
可选的,所述服务器还包括:
第三获取模块,用于获取所述用户端的请求观看直播信息;
第三发送模块,用于将所述请求观看直播信息发送至所述主播端。
基于同一发明构思,本发明提供了一种主播端,详见实施例五。
实施例五
本实施例提供了一种基于浏览器的主播端,如图6所示,所述主播端包括:
第四获取模块,用于获取直播流;
第四发送模块,用于发送第一连接信息至所述服务器,所述第一连接信息包括第一本地会话描述符和第一网络地址信息;
第一接收模块,用于接收所述服务器发送的来自所述用户端的基于所述第一连接信息设置的第二连接信息,所述第二连接信息包括第二本地会话描述符和第二网络地址信息;
第一处理模块,用于将所述第二连接信息设置为主播端的第一远程连接信息,以使所述主播端基于所述第一远程连接信息与所述用户端建立基于浏览器的点对点直播连接;
传输模块,用于基于所述点对点直播连接,将所述直播流传输至所述用户端。
可选的,所述主播端,还包括:
第二接收模块,用于接收服务器发送的来自用户端的请求观看直播信息,以确定与主播端建立连接的用户端。
可选的,所述第一本地会话描述符,包括:所述直播流传输的支持格式和类型。
基于同一发明构思,本发明提供了一种基于浏览器的用户端,详见实施例六。
实施例六
本实施例提供了一种基于浏览器的用户端,如图7所示,所述用户端包括:
第三接收模块,用于接收服务器发送的来自主播端的第一连接信息,所述第一连接信息包括第一本地会话描述符和第一网络地址信息;
第二处理模块,用于基于所述第一连接信息设置用户端的第二连接信息,所述第二连接信息包括第二本地会话描述符和用户端的第二网络地址信息;
第四发送模块,用于将所述第二连接信息发送至所述服务器,以使所述服务器将所述第二连接信息发送至所述主播端;
第三处理模块,用于将所述第一连接信息设置为用户端的第二远程连接信息,以使所述用户端基于所述第二远程连接信息与所述主播端建立基于浏览器的点对点直播连接;
第四接收模块,用于接收所述主播端基于所述点对点直播连接发送的直播流。
前述图1-图7实施例中的基于浏览器的直播方法的各种变化方式和具体实例同样适用于本实施例的服务器、主播端和用户端,通过前述对基于浏览器的直播方法的详细描述,本领域技术人员可以清楚的知道本实施例中服务器、主播端和用户端的实施方法,所以为了说明书的简洁,在此不再详述。
本发明实施例中提供的技术方案,至少具有如下技术效果或优点:
1、在本发明实施例的技术方案中,服务器将主播端的第一连接信息发送至用户端,而第一连接信息中包含了第一本地会话描述符和主播端的第一网络地址信息,则用户端接收到了第一本地会话描述符和主播端的第一网络地址信息,然后用户端基于收到的第一连接信息设置第二连接信息,又通过服务器将第二连接信息发送至所述主播端,第二连接信息包含了第一本地会话描述符和用户端的第二网络地址信息,主播端接收到上述信息后,所述在主播端与所述用户端之间就建立了基于浏览器的点对点直播连接。由于在上述过程中,服务器只需要传递通信双方(主播端和用户端)之间的连接信息,而这些连接信息所占用的带宽较少,所以相对于与现有技术中需要服务器对直播流进行截屏、录制和实时转码等操作而言,本发明中在很大程序上减少了服务器在直播方法中所占用的带宽。
2、在本发明实施例的技术方案中,主播端通过服务器将第一连接信息发送至用户端,并且接收所述服务器发送的来自所述用户端的基于所述第一连接信息设置的第二连接信息,其中,第一连接信息和第二连接信息中分别包含了建立基于浏览器的点对点直播连接的必要信息,然后主播端将所述第二连接信息设置为主播端的远程连接信息,这样所述主播端与所述用户端之间就建立了点对点直播连接,从而主播端可以直接将直播流传输至用户端,所以相对于与现有技术而言,本发明中服务器只需要传递通信双方(主播端和用户端)之间的连接信息,而这些连接信息所占用的带宽较少,因此减少了服务器在直播方法中所占用的带宽,进一步地,用户端与主播端之间通过传递第一连接信息和第二连接信息后,可以进行点对点的直播,减少了直播方法实现的复杂性。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
尽管已描述了本发明的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本发明范围的所有变更和修改。
显然,本领域的技术人员可以对本发明实施例进行各种改动和变型而不脱离本发明实施例的精神和范围。这样,倘若本发明实施例的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。