CN111835697B - 一种媒体流发送方法、装置、设备和系统 - Google Patents
一种媒体流发送方法、装置、设备和系统 Download PDFInfo
- Publication number
- CN111835697B CN111835697B CN201910330890.5A CN201910330890A CN111835697B CN 111835697 B CN111835697 B CN 111835697B CN 201910330890 A CN201910330890 A CN 201910330890A CN 111835697 B CN111835697 B CN 111835697B
- Authority
- CN
- China
- Prior art keywords
- client
- live
- media stream
- proxy
- request message
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/21—Server components or server architectures
- H04N21/222—Secondary servers, e.g. proxy server, cable television Head-end
-
- 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/10—Architectures or entities
- H04L65/1045—Proxies, e.g. for session initiation protocol [SIP]
-
- 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/40—Support for services or applications
- H04L65/403—Arrangements for multi-party communication, e.g. for conferences
-
- 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/61—Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio
- H04L65/611—Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio for multicast or broadcast
-
- 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/752—Media network packet handling adapting media to network capabilities
-
- 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/762—Media network packet handling at the source
-
- 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/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
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/21—Server components or server architectures
- H04N21/218—Source of audio or video content, e.g. local disk arrays
- H04N21/2187—Live feed
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/20—Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
- H04N21/23—Processing of content or additional data; Elementary server operations; Server middleware
- H04N21/239—Interfacing the upstream path of the transmission network, e.g. prioritizing client content requests
- H04N21/2393—Interfacing the upstream path of the transmission network, e.g. prioritizing client content requests involving handling client requests
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/47—End-user applications
- H04N21/472—End-user interface for requesting content, additional data or services; End-user interface for interacting with content, e.g. for content reservation or setting reminders, for requesting event notification, for manipulating displayed content
- H04N21/47202—End-user interface for requesting content, additional data or services; End-user interface for interacting with content, e.g. for content reservation or setting reminders, for requesting event notification, for manipulating displayed content for requesting content on demand, e.g. video on demand
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/60—Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client
- H04N21/63—Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
- H04N21/64—Addressing
- H04N21/6408—Unicasting
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/60—Network structure or processes for video distribution between server and client or between remote clients; Control signalling between clients, server and network components; Transmission of management data between server and client, e.g. sending from server to client commands for recording incoming content stream; Communication details between server and client
- H04N21/63—Control signaling related to video distribution between client, server and network components; Network processes for video distribution between server and clients or between remote clients, e.g. transmitting basic layer and enhancement layers over different transmission paths, setting up a peer-to-peer communication via Internet between remote STB's; Communication protocols; Addressing
- H04N21/643—Communication protocols
- H04N21/6437—Real-time Transport Protocol [RTP]
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Computer Networks & Wireless Communication (AREA)
- Databases & Information Systems (AREA)
- Human Computer Interaction (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
- Information Transfer Between Computers (AREA)
Abstract
公开了一种媒体流发送方法、装置、设备和系统,用于为进入直播间的客户端提供直播媒体流,所述方法包括:代理服务器分别接收同一代理客户端发送的第一直播间请求消息和第二直播间请求消息,分别接收媒体服务器通过代理服务器向第一客户端发送的第一直播媒体流和向第二客户端发送的第二直播媒体流,代理服务器在确定所述第一客户端的角色为主用户、第二客户端的角色为仆用户的情况下,仅将第一直播媒体流发送给代理客户端,以使代理客户端将该第一直播媒体流发送给第一客户端和第二客户端。本方法对于同一直播间的所有客户端,代理服务器只需要发送一份直播媒体流给代理客户端,耗费一份广域带宽,所以降低了WAN网链路的负载,减小资源开销。
Description
技术领域
本申请涉及视频播放领域,尤其是涉及一种媒体流发送方法、装置、设备和系统。
背景技术
视频观看包括直播和点播两种方式。其中,对于视频点播方式,用户在观看的时候,可以随时选择快进或者回退视频内容,而对于直播而言却不能选择。所谓直播,可以概括地理解为是将每一帧数据打上时序标签后,再进行流式传输的过程。具体地,采集装置比如摄像机、麦克风等源源不断地采集音视频信息,然后将这些信息经过编码、封包、推流等处理后,再经过分发网络进行传输,播放端不停地下载数据并按时序进行解码播放。视频直播整个流程可以分为采集、编码、推流、转码、分发、解码/渲染等一系列过程。
主流的互联网视频直播厂家一般采用单播传输协议来传输视频,所以对于N个用户正在观看视频,就会有N路视频流。此外,对于企业中开展的视频直播,要求在支持直播视频的同时还要支持演示文档共享和文字评论等功能,在企业直播的Web页面中一边显示视频内容,一边还要延时共享文档和文字评论内容,以满足用户需求,提升用户体验。
为了提升用户体验、节省骨干网络带宽,直播平台一般会部署直播内容分发网络(Content Delivery Network,CDN)。所述直播CDN是一个分布式的内容分发平台,支持多级架构,可以将用于缓存的服务器分层分级部署,进而为不同地域的用户提供就近服务。
在直播CDN分发音视频流的过程中,对于视频的推流和分流过程一般使用实时消息协议(Real Time Messaging Protocol,RTMP),或者称实时消息传输协议;对于分发过程则一般使用RTMP、HLS(HTTP Live Streaming)和超文本传输协议(Hyper Text TransferProtocol,HTTP)-闪视频(Flash Video,FLV),简称“HTTP-FLV”三种协议。其中,HLS是苹果公司基于HTTP的流媒体传输协议,主要应用于iOS设备包括iPhone、iPad、iPod touch以及Mac OSX提供音视频直播服务和录制内容(点播)等服务。HLS的最大特点是:它并不是一次性请求完整的数据流,而是会在服务器端将流媒体数据切割成连续的时长较短的小文件,并通过索引文件按序访问小文件。客户端只要不停的按序播放从服务器接收到的这些小文件,就能实现播放音视频。
如图1所示,在直播CDN时,内容源(content source)将音视频媒体流通过RTMP发送给企业数据中心(Enterprise Data Center,EDC),其中EDC中包括Web服务器(Webserver)和多个媒体服务器(Media server),EDC中的Web服务器负责响应客户端(PC)的直播观看请求,对用户进行鉴权,并且根据用户的位置就近分配一个媒体服务器来提供服务。该被选择的媒体服务器会根据预设策略将音视频的媒体流发送给下一级的区域数据中心(Region Data Center,RDC),RDC中的媒体服务器在接收到该媒体流(直播内容)之后,会再按照预设策略将其发送给下一级的位于机房(Server Room,SR)中的媒体服务器,最后由机房中的媒体服务器缓存上级的媒体服务器分发的媒体流(直播内容)并直接为用户提供直播服务。
在这个过程中,上一级RDC中的媒体服务器需要向直播间中每个请求获取媒体流的客户端发送直播媒体流,使得上一级的媒体服务器要向直播间里的每个用户都发送直播媒体流,当进入直播间的用户数量较多时,需要占用大量的广域网(wide area network,WAN)资源来传输直播媒体流,导致网络开销较大。
发明内容
本申请实施例提供了一种媒体流发送方法、装置、设备和系统,用于减小媒体服务器向同一直播间的客户端发送媒体流的资源开销,具体地,本申请实施例公开了以下技术方案:
第一方面,本申请提供了一种媒体流发送方法,所述方法为进入直播间的客户端提供直播媒体流,所述方法包括:代理服务器分别接收同一代理客户端发送用于请求进入直播间的第一直播间请求消息和第二直播间请求消息,其中所述第一直播间请求消息来自第一客户端,所述第二直播间请求消息来自第二客户端;代理服务器分别接收媒体服务器通过所述代理服务器向所述第一客户端发送的第一直播媒体流和向所述第二客户端发送的第二直播媒体流;代理服务器根据所述第一直播间请求消息确定所述第一客户端的角色,并根据所述第二直播间请求消息确定所述第二客户端的角色;所述代理服务器在确定所述第一客户端的角色为主用户、所述第二客户端的角色为仆用户的情况下,仅将所述第一直播媒体流发送给所述代理客户端,以使所述代理客户端将所述第一直播媒体流发送给所述第一客户端和所述第二客户端。
本方面提供的方法,对于仆用户角色的第二客户端,在请求获取直播媒体流时,代理客户端只需将缓存在本地的主用户角色的第一客户端请求的第一媒体流直接发送给该第二客户端,从而避免了代理服务器再向代理客户端发送直播媒体流,无需代理服务器为每个通过该代理客户端进入直播间的客户端发送直播媒体流,本方法减少了代理服务器与代理客户端之间发送媒体流的流量,有效地降低出口带宽,节约了资源开销。
结合第一方面,在第一方面的一种可能的实现方式中,所述第一直播间请求消息中包括代理客户端的标识,和,所述第二直播间请求消息中包括所述代理客户端的标识;所述方法还包括:代理服务器根据所述第一直播间请求消息包括的所述代理客户端的标识,和,所述第二直播间请求消息包括的所述代理客户端的标识,确定所述第一直播间请求消息和第二直播间请求消息来自同一代理客户端。本方面通过在第一直播间请求消息或第二直播间请求消息携带代理客户端的标识,使得代理服务器在转发消息和响应时能够确定接收端对象,便于消息收发。
结合第一方面,在第一方面的另一种可能的实现方式中,所述代理服务器根据所述第二直播间请求消息确定所述第二客户端的角色,包括:代理服务器确定在接收到所述第二直播间请求消息时,所述直播间中是否存在通过所述代理客户端进入所述直播间的角色为主用户的客户端;如果存在,则确定所述第二客户端的角色是仆用户。本实现方式中,对于单一主用户的技术场景,代理服务器只需判断直播间中是否存在主用户,即可以确定进入直播间的客户端的身份角色,能够快速地识别出客户端的角色,并进行标记。
对应地,如果不存在所述主用户的客户端,则确定所述第二客户端的角色是主用户。
结合第一方面,在第一方面的又一种可能的实现方式中,所述代理服务器将所述第一直播媒体流发送给所述代理客户端之后,还包括:所述代理服务器接收代理客户端发送的退出直播间请求消息,所述退出直播间请求消息用于请求所述第一客户端退出所述直播间;所述代理服务器在确定将所述第二客户端作为新的主用户时,将第二客户端的角色从所述仆用户变更为主用户;以及将向第二客户端发送的第一直播媒体流切换为第二直播媒体流。本实现方式中,当主用户身份的第一客户端退出直播间时,利用新的主用户角色的第二客户端身份向媒体服务器请求并获取直播媒体流,从而保证仍然在直播间中的第二客户端观看媒体内容不受影响,保证直播间中第二客户端的用户观看直播的用户体验。
结合第一方面,在第一方面的又一种可能的实现方式中,所述代理服务器向第二客户端发送的所述第一直播媒体流的最后一帧与向所述第二客户端发送的所述第二直播媒体流的第一帧为相邻帧;所述代理服务器将向所述第二客户端发送的第一直播媒体流切换为所述第二直播媒体流之前还包括:代理服务器根据所述第一直播媒体流和所述第二直播媒体流识别分别属于所述第一直播媒体流和所述第二直播媒体流的第一I帧和第二I帧,所述第一I帧和所述第二I帧为相同视频帧。
所述代理服务器根据所述第一I帧和第二I帧确定相邻的且分别属于所述第一直播媒体流和所述第二直播媒体流的第一切换帧和第二切换帧,并将该第一切换帧和第二切换帧分别作为向所述第二客户端发送的所述第一直播媒体流的最后一帧,与,向所述第一客户端发送的所述第二直播媒体流的第一帧;代理服务器在确定所述第一切换帧和所述第二切换帧之后还包括:所述代理服务器将来自所述第一客户端的退出直播间请求消息转发给媒体服务器。
结合第一方面,在第一方面的又一种可能的实现方式中,代理服务器根据所述第二直播间请求消息确定第二客户端的角色,包括:所述代理服务器在接收到所述第二直播间请求消息时,判断通过所述代理客户端进入所述直播间的角色为主用户的客户端的数量是否达到预设上限,所述预设上限大于等于2且为正整数;如果达到所述预设上限,则确定所述第二客户端的角色是仆用户。本实现方式中,对于多个主用户的技术场景,即包括一个主要主用户和多个备份主用户的情况下,通过统计直播间中主用户角色的客户端数量与预设上限之间的大小来确定客户端的角色。可以理解地,还可以通过其他方式来确定客户端的角色,比如根据直播间请求的数量来确定,本实施例对此不予限制。
结合第一方面,在第一方面的又一种可能的实现方式中,如果所述直播间中角色为主用户的客户端的数量不为0,且没有达到所述预设上限,则代理服务器确定所述第二客户端的角色是备份主用户。
结合第一方面,在第一方面的又一种可能的实现方式中,在所述第一客户端是主要主用户,所述第二客户端是仆用户的情况下,还包括:所述代理服务器接收来自第一客户端的退出直播间请求消息;所述代理服务器在确定将所述第二客户端作为新的备份主用户时,将所述第二客户端的角色从仆用户变更为备份主用户;所述代理服务器以图像组GOP为单位缓存接收的所述第二直播媒体流。本实现方式,在第二客户端是备份主用户的情况下,代理服务器接收来自媒体服务器的第二直播媒体流,并存储在本地,以便为后续变更用户角色时为直播间的客户端提供该缓存的第二直播媒体流。
结合第一方面,在第一方面的又一种可能的实现方式中,在所述第一客户端是主要主用户,所述第二客户端是备份主用户的情况下,还包括:所述代理服务器以GOP为单位缓存接收的所述第二直播媒体流;根据所述第一直播媒体流和缓存的所述第二直播媒体流识别分别属于所述第一直播媒体流和所述第二直播媒体流的第一I帧和第二I帧,所述第一I帧和所述第二I帧为相同视频帧。
结合第一方面,在第一方面的又一种可能的实现方式中,还包括:所述代理服务器接收来自所述第一客户端的退出直播间请求消息;在确定将所述第二客户端作为新的主要主用户时,将所述第二客户端的角色从所述备份主用户变更为主要主用户;所述代理服务器根据所述第一I帧和所述第二I帧确定相邻的且分别属于所述第一直播媒体流和所述第二直播媒体流的第一切换帧和第二切换帧;所述代理服务器根据所述第一切换帧和所述第二切换帧,将向第二客户端发送的第一直播媒体流切换为所述第二直播媒体流,其中,代理服务器向所述第二客户端发送的所述第一直播媒体流的最后一帧为所述第一切换帧,向所述第一客户端发送的所述第二直播媒体流的第一帧为所述第二切换帧。本实现方式,在第二客户端的角色从备份主用户变更为主要主用户时,接收和缓存来自媒体服务器的第二直播媒体流,并将该缓存的第二直播媒体流复制分发给直播间中的所有客户端,从而保证直播间中其他客户端正常观看直播内容,不受影响。
结合第一方面,在第一方面的又一种可能的实现方式中,代理服务器以GOP为单位缓存所述第一直播媒体流和所述第二直播媒体流。可选的,在代理服务器本地缓存所述第一直播媒体流的3个GOP,和缓存第二直播媒体流的3个GOP。
第二方面,本申请实施例还提供了一种媒体流发送方法,所述方法为进入直播间的客户端提供直播媒体流,所述方法包括:代理客户端分别接收第一客户端发送用于请求进入直播间的第一直播间请求消息,和,第二客户端发送用于请求进入直播间的第二直播间请求消息,代理客户端通过代理服务器向媒体服务器发送所述第一直播间请求消息和所述第二直播间请求消息,代理客户端接收所述代理服务器发送的第一直播媒体流,所述第一直播媒体流是所述媒体服务器通过所述代理服务器向所述第一客户端发送的媒体流,所述第一客户端的角色为主用户,所述第二客户端的角色为仆用户,代理客户端将所述第一直播媒体流发送给所述第一客户端和第二客户端。
本方面提供的方法,由同一代理客户端接入直播间的所有用户而言,代理服务器只需要发送一份直播媒体流给代理客户端,即代理客户端只需耗费一份广域带宽来接收代理服务器发送的直播媒体流,相比于媒体服务器将所述直播媒体流发送给直播间中的各个客户端所占用的传输资源来说,降低了WAN网链路的负载,节约了传输开销。
结合第二方面,在第二方面的一种可能的实现方式中,所述代理客户端通过代理服务器向媒体服务器发送所述第一直播间请求消息之前还包括:所述代理客户端将所述代理客户端的标识添加到所述第一直播间请求消息中;和,所述代理客户端通过代理服务器向媒体服务器发送所述第二直播间请求消息之前还包括:所述代理客户端将所述代理客户端的标识添加到所述第二直播间请求消息中。
结合第二方面,在第二方面的另一种可能的实现方式中,所述代理客户端接收所述代理服务器发送的第一直播媒体流之后,还包括:所述代理客户端以图像组GOP为单位缓存所述第一直播媒体流。
结合第二方面,在第二方面的又一种可能的实现方式中,所述代理客户端将所述第一直播媒体流发送给所述第二客户端之前,还包括:代理客户端调整所述第一直播媒体流的时间戳,使得调整后的时间戳满足:代理客户端向第二客户端发送的所述第一直播媒体流的第一帧的时间戳为0,并且,向第二客户端发送的所述第一直播媒体流的相邻帧的时间戳连续。
结合第二方面,在第二方面的又一种可能的实现方式中,在所述第一客户端请求退出直播间的情况下,还包括:所述代理客户端接收所述代理服务器发送的第二直播媒体流,所述第二直播媒体流是媒体服务器通过所述代理客户端发送给第二客户端的媒体流,所述第二客户端是角色从仆用户变更为主用户的客户端;所述代理客户端将所述第二直播媒体流发送给所述第二客户端。
结合第二方面,在第二方面的又一种可能的实现方式中,所述代理客户端将所述第二直播媒体流发送给所述第二客户端之前,还包括:代理客户端调整所述第二直播媒体流的时间戳,使得调整后的时间戳满足:代理客户端向所述第二客户端发送的所述第二直播媒体流的第一帧的时间戳与向所述第二客户端发送的所述第一直播媒体流的最后一帧的时间戳连续。
第三方面,本申请实施例一种媒体流发送装置,所述装置包括:该装置包括用于执行上述第一方面以及第一方面的各种实现方式中方法步骤的单元。具体地,该装置包括接收单元、处理单元和发送单元,此外,还可以包括存储单元等其他模块或单元。
可选的,所述装置为代理服务器。
第四方面,本申请实施例一种媒体流发送装置,所述装置包括:该装置包括用于执行上述第二方面以及第二方面的各种实现方式中方法步骤的单元。具体地,该装置包括接收单元、处理单元和发送单元,此外,还可以包括存储单元等其他模块或单元。
可选的,所述装置为代理客户端。
第五方面,本申请实施例还提供了一种网络设备,包括收发器、处理器和存储器,所述处理器与所述存储器耦合,所述存储器用于存储指令;所述处理器用于调用所述指令使得所述网络设备执行前述第一方面以及第一方面各种实现方式中的媒体流发送方法,或者,调用所述指令使得所述网络设备执行前述第二方面以及第二方面各种实现方式中的媒体流发送方法。
可选的,所述网络设备为代理服务器,或,代理客户端。
进一步地,在本方面的一种可能实现方式中,当所述网络设备作为代理服务器时,所述收发器,用于分别接收同一代理客户端发送的用于请求进入直播间的第一直播间请求消息和第二直播间请求消息,分别接收媒体服务器通过所述代理服务器向所述第一客户端发送的第一直播媒体流和向所述第二客户端发送的第二直播媒体流,其中所述第一直播间请求消息来自第一客户端,所述第二直播间请求消息来自第二客户端;所述处理器,用于根据所述第一直播间请求消息确定所述第一客户端的角色,并根据所述第二直播间请求消息确定所述第二客户端的角色;所述收发器,还用于在确定所述第一客户端的角色为主用户、所述第二客户端的角色为仆用户的情况下,仅将所述第一直播媒体流发送给所述代理客户端,以使所述代理客户端将所述第一直播媒体流发送给所述第一客户端和所述第二客户端。
可选的,在本方面的另一种可能实现方式中,当所述网络设备作为代理客户端时,所述收发器,用于分别接收第一客户端发送的用于请求进入直播间的第一直播间请求消息,和,第二客户端发送的用于请求进入所述直播间的第二直播间请求消息;以及,通过代理服务器向媒体服务器发送所述第一直播间请求消息和所述第二直播间请求消息;所述收发器,还用于接收所述代理服务器发送的第一直播媒体流,并且将所述第一直播媒体流发送给所述第一客户端和所述第二客户端。其中,所述第一直播媒体流是所述媒体服务器通过所述代理服务器向所述第一客户端发送的媒体流,所述第一客户端的角色为主用户,所述第二客户端的角色为仆用户。
第六方面,本申请实施例还提供了一种计算机可读存储介质,所述存储介质中存储有指令,当所述指令在计算机或处理器上运行时,用于执行前述第一方面以及第一方面各种实现方式中的方法,或,执行前述第二方面以及第二方面各种实现方式中的方法。
第七方面,本申请实施例还提供了一种计算机程序产品,所述计算机程序产品包括计算机指令,当所述指令被计算机或处理器执行时,可实现前述第一方面和第一方面各种实现方式中的方法,或,实现前述第二方面以及第二方面各种实现方式中的方法。
第八方面,本申请实施例还提供了一种媒体流发送系统,所述系统包括至少一个客户端、代理客户端、代理服务器和媒体服务器,其中每个所述客户端通过所述代理客户端接入直播间,所述系统通过所述代理客户端和所述代理服务器实现前述第一方面、第二方面以及第一方面或第二方面中的各种实现方式所述的媒体流发送方法。其中,所述代理客户端用于执行第二方面或第二方面的任一实现方式所述的媒体流发送方法,所述代理服务器用于执行第一方面或第一方面的任一实现方式所述的媒体流发送方法。
其中,可选的,所述代理服务器为上述第三方面或第三方面的任一实现方式所述的媒体发送装置,所述代理客户端为上述第四方面或第四方面的任一实现方式所述的媒体发送装置。
结合第八方面,在第八方面的一种可能的实现中,所述代理服务器和所述媒体服务器位于区域数据中心RDC中,所述RDC中还包括Web服务器,所述Web服务器用于为通过代理客户端进入直播间的客户端分配媒体服务器。
结合第八方面,在第八方面的另一种可能的实现中,所述系统还包括企业数据中心EDC和内容源。
可选的,所述媒体流发送系统为内容分发网络CDN系统。
另外,本申请实施例还提供了一种芯片系统,所述芯片系统包括处理器和接口电路,所述接口电路与所述处理器耦合,所述处理器用于执行计算机程序或指令,以实现前述第一方面以及第一方面各种实现方式中的方法,或,实现前述第二方面以及第二方面各种实现方式中的方法;其中所述接口电路用于与所述芯片系统之外的其它模块进行通信。
本申请提供的方法,利用代理客户端和代理服务器在获取主用户的客户端请求的直播媒体流时,缓存部分媒体流片段在代理客户端本地,当由其他客户端进入直播间并请求直播媒体流时,代理客户端将缓存在本地的媒体流直接发送给这些客户端,从而避免了代理服务器再向代理客户端发送直播媒体流。本方法中代理服务器与代理客户端之间也只发送主用户客户端请求的一份直播媒体流,即只需耗费一份广域带宽来传输该直播媒体流,相比于媒体服务器通过代理服务器将直播媒体流发送给各个客户端所占用的传输资源而言减少了发送媒体流的流量,降低了WAN网链路的负载,节约了资源开销。
另外,代理客户端在将一份直播媒体流发送给直播间的所有客户端时还调整该直播媒体流的时间戳,比如当主用户角色的第一客户端退出直播间时,代理客户端将原来发送给第二客户端的第一直播媒体流切换为第二直播媒体流时,调整所述第二直播媒体流的时间戳,从而使得代理客户端在向第二客户端发送第二直播媒体流时无缝对接原来正在播放的第一直播媒体流的媒体内容,避免由于第一客户端的退出导致第二客户端观看的媒体内容出现视频卡顿或其他影响,所以本方法通过代理客户端调整时间戳还保证了用户观看体验。
附图说明
图1为本申请提供的一种直播系统架构的示意图;
图2为本申请实施例提供的一种视频直播双边代理系统架构的示意图;
图3为本申请实施例提供的一种媒体流发送方法的流程图;
图4为本申请实施例提供的另一种媒体流发送方法的流程图;
图5为本申请实施例提供的一种媒体流发送方法的信令流程图;
图6为本申请实施例提供的另一种媒体流发送方法的信令流程图;
图7为本申请实施例提供的又一种媒体流发送方法的信令流程图;
图8为本申请实施例提供的又一种媒体流发送方法的信令流程图;
图9为本申请实施例提供一种媒体流发送装置的结构示意图;
图10为本申请实施例提供一种网络设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请实施例中的技术方案,并使本申请实施例的上述目的、特征和优点能够更加明显易懂,下面结合附图对本申请实施例中的技术方案作进一步详细的说明。
在对本申请实施例的技术方案说明之前,首先结合附图对本申请实施例的应用场景进行说明。
本申请的技术方案可应用于内容分发网络(content delivery network,CDN)系统中,该系统中新增的设备包括代理服务器(proxy server)和代理客户端(proxyclient)。
其中,所述代理服务器用于代理用户的视频承载协议,标识通过代理服务器进入直播间的所有客户端的角色,从媒体服务器中获取至少一个直播媒体流,并将角色是主用户身份的直播媒体流发送给代理客户端。另外,代理服务器还用于在主用户角色的客户端退出直播间时,更新直播间中其他用户的角色,并切换新的直播媒体流。所述代理客户端用于代理用户的视频承载协议,接收代理服务器发送的角色是主用户的客户端的直播媒体流,并将该直播媒体流复制和分发给通过该代理客户端接入的直播间中的所有客户端。
可选的,所述代理服务器可以位于区域数据中心(Region Data Center,RDC)。所述代理服务器具体可以部署在服务器上,或者还可以以网络功能虚拟化(NetworkFunctions Virtualization,NFV)的形式部署在通用客户端设备(Universal CustomerPremise Equipment,uCPE)上。
可选的,所述代理客户端可以为位于局域网边缘的设备,该局域网中的客户端通过该代理客户端进入直播间并通过该代理客户端获取直播媒体流。其中,所述代理客户端可以部署在服务器上,或者以NFV的形式部署在uCPE上。
进一步地,如图2所示,本实施例提供了一种视频CDN系统,该系统包括:内容源(content source)101、企业数据中心(enterprise data center,EDC)102、RDC 103、代理客户端104、至少一个客户端(client,C),比如第一客户端C1 105、第二客户端C2 106和第三客户端C3 107。其中,EDC 102中包括多个媒体服务器(media server)和Web服务器(Webserver),RDC 103中包括:代理服务器、多个媒体服务器和Web服务器等。其中,代理服务器与代理客户端之间通过WAN网络连接,代理客户端与其关联的至少一个客户端通过局域网(local area network,LAN)连接。
另外,所述CDN直播是一个分布式的内容分发平台,支持多级架构,通过将多个媒体服务器进行分层分级部署,从而为不同地域的用户提供就近服务。其中,所述EDC中的用户在直播间观看直播时,分配的媒体服务器部署可以在RDC中,传输的直播媒体流通过多协议标签交换技术(Multi-Protocol Label Switching,MPLS)专线达到RDC和代理客户端。
进一步地,上述各个设备或网元的功能概况如下表1所示。
表1
另外,需要说明的是,在本申请实施例所述的系统中,代理服务器可以对应一个或多个代理客户端。如,该代理服务器对应代理客户端1和代理客户端2,局域网1的客户端通过代理客户端1和该代理服务器进入直播间;局域网2的客户端通过代理客户端2和该代理服务器进入该直播间。并且,该代理服务器可以通过如下实施方式A或实施方式B来确定通过该代理服务器进入该直播间的每个客户端的角色。
实施方式A:对通过同一个代理客户端进入直播间的所有客户端统一确定客户端的角色。如,该代理服务器对应代理客户端1和代理客户端2,在通过代理客户端1进入直播间的客户端中确定至少一个主用户,并将其他的客户端确定为仆用户,并且,在通过代理客户端2进入直播间的客户端中确定至少一个主用户,并将其他的客户端确定为仆用户。在采用实施方式A确定各个客户端的角色时,相应地,代理服务器将角色为主用户的客户端的直播媒体流发送给该代理客户端,进而由该代理客户端将该直播媒体流发送给通过该代理客户端进入直播间的所有客户端。可以理解的是,在采用实施方式A确定客户端的角色时,通过每个代理客户端进入直播间的客户端中均包括角色为主用户的客户端,代理服务器向任一代理客户端发送的媒体流均为通过该代理客户端进入直播间的角色为主用户的客户端的媒体流。
实施方式B:对通过代理服务器进入直播间中的所有客户端统一确定客户端的角色。如,该代理服务器对应代理客户端1和代理客户端2,在通过代理客户端1和代理客户端2进入直播间的所有客户端中确定至少一个主用户,并将其他的客户端确定为仆用户。在采用实施方式B确定客户端的角色时,相应地,将角色为主用户的客户端的直播媒体流发送给所述系统中该代理服务器对应的每个代理客户端,进而再由每个代理客户端将该直播媒体流发送给通过各自代理客户端进入到该直播间的所有客户端。
为了简化表述,本实施例中,所述的角色是主用户的客户端,可简称为:主用户的客户端。同理地,所述角色是仆用户的客户端,可简称为:仆用户的客户端。
具体地,如图3所示,为本实施例提供的一种媒体流发送方法,所述方法为通过同一代理客户端进入直播间的所有客户端提供直播媒体流,具体地,方法包括:
步骤101:代理服务器分别接收同一代理客户端发送的用于请求进入直播间的第一直播间请求消息和第二直播间请求消息,其中第一直播间请求消息来自第一客户端,第二直播间请求消息来自第二客户端。
其中,所述第一直播间请求消息中包括代理客户端的标识,和,所述第二直播间请求消息中包括所述代理客户端的标识,所述标识可以是代理客户端的IP地址或端口号等。所述代理服务器可以根据所述第一直播间请求消息包括的所述代理客户端的标识确定转发所述第一直播间请求消息的代理客户端,并根据所述第二直播间请求消息包括的所述代理客户端的标识确定转发所述第二直播间请求消息的代理客户端,进而可以确定所述第一直播间请求消息和所述第二直播间请求消息是来自同一代理客户端。
步骤102:代理服务器分别接收媒体服务器通过所述代理服务器向所述第一客户端发送的第一直播媒体流,和,向所述第二客户端发送的第二直播媒体流。
具体的,代理服务器在接收到所述第一客户端发送的第一媒体请求消息后,将该第一媒体请求消息转发给该媒体服务器,并接收该媒体服务器根据该第一媒体请求消息发送的第一直播媒体流,并且,在接收到所述第二客户端发送的第二媒体请求消息后,将该第二媒体请求消息转发给该媒体服务器,并接收该媒体服务器根据该第二媒体请求消息发送的第二直播媒体流。
步骤103:代理服务器根据所述第一直播间请求消息确定所述第一客户端的角色,并且根据所述第二直播间请求消息确定所述第二客户端的角色。
具体可以采用上述“实施方式A”来实现步骤103。
进一步地,一种可能的实现是,对于单一主用户的技术场景,代理服务器每接收到一个直播间请求消息(如所述第二直播间请求消息),判断所述直播间中是否存在通过所述代理客户端进入所述直播间的角色为主用户的客户端;如果存在,则确定发送所述直播间请求消息的客户端(如所述第二客户端)的角色是仆用户(slave user)。如果不存在,则确定所述客户端的角色是主用户(master user)。
另一种可能的实现是,对于多个主用户的技术场景,比如包括一个主要主用户和至少一个备份主用户,步骤103具体包括:代理服务器每接收到一个直播间请求消息(如所述第二直播间请求消息),判断当前直播间中通过所述代理客户端进入所述直播间的角色为主用户的客户端的数量是否达到预设上限,所述预设上限大于等于2,如果达到所述预设上限,则确定发送所述直播间请求消息的客户端(如所述第二客户端)的角色是仆用户。如果未达到所述预设上限且所述数量不为0,则确定所述客户端的角色是备份主用户(secondary-master user)。如果数量为0,则确定所述客户端的角色是主要主用户(main-master user)。
具体也可以采用“实施方式B”来实现所述步骤103,具体的实现方式类似于“实施方式A”的上述具体实现方式。对于单一主用户的技术场景,相对于“实施方式A”的具体实现方式不同点仅在于,判断的是所述直播间中是否存在通过所述代理服务器进入所述直播间的角色为主用户的客户端。对于多个主用户的技术场景,相对于“实施方式A”的具体实现方式不同点仅在于,判断的是当前直播间中通过所述代理服务器进入所述直播间的角色为主用户的客户端的数量是否达到所述预设上限。
此外,还包括:代理服务器以图像组(group of picture,GOP)为单位缓存所述第一直播媒体流。GOP可以指两个I帧之间的图像序列,所述I帧(frame)又称为内部画面(intra picture),一般指利用动态图像专家组(moving picture experts group,MPEG)技术处理后的每个GOP的第一个帧,进一步地,所述MPEG技术处理包括对视频图像进行适度地压缩,使得第I帧可以作为随机访问的参考点,并且无需参考其他画面。
可选的,在代理服务器本地缓存3个GOP,每个GOP的时长为5s。
步骤104:代理服务器在确定所述第一客户端的角色为主用户、所述第二客户端的角色为仆用户的情况下,仅将所述第一直播媒体流发送给所述代理客户端,以使所述代理客户端将所述第一直播媒体流发送给所述第一客户端和所述第二客户端。
具体地,首先,代理服务器在步骤101中接收到所述第一直播间请求消息,在步骤102中接收所述第一直播媒体流,在步骤103中将所述第一客户端的角色确定为主用户,由于所述第一客户端的角色为主用户,在步骤104中将所述第一客户端的直播媒体流(即所述第一直播媒体流)发送给所述代理客户端,相应地,所述代理客户端将所述第一直播媒体流发送给所述第一客户端。然后,代理服务器在步骤101中接收到所述第二直播间请求消息,在步骤102中接收所述第二直播媒体流,在步骤103中将所述第二客户端的角色确定为仆用户,由于所述第二客户端的角色为仆用户,且与所述第一客户端对应同一代理客户端,所述代理服务器并不向所述代理客户端发送所述第二客户端的媒体流(即所述第二直播媒体流),相应地,所述代理客户端在接收到代理服务器发送的第一直播媒体流后,不仅将该第一直播媒体流发送给该第一客户端,还复制该第一直播媒体流,并将该复制的第一直播媒体流发送给第二客户端。可以理解地,如果直播间中还包括其他更多的客户端,则代理客户端复制多份第一直播媒体流,并将复制的第一直播媒体流发送给通过所述代理客户端进入所述直播间中的每个客户端。
需要说明的是,对于多个主用户的技术场景,第一客户端的角色具体可以为主要主用户,第二客户端可能为仆用户,也可能为备份主用户。在确定该第一客户端为主要主用户的情况下,无论第二客户端的角色为仆用户还是备份主用户,所述代理服务器均是仅将第一客户端请求获取的所述第一直播媒体流发送给代理客户端。
另外,如果所述代理服务器对应多个客户端,且采用上述“实施方式B”确定客户端的角色,则代理服务器还会对应的向其他代理客户端发送该第一直播媒体流,并由其他代理客户端将接收的第一直播媒体流复制分发给对应的客户端。
本实施例中,后续均以采用“实施方式A”确定客户端的角色为例进行描述。
本实施例提供的方法,对于仆用户角色的第二客户端,在请求获取直播媒体流时,代理客户端只需将缓存在本地的主用户角色的第一客户端请求的第一媒体流发送给该第二客户端,从而避免了代理服务器再向代理客户端发送直播媒体流,无需代理服务器为每个通过该代理客户端进入直播间的客户端发送直播媒体流,本方法减少了代理服务器与代理客户端之间发送媒体流的流量,有效地降低出口带宽,节约了资源开销。
此外,本实施例中还包括变更客户端角色的过程,具体地,对于单一主用户的技术场景,所述第一客户端是主用户,第二客户端是仆用户的情况下,方法还包括:代理服务器接收代理客户端发送的退出直播间请求消息,所述退出直播间请求消息用于请求所述第一客户端退出所述直播间;所述代理服务器在确定将所述第二客户端作为新的主用户时,将所述第二客户端的角色从所述仆用户变更为主用户(slave-to-master),并且所述代理服务器将向所述代理客户端发送的第一直播媒体流切换为所述第二直播媒体流,以使得所述代理客户端将所述第二直播媒体流发送给通过所述代理客户端进入所述直播间中的客户端(包括所述第二客户端)。
进一步地,所述代理服务器向代理客户端发送的第一直播媒体流的最后一帧与向第二客户端发送的所述第二直播媒体流的第一帧为相邻帧。
为了保证所述最后一帧与所述第一帧为相邻帧,在代理服务器将向第二客户端发送的第一直播媒体流切换为所述第二直播媒体流之前,还包括媒体流对齐的步骤。所述媒体流对齐步骤具体包括:代理服务器根据第一直播媒体流和第二直播媒体流识别分别属于所述第一直播媒体流和所述第二直播媒体流的第一I帧和第二I帧,所述第一I帧和所述第二I帧为相同视频帧;所述代理服务器根据所述第一I帧和所述第二I帧确定相邻的且分别属于所述第一直播媒体流和所述第二直播媒体流的第一切换帧和第二切换帧,并将所述第一切换帧和所述第二切换帧分别作为向所述第二客户端发送的所述第一直播媒体流的最后一帧与向所述第一客户端发送的所述第二直播媒体流的第一帧。
进一步地,代理服务器在确定第一切换帧和第二切换帧之后将来自所述第一客户端的退出直播间请求消息转发给所述媒体服务器。
同理地,对于多个主用户的技术场景,对应的客户端退出直播间的过程包括:在所述第一客户端是主要主用户,第二客户端是仆用户的情况下,第一客户端请求退出直播间,代理服务器接收来自所述第一客户端的退出直播间请求消息,所述代理服务器在确定将所述第二客户端作为新的备份主用户时,将所述第二客户端的角色从所述仆用户变更为备份主用户;所述代理服务器实时地接收所述媒体服务器发送的第二直播媒体流,并以GOP为单位缓存所述第二直播媒体流。本实施例对于备份主用户的客户端,代理服务器在获取该备份主用户的第二直播媒体流后,将其缓存在本地,以便当该备份主用户的角色变更为主要主用户时,能够直接使用该第二直播媒体流,提高媒体流的传输效率。
另外,可选的,在第一客户端是主要主用户,所述第二客户端是备份主用户的情况下,所述第一客户端退出直播间的流程包括:代理服务器接收来自第一客户端的退出直播间请求消息,所述代理服务器在确定将第二客户端作为新的主要主用户时,将所述第二客户端的角色从所述备份主用户变更为主要主用户(secondary-master to main-master),并将向代理客户端发送的第一直播媒体流切换为第二直播媒体流。
为了提升切换媒体流的效率,代理服务器在每次确认出新的角色为备份主用户的客户端后,缓存接收的该客户端的媒体流,并根据缓存的该客户端的媒体流和当前角色为主要主用户的客户端的媒体流进行对齐,即根据该角色为主要主用户的客户端的媒体流和缓存的该角色为备份主用户的客户端的媒体流识别分别属于这两路媒体流的相同的视频帧。如,接收来自第一客户端的退出直播间请求消息之前,以GOP为单位缓存接收的第二直播媒体流,并根据第一直播媒体流和第二直播媒体流识别分别属于所述第一直播媒体流和所述第二直播媒体流的第一I帧和第二I帧,所述第一I帧和所述第二I帧为相同视频帧。进而,在接收来自第一客户端的退出直播间请求消息后,代理服务器根据所述第一I帧和所述第二I帧确定相邻的且分别属于所述第一直播媒体流和所述第二直播媒体流的第一切换帧和第二切换帧;所述代理服务器根据所述第一切换帧和第二切换帧,将向所述第二客户端发送的第一直播媒体流切换为第二直播媒体流,其中,向第二客户端发送的所述第一直播媒体流的最后一帧为所述第一切换帧,向第一客户端发送的所述第二直播媒体流的第一帧为所述第二切换帧。
另外,本申请实施例还提供一种媒体流发送方法,该方法可应用于代理客户端。进一步地,如图4所示,方法包括:
步骤201:代理客户端分别接收第一客户端发送的用于请求进入直播间的第一直播间请求消息,和,第二客户端发送的用于请求进入所述直播间的第二直播间请求消息。
步骤202:代理客户端通过代理服务器向媒体服务器发送所述第一直播间请求消息和所述第二直播间请求消息。
其中,所述代理客户端还可以在向所述代理服务器转发该第一直播间请求消息之前,将所述代理客户端的标识添加到第一直播间请求中,并且,在向所述代理服务器转发该第二直播间请求消息之前,将所述代理客户端的标识添加到第二直播间请求中。可选的,所述代理客户端的标识为所述代理客户端的IP地址。
步骤203:代理客户端接收所述代理服务器发送的第一直播媒体流,所述第一直播媒体流是所述媒体服务器通过所述代理服务器向所述第一客户端发送的媒体流,所述第一客户端的角色为主用户,所述第二客户端的角色为仆用户。
步骤204:代理客户端将所述第一直播媒体流发送给所述第一客户端和第二客户端。
其中,代理客户端在发送所述第一直播媒体流之前还包括:以GOP为单位缓存所述第一直播媒体流、以及调整该第一直播媒体流的时间戳。
具体地,首先,在步骤201中,代理客户端接收该第一客户端的第一直播间请求消息,在步骤202中将该第一直播间请求消息转发给该代理服务器,由于该代理服务器将该第一客户端确定为主用户,代理客户端在步骤203中接收该第一客户端的直播媒体流(即第一直播媒体流),并在步骤204中将该第一直播媒体流发送给该第一客户端。
然后,在步骤201中,代理客户端接收该第二客户端的第二直播间请求消息,在步骤202中将该第二直播间请求消息转发给该代理服务器,由于该代理服务器将该第二客户端确定为仆用户,所以代理客户端并不会接收到该第二客户端的直播媒体流(即第二直播媒体流),而是直接执行步骤204将该第一直播媒体流复制发送给该第二客户端。在将该第一直播媒体流复制发送给该第二客户端时,该代理客户端还调整该第一直播媒体流的时间戳,使得发送给该第二客户端的第一直播媒体流满足:代理客户端向所述第二客户端发送的第一直播媒体流的第一帧的时间戳为0;且向所述第二客户端发送的第一直播媒体流的相邻帧的时间戳是连续的,所述“连续”是指第一直播视频流的相邻帧的时间间隔相同,为第一直播视频流的帧率f的倒数。
此外,所述方法还包括:在第一客户端退出直播间时,代理客户端转发第一客户端的退出直播间请求消息相关流程,具体包括:代理客户端接收来自第一客户端的退出直播间请求消息,将所述退出直播间请求消息发送给所述代理服务器;接收所述代理服务器根据所述退出直播间请求消息发送的退出直播间响应消息,以及,将所述退出直播间响应消息发送给所述第一客户端。
其中,还包括:代理客户端在接收到所述第一直播间请求消息的情况下,将所述第一客户端的角色标记为工作(working);在接收到所述第二直播间请求消息的情况下,将所述第二客户端的角色标记为工作;在接收到第一客户端发送的退出直播间请求消息的情况下,将所述第一客户端的角色标记为退出(exiting)。并且将所述第一客户端的角色标记更新到“直播间用户关系表”中。
此外,在第一客户端请求退出直播间的情况下,方法还包括:代理客户端接收所述代理服务器发送的第二直播媒体流,所述第二直播媒体流是媒体服务器通过所述代理客户端发送给第二客户端的媒体流,所述第二客户端是角色从仆用户变更为主用户的客户端;代理客户端将所述第二直播媒体流发送给所述第二客户端。
具体地,在所述代理客户端将所述第二直播媒体流发送给所述第二客户端之前,还包括:代理客户端调整所述第二直播媒体流的时间戳,使得调整后的时间戳满足:代理客户端向第二客户端发送的所述第二直播媒体流的第一帧的时间戳与向所述第二客户端发送的所述第一直播媒体流的最后一帧的时间戳连续。进一步地,代理客户端向第二客户端发送的所述第一直播媒体流的最后一帧与向所述第二客户端发送的所述第二直播媒体流的第一帧为相邻帧。
进一步地,所述代理客户端调整直播间中的客户端(如第二客户端)的直播媒体流的时间戳的过程包括:根据公式y=x+Δt,调整媒体流的时间戳,其中,y表示调整后的时间戳,x表示调整前的时间戳,Δt表示时间差。
如果该媒体流为该客户端进入直播间后接收的第一路直播媒体流,如在步骤204中,第一直播媒体流为第二客户端进入直播间后接收的第一路直播媒体流,代理服务器根据该公式调整媒体流的时间戳使得调整后的时间戳满足以下约束条件:
1、代理客户端向第二客户端发送的该直播媒体流的第一帧的时间戳为0;
2、代理客户端向第二客户端发送的该直播媒体流的相邻帧的时间戳是连续的,即发送的该直播媒体流的相邻帧的时间间隔相同,该时间间隔为该直播视频流的帧率为f的倒数。
由于该直播媒体流为第二客户端进入直播间后接收的第一路直播媒体流,因此,Δt为代理客户端向第二客户端发送的该直播媒体流的第一帧的调整前的时间戳的相反数。
例如,以一个主用户和多个仆用户角色的场景为例,假定代理客户端缓存的第一直播媒体流的GOP的时间长度为5秒(s),且本地缓存3个GOP,所述3个GOP的内容是实时更新的。第一客户端(简称客户端C1)是第一个进入直播间的客户端,则在第0秒客户端C1的角色为主用户,并且在直播间中持续观看第一直播媒体流到第60s时长,此时,代理客户端在本地缓存的视频媒体流的3个GOP分别是:第45s-50s、第50s-55s、第55s-60s的媒体内容,这3个GOP为媒体服务器通过代理服务器发送给客户端C1的媒体流片段,对应发送的每一帧的时间戳为客户端C1的相对时间。
第二客户端(简称客户端C2)在第60秒时进入直播间,角色为仆用户,代理客户端需要将发送给客户端C1的且本地缓存的最新的第一直播媒体流发送给客户端C2,此时距离60s最近的直播媒体流是第3个GOP片段,缓存第55s-60s的媒体内容,其中55s为所述媒体服务器发送的帧的时间戳,所以,需要调整的时间差为Δt=y-x=0-55=-55s,即代理客户端在将第一直播媒体流发送给客户端C2时需要将时间戳减少55s,以便满足上述的约束条件,使得每个进入直播间的客户端C2不用等待,即第0s时刻观看直播视频,达到直播间的客户端C1和客户端C2能“同时”观看视频的有益效果。
进一步地,还包括:当客户端C1请求退出直播间时,代理服务器需要将向客户端C2发送的第一直播媒体流切换为第二直播媒体流,此时客户端C2的角色变更为主用户,且所述第二直播媒体流是媒体服务器发送给客户端C2的媒体流。对应的,代理客户端接收媒体服务器发送的第二直播媒体流,并调整所述第二直播媒体流的时间戳。
例如,如果在视频播放的第120s时客户端C1退出直播间,代理服务器确定将客户端C2的角色变更为主用户,然后该代理服务器向代理客户端发送客户端C2的第二直播媒体流。该代理客户端接收并缓存该第二直播媒体流,假设在第120s时,代理客户端本地缓存的3个GOP的媒体内容分别是:第105s-110s、第110s-115s、第115s-120s,经过10s后代理客户端缓存最新的GOP1为第115s-120s的视频内容,该GOP1中帧上的时间戳为客户端C1的相对时间,当客户端C1退出直播间后,代理客户端本地缓存了GOP2和GOP3分别是第0-5s、第5s-10s的媒体内容,且这两个GOP中帧上的时间戳为客户端C2的相对时间,所以计算调整的时间差为Δt=120-55-0=65s,即代理客户端发送给新的主用户客户端C2的第二直播媒体流在帧的时间戳上需要增加65s。
综合上述,代理客户端调整时间戳时,可分为两种情况来计算时间差,具体地,
情况1:客户端未接收过媒体流,即当前媒体流是该客户端进入该直播间之后接收的第一路媒体流,则时间差为Δt=0-t2=-t2,其中t2表示代理客户端接收代理服务器发送的,且需要转发给客户端的媒体流的第一帧的时间戳。
情况2:客户端已经接收过媒体流,即代理客户端向该客户端发送的媒体流由前一主用户的媒体流切换为当前主用户的媒体流,则时间差为Δt=(t1+m)-t2,其中t2表示代理客户端在媒体流切换后向该客户端发送的媒体流(即当前主用户的媒体流)的第一帧修改前的时间戳,t1表示代理客户端在媒体流切换前向该客户端发送的媒体流(即前一主用户的媒体流)的最后一帧修改后的时间戳,对应的下一个视频帧的时间戳为t1+m,m=1/f,例如f=20fps,发送所述视频帧的时间间隔为m=1s/20=0.05s即50ms。
本实施例的方法,利用代理客户端和代理服务器在获取主用户的客户端请求的直播媒体流时,缓存部分媒体流片段在代理客户端本地,当由其他客户端进入直播间并请求直播媒体流时,代理客户端将缓存在本地的媒体流直接发送给这些客户端,从而避免了代理服务器再向代理客户端发送直播媒体流。本方法中代理服务器与代理客户端之间也只发送主用户客户端请求的一份直播媒体流,即只需耗费一份广域带宽来传输该直播媒体流,相比于媒体服务器通过代理服务器将直播媒体流发送给各个客户端所占用的传输资源而言减少了发送媒体流的流量,降低了WAN网链路的负载,节约了资源开销。
另外,代理客户端在将一份直播媒体流发送给直播间的所有客户端时还调整该直播媒体流的时间戳,比如当主用户角色的第一客户端退出直播间时,代理客户端将原来发送给第二客户端的第一直播媒体流切换为第二直播媒体流时,调整所述第二直播媒体流的时间戳,从而使得代理客户端在向第二客户端发送第二直播媒体流时无缝对接原来正在播放的第一直播媒体流的媒体内容,避免由于第一客户端的退出导致第二客户端观看的媒体内容出现视频卡顿或其他影响,所以本方法通过代理客户端调整时间戳还保证了用户观看体验。
下面对本申请实施例提供的方法进行详细地说明。
实施例一
本实施例提供了一种视频直播媒体流发送的方法,该方法可应用于图2所示视频直播系统中,该方法包括了代理服务器向通过同一代理客户端进入直播间的第一客户端和第二客户端提供直播媒体流,其中所述直播媒体流来源于内容源,并通过RDC中的媒体服务器转发。进一步地,如图5所示,该方法共包括39个步骤(step,S),从S1至S39。
其中,从S1至S18为第一客户端(以下简称“客户端C1”)进入直播间并获取直播媒体流的过程;从S19至S39为第二客户端(以下简称“客户端C2”)进入直播间并获取直播媒体流的过程。
具体地,对于客户端C1进入直播间并获取直播媒体流的过程包括:
S1:内容源向EDC中的媒体服务器发送第一直播媒体流。
S2:EDC中的媒体服务器接收第一直播媒体流,并将该第一媒体流发送给下一级RDC中的媒体服务器。其中,在发送第一直播媒体流之前还包括:EDC中Web服务器对下一级RDC中的媒体服务器进行鉴权的步骤,当且仅当鉴权结果合格后,RDC中的媒体服务器将第一直播媒体流发送给RDC中的媒体服务器。
可选的,S2还包括:代理服务器(proxy server)根据第一直播媒体流的业务特征识别被代理的客户端对应的传输协议;其中,所述业务特征包括Web服务器的IP地址和端口号,例如对于超文本传输协议(Hyper Text Transfer Protocol,HTTP)协议,可配置的业务特征包括:Web服务器的IP地址和端口号。进一步地,还可以确定HTTP协议所对应的传输协议为传输控制协议(Transmission Control Protocol,TCP),以便利用该TCP协议传输媒体流。
S3:客户端C1向RDC中的Web服务器发送可以访问的媒体服务器的请求消息。进一步地,所述请求消息中包括:客户端C1的用户名、IP地址、直播间名称、客户端C1通过鉴权后得到的密钥Token等信息,其中IP地址用于确定客户端C1的位置。具体地,客户端C1将所述请求消息发送给代理客户端,所述代理客户端接收到该请求消息后转发给代理服务器,然后代理服务器再将该请求消息转发至RDC中的Web服务器。
S4:RDC中的Web服务器接收所述请求消息,并向客户端C1发送可以访问的媒体服务器的响应消息,所述响应消息用于告知客户端C1其可以访问的媒体服务器。具体地,Web服务器根据所述请求消息确定能够为客户端C1提供媒体流服务的目标媒体服务器,所述目标媒体服务器为RDC中多个媒体服务器中的一个,然后将所述响应消息发送给客户端C1,所述响应消息中包括目标媒体服务器的相关信息,例如目标媒体服务器的统一资源定位符(Uniform Resource Locator,URL)信息、IP地址和端口号等。
具体地,RDC中的Web服务器将所述响应消息发送给代理服务器,所述代理服务器将该响应消息发送给代理客户端,所述代理客户端再转发给响应消息给客户端C1。
其中,Web服务器根据客户端C1发送的访问媒体服务器的请求消息中,携带的IP地址确定客户端C1的位置,并根据该位置信息选择与客户端C1距离较近的媒体服务器作为所述目标媒体服务器。
S5:所述响应消息中携带所述目标媒体服务器的相关信息,例如目标媒体服务器的URL信息、IP地址和端口号等,因此,代理服务器和代理客户端在转发所述响应消息时,得到客户端C1可以访问的媒体服务器的信息,即所述目标媒体服务器的相关信息。
S6:客户端C1向代理客户端发送用于请求进入直播间的第一直播间请求消息,所述第一直播间请求消息表示客户端C1请求进入直播间。其中,第一直播间请求消息中包括客户端C1的用户名、IP地址、端口号、直播间名称、通过鉴权后得到的Token等。
S7:代理客户端接收客户端C1发送的第一直播间请求消息,并设置客户端C1角色为工作(working)状态。同时建立“直播间用户关系表”,所述直播间用户关系表中添加一条关于客户端C1的记录,具体地,记录的内容包括:客户端C1的IP地址、端口号、用户状态、用户名、RDC中选择的目标媒体服务器的IP地址和端口号、直播间名称等信息。其中,客户端C1的用户状态为working。其中所述客户端C1的IP地址可以是数据库中存储的主键(primarykey)。
此外,还包括:代理客户端将自己的标识添加在所述第一直播间请求消息中,所述代理客户端的标识为代理客户端的IP地址或端口号等。
S8:代理客户端将添加有所述代理客户端标识的第一直播间请求消息发送给代理服务器,其中,修改后的所述第一直播间请求消息中包括:所述代理客户端的标识、客户端C1的用户名、直播间名称、通过鉴权后得到的Token等信息。
S9:代理服务器接收所述修改后的第一直播间请求消息,根据该第一直播间请求消息确定客户端C1的角色,并刷新所述直播间用户关系表。具体地,确定客户端C1的角色包括:判断在接收到所述第一直播间请求消息时,通过所述代理客户端进入到所述直播间的客户端中是否存在角色为主用户的客户端;如果存在,则确定所述客户端C1为仆用户;如果不存在,则确定客户端C1为主用户。本实施例中,由于客户端C1是第一个通过代理客户端进入直播间的用户,所以不存在主用户,因此代理服务器接收到该第一直播间请求消息时,确定客户端C1的角色为主用户,并标识所述客户端C1的角色为主用户。
另外,还包括:代理服务器在确定客户端C1的角色后,刷新“直播间用户关系表”,标记客户端C1的角色是主用户。可理解地,代理服务器可根据接收的通过同一代理客户端发送的直播间请求消息,随时更新“直播间用户关系表”,以便时刻记录直播间中各个客户端的角色状态。可选的,代理服务器在所述“直播间用户关系表”中还记录有代理客户端的标识(IP地址和端口号)。
本实施例中,设置直播间中主用户角色的客户端数量为1,即直播间中只有一个主用户,其余的客户端都是仆用户,在这种技术场景下可称为单一主用户场景。
S10:代理服务器发送所述第一直播间请求消息给RDC中的媒体服务器。其中,所述第一直播间请求消息中不包括所述代理客户端的标识。
其中,上述步骤S9和S10之间顺序可以互换,本实施例对此不严格限制。
S11:RDC中的媒体服务器接收所述第一直播间请求消息,并向客户端C1发送第一直播间响应消息。所述第一直播间响应消息用于通知客户端C1进入直播间成功。具体地,媒体服务器先将所述第一直播间响应消息通过代理服务器转发给代理客户端,然后代理客户端再将该第一直播间响应消息转发给客户端C1。
S12:客户端C1向代理客户端发送第一媒体请求消息,所述第一媒体请求消息用于向媒体服务器请求获取第一直播媒体流。可选的,所述第一媒体请求消息中携带的客户端C1的第一标识,所述第一标识用于唯一标识所述客户端C1,本实施例中,所述第一标识包括客户端C1的IP地址和用户名等。
具体地,代理客户端接收到该第一媒体请求消息之后,将其转发给代理服务器,代理服务器再将该第一媒体请求消息发送给RDC中的媒体服务器。
S13:媒体服务器接收到所述第一媒体请求消息之后,向客户端C1发送第一媒体响应消息。所述第一媒体响应消息用于通知客户端C1允许获得第一直播媒体流。具体地,媒体服务器将第一媒体响应消息发送给代理服务器,然后代理服务器转发该第一媒体响应消息给代理客户端,最后代理客户端再转发该第一媒体响应消息给客户端C1。
S14:媒体服务器向代理服务器发送第一直播媒体流。
S15:代理服务器实时地获取媒体服务器发送的第一直播媒体流,然后将该第一直播媒体流缓存在本地,具体地,代理服务器在本地以GOP为单位缓存该第一直播媒体流片段,比如缓存最新的3个GOP的媒体流片段,分别是:t1-t2,t2-t3,t3-t4。
S16:代理服务器将缓存的第一直播媒体流片段发送给代理客户端,以便由代理客户端将该第一直播媒体流发送给客户端C1。
S17:代理客户端接收所述代理服务器发送的第一直播媒体流,并以GOP为单位将该第一直播媒体流缓存在本地。其中,代理客户端只缓存若干个最新的第一直播媒体流片段。
S18:代理客户端将缓存的第一直播媒体流发送给客户端C1。
其中,代理客户端在向客户端C1发送第一直播媒体流的过程中,还需要调整所述第一直播媒体流的时间戳,使得调整后的时间戳满足:代理客户端向客户端C1发送的第一直播媒体流的第一帧的时间戳为0,并且,向客户端C1发送的所述第一直播媒体流的相邻帧的时间戳是连续的。所述“连续”是指客户端C1接收的第一直播媒体流的相邻视频帧的时间间隔相同,其中,所述时间间隔为帧率f的倒数。
下面介绍客户端C2进入直播间,并获取直播媒体流的方法。具体包括以下步骤:
S19:客户端C2向RDC中的Web服务器发送可以访问的媒体服务器请求消息,所述请求消息中包括客户端C2的用户名、IP地址、直播间名称、客户端C2通过鉴权后得到的密钥Token等信息。具体地,客户端C2通过代理客户端和代理服务器转发该请求消息给RDC中的Web服务器,且在转发的过程中,代理客户端和代理服务器均获取所述请求消息中携带的信息。
S20:RDC中的Web服务器接收所述请求消息,并向客户端C2发送响应消息,所述响应消息用于告知客户端C2其可以访问的媒体服务器。与前述步骤S4相同,Web服务器在多个媒体服务器中选择一个,用于为客户端C2提供媒体流服务,并将该选择的媒体服务器的相关信息,例如媒体服务器的URL信息、IP地址和端口号等通过所述响应消息发送给代理服务器和代理客户端。
S21:代理客户端和代理服务器在转发所述响应消息的过程中,获得所述请求消息中携带的信息,包括客户端C2可以访问的媒体服务器的信息。例如媒体服务器的IP地址、端口号等。
S22:客户端C2向代理客户端发送用于请求进入直播间的第二直播间请求消息,所述第二直播间请求消息表示客户端C2请求进入直播间。其中,第二直播间请求消息中包括客户端C2的用户名、IP地址、端口号、直播间名称、通过鉴权后得到的Token等。
S23:代理客户端接收客户端C2发送的第二直播间请求消息,并设置客户端C2角色为工作(working)状态。同时在“直播间用户关系表”中添加一条关于客户端C2的记录,具体地,记录的内容包括:客户端C2的IP地址、端口号、用户状态、用户名、RDC中选择的目标媒体服务器的IP地址和端口号、直播间名称等信息。其中,客户端C2的用户状态为working。其中所述客户端C2的IP地址可以是数据库中存储的主键。
此外,还包括:代理客户端将自己的标识添加在所述第二直播间请求消息中,所述代理客户端的标识为代理客户端的IP地址或端口号等。
S24:代理客户端将添加有所述代理客户端标识的第二直播间请求消息发送给代理服务器。其中,修改后的所述第二直播间请求消息中包括:所述代理客户端的标识、客户端C2的用户名、直播间名称、通过鉴权后得到的Token等信息。
S25:代理服务器接收代理客户端发送的所述修改的第二直播间请求消息,根据该第二直播间请求消息确定客户端C2的角色,并刷新所述直播间用户关系表。具体地,一种可能的实现方式是,代理服务器接收到该第二直播间请求消息后,判断当前所述直播间中是否存在通过所述代理客户端进入所述直播间的角色为主用户的客户端,如果存在,则确定所述客户端C2的角色为仆用户。本实施例中,当前直播间中已经存在客户端C1的角色为主用户的客户端,所以确定客户端C2的角色为仆用户。
另外,S25中还包括,代理服务器刷新“直播间用户关系表”,将客户端C2的角色标识为仆用户(slave)。另外,还包括:代理服务器将代理客户端的标识,比如代理客户端的IP地址和端口号添加在由于客户端C2的记录中。
S26:代理服务器发送所述第二直播间请求消息给RDC中的媒体服务器。其中,所述第二直播间请求消息中不包括所述代理客户端的标识。
S27:媒体服务器接收所述第二直播间请求消息,并向客户端C2发送第二直播间响应消息,所述第二直播间响应消息用于通知客户端C2进入直播间成功。具体地,媒体服务器将所述第二直播间响应消息通过代理服务器和代理客户端,然后代理客户端再将该第二直播间响应消息转发给客户端C2。
S28:客户端C2向代理客户端发送第二媒体请求消息,所述第二媒体请求消息用于向媒体服务器请求获取直播媒体流。可选的,所述第二媒体请求消息中携带的客户端C2的第二标识,所述第二标识用于唯一标识所述客户端C2,本实施例中,所述第二标识包括客户端C2的IP地址和用户名等。
具体地,代理客户端接收到该第二媒体请求消息之后,将其转发给代理服务器,代理服务器再将该第二媒体请求消息发送给RDC中的媒体服务器。
S29:媒体服务器接收到所述第二媒体请求消息之后,向客户端C2发送第二媒体响应消息,所述第二媒体响应消息用于通知客户端C2允许获得第一直播媒体流。具体地,媒体服务器将该第二媒体响应消息发送给代理服务器,然后代理服务器转发该第二媒体响应消息给代理客户端,最后代理客户端再转发该第二媒体响应消息给客户端C2。
S30:代理客户端将本地缓存的第一直播媒体流发送给客户端C2,进一步地,在发送所述第一直播媒体流时还调整第一直播媒体流的时间戳,使得调整后的时间戳满足:代理客户端向客户端C2发送的第一直播媒体流的第一帧的时间戳为0,并且,向客户端C2发送的所述第一直播媒体流的相邻帧的时间戳连续。
S31:所述媒体服务器向代理服务器发送第二直播媒体流,所述第二直播媒体流是发送给客户端C2的媒体流,所述客户端C2的角色是仆用户。
S32:代理服务器接收该第二直播媒体流后,不缓存且也不转发向客户端C2转发该第二直播媒体流,因为第二直播媒体流是发送给仆用户的客户端C2的媒体流。
S33:媒体服务器实时地向所述代理服务器发送第一直播媒体流。
S34:代理服务器接收到所述媒体服务器发送的第一直播媒体流,并以GOP为单位将所述第一直播媒体流的片段缓存在本地。本实施例中代理服务器在本地缓存3个GOP,还可以缓存更多或更少个数的GOP,本实施例对此不进行限制。
S35:代理服务器将所述第一直播媒体流发送给代理客户端。
S36:代理客户端接收所述第一直播媒体流,并以GOP为单位将该第一直播媒体流片段缓存在本地。
S37:代理客户端根据“直播间用户关系表”中记录的内容,确定直播间中主用户和仆用户的客户端数量,将缓存的第一直播媒体流片段进行复制,以便准备发送给直播间中的客户端。本实施例中当前直播间中只有两个客户端,客户端C1和客户端C2,其中客户端C1是主用户,客户端C2是仆用户,所以代理客户端将第一直播媒体流复制一份,以准备发送给客户端C2。
S38:代理客户端将本地缓存的第一直播媒体流发送给客户端C1。另外,还包括:代理客户端根据客户端C1接收到媒体流的视频帧的时间来调整第一直播媒体流中的时间戳。
S39:代理客户端将本地缓存的第一直播媒体流发送给客户端C2。另外,还包括:代理客户端根据客户端C2接收到媒体流的视频帧的时间来调整第一直播媒体流中的时间戳。
并且,代理客户端通过调整进入直播间用户观看视频帧的时间戳,使得直播间中的客户端C1和客户端C2能够“同步”地观看第一直播的媒体内容,提高用户体验。
本实施例的方法,利用代理客户端和代理服务器在获取主用户的第一客户端请求的直播媒体流时,缓存部分该直播媒体流片段在代理客户端本地,当第二客户端进入直播间并请求直播媒体流时,代理客户端将缓存在本地的直播媒体流直接发送给该第二客户端,从而避免了代理服务器再向代理客户端发送直播媒体流,本方法代理服务器只需要发送一份直播媒体流给代理客户端,即只需耗费一份广域带宽来传输直播媒体流,能够有效地减少了发送媒体流的流量,降低了WAN网链路的负载,节约了资源开销。
另外,本实施例的方法还可以将客户端C1的第一直播间请求消息与第一媒体请求消息合并成一个消息,且该合并后的消息具有所述第一直播间请求消息和第一媒体请求消息两部分功能,则代理服务器在确定客户端C1角色时,可以根据所述第一媒体请求消息的数量来统计当前进入直播间的主用户角色的客户端总数。同理地,客户端C2的第二直播间请求消息与第二媒体请求消息也可合并成一个消息,对应的确定客户端C2的角色的方法也相同,本实施例对此不再赘述。
此外,本实施例提供的方法还包括:当客户端C2的角色发生变化时,比如将仆用户角色变更为主用户,媒体服务器向客户端C2继续发送直播媒体流的过程。进一步地,如图6所示,包括S40至S53,具体的方法流程如下:
S40:客户端C1向代理客户端发送退出直播间请求消息,所述退出直播间请求消息用于请求客户端C1退出直播间。所述退出直播间请求消息中包括客户端C1的用户名、IP地址、端口号、用户角色、直播间名称等信息。
S41:代理客户端接收所述退出直播间请求消息后,标记客户端C1的角色为退出(Exiting)用户,并记录在“直播间用户关系表”中。
S42:代理客户端将所述退出直播间请求消息发送给代理服务器。
S43:代理服务器接收所述退出直播间请求消息,暂不转发该退出直播间请求消息给媒体服务器,因为,此时以客户端C1为主用户请求的第一直播媒体流正在被客户端C2观看。另外,标记客户端C1的角色为退出(Exiting)用户,并记录在“直播间用户关系表”中。
S44:代理服务器从直播间的客户端中选择一个作为新的主用户,本实施例中,通过所述代理客户端进入所述直播间的客户端只有客户端C1和C2,且当客户端C1请求退出直播间时,选择客户端C2作为新的主用户,并且将客户端C2的角色从仆用户变更为主用户,同时标记为slave-to-master用户。
S45:媒体服务器实时地向代理服务器发送第二直播媒体流。其中,所述第二直播媒体流与所述第一直播媒体流的内容相同,都是来自于内容源。
S46:代理服务器接收所述第二直播媒体流,并将该第二直播媒体流以GOP为单位缓存在本地。
另外,还包括:代理服务器利用对齐算法对齐所述第一直播媒体流和所述第二直播媒体流。具体地,过程包括:代理服务器每接收到第一直播媒体流的一个I帧,将该I帧与本地缓存的第二直播媒体流的I帧进行比较,并且,每接收到第二直播媒体流的一个I帧,将该I帧与本地缓存的第一直播媒体流的I帧进行比较,如果通过上述比较过程找到分别属于第一直播媒体流和第二直播媒体流且媒体内容相同的I帧(后续分别称为I帧a和I帧b),则确定这两个直播媒体流对齐。可以理解的是,I帧a和I帧b为相同视频帧。进而根据I帧a和I帧b确定切换点,即确定向代理客户端发送的第一直播媒体流的最后一帧(后续称为切换帧x)和向所述代理客户端发送的第二直播媒体流的第一帧(后续称为切换帧y),切换帧x与切换帧y为相邻帧。具体可以将第一直播媒体流中I帧a后的第n帧确定为切换帧x,并且将第二直播媒体流中I帧b后的第n+1帧确定为切换帧y,其中n为大于或等于0的整数。由于I帧a和I帧b为相同视频帧,I帧a后的第n帧和I帧b后的第n+1帧自然为相邻帧。
本实施例中,当主用户角色的客户端C1退出直播间时,利用新的主用户的客户端C2请求并获取第二直播媒体流,并对齐所述第一直播媒体流和第二直播媒体流的第I帧,使得代理服务器在向代理客户端发送第二直播媒体流时无缝对接原来正在播放的第一直播媒体流的媒体内容,避免了由于代理服务器切换直播媒体流时,对直播间的用户产生的视频内容出现重复播放或少播放的影响。
S47:代理服务器发送所述退出直播间请求消息给媒体服务器。
S48:媒体服务器接收到所述退出直播间请求消息后,向代理服务器发送退出直播间响应消息,所述退出直播间响应消息用于通知客户端C1退出成功。
S49:代理服务器从“直播间用户关系表”中删除客户端C1对应的记录。
其中,上述S48和S49之间无严格时序关系,可以互换。
S50:代理服务器接收所述媒体服务器发送的退出直播间响应消息,并转发该退出直播间响应消息给代理客户端。
S51:代理客户端接收所述代理服务器发送的所述退出直播间响应消息,并从“直播间用户关系表”中删除客户端C1对应的记录。
S52:代理客户端将所述退出直播间响应消息发送给客户端C1。
另外,还包括:代理服务器缓存的第二直播媒体流发送给代理客户端,代理客户端接所述第二直播媒体流后以GOP为单位缓存在本地,然后将缓存的第二直播媒体流片段发送给客户端C2,从而保证直播间中客户端C2正常观看直播媒体内容。并且,所述代理客户端在向客户端C2发送第二直播媒体流时,调整所述第二直播媒体流的时间戳,使得客户端C2接收的第二直播媒体流的第一帧的时间戳和第一直播媒体流的最后一帧的时间戳连续,对应的时间间隔为帧率参数f的倒数。具体的调整过程,可参见上述实施例的描述,此处不再赘述。
本实施例提供的方法,当主用户的客户端退出直播间时,代理服务器从直播间中选择新的客户端作为新的主用户,并将该新的主用户的直播媒体流对齐后发送给代理客户端。代理客户端接收代理服务器发送的新的主用户的直播媒体流后,调整该直播媒体流的时间戳,从而使得直播间中其他正在观看媒体内容的用户对媒体流的切换无感知,本方法保证了直播间中用户的观看体验。
实施例二
本实施例提供了另一种直播媒体流发送方法,该方法应用于多个主用户角色的技术场景,其中所述多个主用户是指直播间中设置的主用户角色的客户端的数量大于等于2,进一步地,包括一个主要主用户,可标识为main master用户,以及多个备份主用户,可标识为secondary master用户,另外还包括至少一个角色是仆(slave)用户。进一步地,本方法中通过同一代理客户端进入直播间的客户端在请求和获取直播媒体流的过程与前述实施例一近似,但不同之处包括:对于客户端角色的标识,以及当有主用户角色的客户端退出直播间时,对仍在直播间中的客户端的角色的标识和直播媒体流的复制分发。
具体地,本实施例中还包括第三客户端(以下简称“客户端C3”),且设置直播间中主用户角色的数量的预设上限为2,在这种情况下,每个客户端进入直播间并请求获取直播媒体流的过程:如图7所示,包括如下:
S1至S18,为客户端C1进入直播间并请求获取直播媒体流的过程。该过程与实施例一中的S1至S18相同,区别仅在于S9中刷新“直播间用户关系表”时,将客户端C1的角色标记设置为主要主用户(main-master)。其余的步骤可参见上述实施例一的描述,此处不再赘述。
其中,在代理服务器获取媒体服务器发送的第一直播媒体流时,以GOP为单位缓存3个第一直播媒体流片段在本地,并实时地将第一直播媒体流片段通过代理客户端发送给客户端C1。
S19至S39,为客户端C2进入直播间并请求获取直播媒体流的过程。具体地,包括:S19至S24,为客户端C2通过代理客户端进入直播间并向该代理客户端发送第二直播间请求消息的过程,该过程与实施例一的S19至S24相同,所以可参见上述实施例一的具体描述,此处不再赘述。
S25:代理服务器接收代理客户端发送的第二直播间请求消息后,根据该第二直播间请求消息确定客户端C2的角色。具体地,判断获取第二直播间请求消息时,通过代理客户端进入直播间的角色为主用户的客户端的数量是否达到预设上限,如果达到所述预设上限,则确定客户端C2为仆用户;如果未达到所述预设上限且主用户的客户端的数量不为0,则确定客户端C2为备份主用户。本实施例中,所述预设上限为2,代理服务器判断当前共获取两个直播间请求消息,分别是来自客户端C1的第一直播间请求消息和客户端C2的第二直播间请求消息,且客户端C1的角色是主要主用户,此时直播间中主用户的数量为1,未达到所述预设上限,所以代理服务器确定客户端C2的角色是备份主用户。
另外,还包括在所述“直播间用户关系表”中刷新关于客户端C2的记录,将客户端C2的角色标记为备份主用户。
还包括:S26至S39,为客户端C2获取代理客户端发送的第一直播媒体流的过程,以及代理客户端将所述第一直播媒体流发送给客户端C1的过程,该过程与实施例一中的S26至S39相同,所以本实施例对此不再详细赘述。
但是,在S32中,代理服务器从媒体服务器获取第二直播媒体流后,所述第二直播媒体流是发送给客户端C2的媒体流,所述客户端C2的角色是备份主用户,所述代理服务器将该第二直播媒体流以GOP为单位缓存在本地,并使用对齐算法对齐所述第一直播媒体流和所述第二直播媒体流。
具体地,代理服务器利用对齐算法对齐所述第一直播媒体流和第二直播媒体流的过程,包括:代理服务器每接收到第一直播媒体流的一个I帧,将该I帧与本地缓存的第二直播媒体流的I帧进行比较,并且,每接收到第二直播媒体流的一个I帧,将该I帧与本地缓存的第一直播媒体流的I帧进行比较,如果通过上述比较过程找到分别属于第一直播媒体流和第二直播媒体流且媒体内容相同的I帧(后续分别称为I帧a和I帧b),则确定这两个直播媒体流对齐。可以理解的是,I帧a和I帧b为相同视频帧。进而根据I帧a和I帧b确定切换点,即确定向客户端C2发送的第一直播媒体流的最后一帧(后续称为切换帧x)和向各客户端C2发送的第二直播媒体流的第一帧(后续称为切换帧y),切换帧x与切换帧y为相邻帧。具体可以将第一直播媒体流中I帧a后的第n帧确定为切换帧x,并且将第二直播媒体流中I帧b后的第n+1帧确定为切换帧y,其中n为大于或等于0的整数,由于所述I帧a和I帧b为相同视频帧,所以I帧a后的第n帧和I帧b后的第n+1帧自然为相邻帧。
本实施例中,对于备份主用户角色的第二客户端,代理服务器在获取媒体服务器发送的第二直播媒体流后,在代理服务器本地缓存该第二直播媒体流以备后续使用。
下面从步骤S40至S61为客户端C3进入直播间,请求并获取直播媒体流的过程,具体地包括:
S40:客户端C3向RDC中的Web服务器发送可以访问的媒体服务器的请求消息。进一步地,所述请求消息中包括:客户端C3的用户名、IP地址、直播间名称、客户端C3通过鉴权后得到的密钥Token等信息,其中IP地址用于确定客户端C3的位置。
S41:RDC中的Web服务器接收所述请求消息,并向客户端C3发送可以访问的媒体服务器的响应消息,所述响应消息用于告知客户端C3其可以访问的媒体服务器。具体地,RDC中的Web服务器将所述响应消息发送给代理服务器,所述代理服务器将该响应消息发送给代理客户端,所述代理客户端再转发给响应消息给客户端C3。
其中,Web服务器根据客户端C3发送的访问媒体服务器的请求消息中,携带的IP地址确定客户端C3的位置,并根据该位置信息选择与客户端C3距离较近的媒体服务器作为所述目标媒体服务器。
S42:所述响应消息中携带所述目标媒体服务器的相关信息,例如目标媒体服务器的URL信息、IP地址和端口号等,因此,代理服务器和代理客户端在转发所述响应消息时,得到客户端C3可以访问的媒体服务器的信息,即所述目标媒体服务器的相关信息。
S43:客户端C3向代理客户端发送用于请求进入直播间的第三直播间请求消息,所述第三直播间请求消息表示客户端C3请求进入直播间。其中,第三直播间请求消息中包括客户端C3的用户名、IP地址、端口号、直播间名称、通过鉴权后得到的Token等。
S44:代理客户端接收所述第三直播间请求消息,并设置客户端C3角色为工作(working)状态。同时更新“直播间用户关系表”,在直播间用户关系表中添加一条关于客户端C3的记录,具体地,记录的内容包括:客户端C3的IP地址、端口号、用户状态、用户名、RDC中选择的目标媒体服务器的IP地址和端口号、直播间名称等信息。其中,客户端C3的用户状态为working。此外,所述记录中还包括:代理客户端的标识,例如代理客户端的IP地址和端口号等。
此外,还包括:代理客户端将自己的标识添加在所述第三直播间请求消息中,所述代理客户端的标识为代理客户端的IP地址或端口号等。
S45:代理客户端将添加有所述代理客户端标识的第三直播间请求消息发送给代理服务器,其中,修改后的所述第三直播间请求消息中包括:所述代理客户端的标识、客户端C3的用户名、直播间名称、通过鉴权后得到的Token等。
S46:代理服务器接收所述修改后的第三直播间请求消息,根据该第三请求消息确定客户端C3的角色,并刷新所述直播间用户关系表。具体地,确定客户端C3的角色包括:判断在接收到所述第三直播间请求消息时,通过所述代理客户端进入到所述直播间的主用户的数量是否达到预设上限,如果达到,则确定客户端C3的角色是仆用户;如果未达到预设上限且所述主用户的数量不为0,则确定客户端C3的角色备份主用户。本实施例中,所述预设上限为2,客户端C3通过代理客户端进入直播间时,当前主用户的客户端数量为2,等于所述预设上限,所以确定客户端C3的角色是仆用户。
另外,还包括:代理服务器在确定客户端C3的角色后,刷新“直播间用户关系表”,标记客户端C3的角色是仆用户。
S47:代理服务器发送所述第三直播间请求消息给RDC中的媒体服务器。其中,所述第三直播间请求消息中不包括所述代理客户端的标识。
S48:RDC中的媒体服务器接收所述第三直播间请求消息,并发送第三直播间响应消息给客户端C3,所述第三直播间响应消息用于通知客户端C3进入直播间成功。具体地,所述媒体服务器先将所述第三直播间响应消息发送给代理服务器,然后代理服务器再将该第三直播间响应消息发送给代理客户端,最后该代理客户端将该第三直播间响应消息转发给客户端C3。
S49:客户端C3发送第三媒体请求消息,所述第三媒体请求消息用于向媒体服务器请求获取直播媒体流。可选的,所述第三媒体请求消息中携带的客户端C3的标识,所述标识用于唯一标识所述客户端C3,本实施例中,所述标识包括客户端C3的IP地址和用户名等。
S50:媒体服务器接收到所述第三媒体请求消息之后,向客户端C3发送第三媒体响应消息,所述第三媒体响应消息用于通知客户端C3允许获得直播媒体流。具体地,媒体服务器将所述第三媒体响应消息通过代理服务器和代理客户端转发给所述客户端C3。
S51:代理客户端将本地缓存的第一直播媒体流发送给客户端C3。其中,代理客户端在发送所述第一直播媒体流之前,还需要调整所述第一直播媒体流的时间戳,使得所述客户端C3接收到所述第一直播媒体流的第一帧的时间戳为0,并且,向客户端C3发送的所述第一直播媒体流的相邻帧的时间戳是连续的。
S52:媒体服务器向代理服务器发送第三直播媒体流,所述第三直播媒体流来源于内容源,且所述第三直播媒体流是发送给所述客户端C3的媒体流。
S53:代理服务器接收所述第三直播媒体流后,不缓存也不转发该第三直播媒体流,因为客户端C3的角色是仆用户。
S54:代理服务器实时地接收媒体服务器发送的第一直播媒体流。
S55:代理服务器将所述第一直播媒体流以GOP为单位缓存在本地。其中,代理服务器在本地只缓存若干个最新的GOP。
S56:代理服务器将缓存的第一直播媒体流发送给代理客户端。
S57:代理客户端将所述第一直播媒体流以GOP为单位缓存在本地。
S58:代理客户端根据直播间用户关系表对第一直播媒体流进行复制,本实施例中除了主要主用户的客户端C1之外,还有备份主用户客户端C2和仆用户客户端C3,所以复制两份第一直播媒体流。
S59:代理客户端将所述第一直播媒体流发送给客户端C1。另外,还包括:所述代理客户端根据客户端C1的播放时间来调整第一直播媒体流的时间戳。
S60:代理客户端将所述第一直播媒体流发送给客户端C2。另外,还包括:所述代理客户端根据客户端C2的播放时间来调整第一直播媒体流的时间戳。
S61:代理客户端将所述第一直播媒体流发送给客户端C3。另外,还包括:所述代理客户端根据客户端C3的播放时间来调整第一直播媒体流的时间戳。
具体地,S59至S61中代理客户端调整第一直播媒体流的时间戳的过程参见上述实施例的描述,此处不详细赘述。
此外,本实施例中还包括主要主用的客户端C1退出直播间流程,该过程与前世实施例一中客户端C1退出直播间的流程相似,具体地,如图8所示。
S62至S65与实施例一中的S40至S43相同。
S66:代理服务器选择备份主用户客户端C2作为新的主要主用户,并将客户端C2的角色从备份主用户变更为主要主用户,同时更新“直播间用户关系表”中关于客户端C2的记录。
S67至S73与实施例一中的S48至S53相同。
S74:媒体服务器向代理服务器发送第三直播媒体流,所述第三直播媒体流是发送给客户端C3的媒体流,且来源于内容源,此时所述客户端C3的角色从仆用户变更为备份主用户。
S75:代理服务器接收到所述第三直播媒体流之后,由于客户端C3的角色已经变更为备份主用户,所以以GOP为单位在本地缓存所述第三直播媒体流,并使用对齐算法对齐所述第二直播媒体流和所述第三直播媒体流。
在客户端C1退出直播间的流程中,代理服务器将向直播间中的客户端(如客户端C2)发送的第一直播媒体流切换为第二直播媒体流后,媒体服务器持续通过代理服务器向客户端C2发送第二直播媒体流,切换后,代理服务器将持续接收的该第二直播媒体流分发给代理客户端,详见后续步骤。
S76:媒体服务器实时地向代理服务器送第二直播媒体流,所述第二直播媒体流是发送给客户端C2的媒体流,且来源与内容源,此时所述客户端C2的角色从备份主用户变更为主要主用户。
S77:代理服务器接收到所述第二直播媒体流之后,以GOP为单位在本地缓存所述第二直播媒体流,并使用对齐算法对齐所述第一直播媒体流和所述第二直播媒体流。
S78:代理服务器将所述第二直播媒体流发送给代理客户端。
S79:代理客户端接收代理服务器发送的第二直播媒体流后,以GOP为单位在本地缓存所述第二直播媒体流。
S80:代理客户端根据“直播间用户关系表”复制和分发所述第二直播媒体流,本实施例中将第二直播媒体流复制一份,并准备发送给直播间中的角色为备份主用户的客户端C3。
S81:代理客户端将本地缓存的第二直播媒体流发送给客户端C2。另外,还包括:代理客户端根据客户端C2接收到媒体流的视频帧的时间来调整第二直播媒体流中的时间戳。
S82:代理客户端将本地缓存的第二直播媒体流发送给客户端C3。另外,还包括:代理客户端根据客户端C3接收到媒体流的视频帧的时间来调整第二直播媒体流中的时间戳。
本实施例提供的方法,当主要主用户的客户端C1退出直播间时,代理服务器将新的主要主用户的客户端C2的直播媒体流发送给代理客户端,再由代理客户端将该新的直播媒体流发送给客户端C2和C3,从而保证当直播间中主要主用户退出时,不影响直播间中的其他用户的观看体验。
本实施例中,代理服务器获取媒体服务器发送的多份直播媒体流,每份直播媒体流对应一个客户端的媒体请求消息,但是代理服务器在向代理客户端发送媒体流时,仅仅将角色为主要主用户的客户端对应的一份直播媒体流发送给代理客户端,对于获取的角色为备份主用户的直播媒体流则缓存在代理服务器本地,对于获取的仆用户的直播媒体流不缓存,直接丢弃,从而使得代理服务器只耗费一份带宽来传输直播媒体流给代理客户端,节约了代理服务器与代理客户端之间的WAN网资源。在代理客户端侧,代理客户端接收到代理服务器发送的直播媒体流后,复制和分发该直播媒体流给直播间中的所有客户端,并且在发送该直播媒体流之前调整每个客户端的时间戳,使得通过该代理客户端进入直播间的所有用户可以“同时”观看直播内容。
另外,本实施例提供的方法还包括客户端C2和客户端C1同时请求退出直播间,具体地,客户端C2请求退出直播间的过程与前述客户端C1退出直播间的方法过程相似。
具体地,首先,是客户端C1请求并退出直播间的过程,该过程与前述S62至S73相同(如图8所示),不详细赘述。其中,在客户端C1退出直播间时,客户端C2的角色从备份主用户变更为主要主用户,客户端C3的角色从仆用户变更为备份主用户。
在S73之后是客户端C2请求并退出直播间的过程,具体包括:客户端C2向代理客户端发送退出直播间请求消息,代理客户端接收后标记客户端C2的角色为退出用户,并转发该退出直播间请求消息给代理服务器,代理服务器接收后在“直播间用户关系表”中刷新客户端C2的角色为退出用户。此时客户端C3仍然在直播间中并获取直播媒体流,代理服务器接收媒体服务器发送的第三直播媒体流,所述第三直播媒体流是发送给客户端C3的媒体流。此时客户端C3的角色从备份主用户变更为主要主用户,所以代理服务器以GOP为单位在本地缓存所述第三直播媒体流。
由于直播间中客户端C3仍然在观看直播内容,所以代理服务器需要将直播媒体流切换到所述第三直播媒体流,并对齐所述第三直播媒体流和第一直播媒体流。所述代理服务器将所述第三直播媒体流发送给代理客户端,所述代理客户端接收到该第三直播媒体流之后,缓存并将该第三直播媒体流发送给客户端C3,并且在代理客户端发送所述第三直播媒体流时调整时间戳,使得发送给客户端C3的第三直播媒体流可以无缝地对接之前的媒体流,从而使得客户端C1和C2退出时对客户端C3无影响,从而保证了仍然在直播间的客户端C3观看媒体内容的流畅性。
另外还包括:在转发客户端C2的退出直播间响应消息时,代理服务器和代理客户端在“直播间用户关系表”中删除关于客户端C2的记录,以便实时更新直播间中客户端的信息。
需要说明的是,上述实施例一和实施例二,均是对以通过同一代理客户端进入到直播间中的所有客户端而言,代理服务器标识各个客户端的角色并分发直播媒体流。另外,还有一种情况是,由多个代理客户端接入同一个代理服务器,对于该代理服务器进入同一直播间的所有客户端而言,代理服务器为通过多个代理客户端进入所述直播间的所有客户端统一地标识用户角色,例如在三个代理客户端接入同一个代理服务器的情况下,对于直播间的所有客户端,统一地标识主用户和仆用户,并根据标识的角色情况,向代理客户端发送直播媒体流。进一步地,代理服务器标识用户角色并向每个代理客户端发送直播媒体流,以及每个代理客户端将该直播媒体流复制分发给其接入的所有客户端的过程与前述实施例一和实施例二的方法相同,此处不再赘述。
本申请实施例提供的视频直播双边代理技术,利用代理客户端和代理服务器,其中,代理服务器用于根据直播间请求消息标识各个客户端的角色,并仅发送一份角色为主用户的直播媒体流给代理客户端,代理客户端接收该主用户的直播媒体流后复制和分发给其接入的所有客户端,本方法有效地减少了代理服务器与代理客户端之间发送媒体流的流量,降低了出口带宽,节约了WAN网的资源开销。
另外,本方法不需要媒体服务器配置单独的鉴权给客户端,直接通过代理客户端统一转发,所以还进一步地降低运维成本。
下面介绍与本申请上述方法实施例所对应的装置和硬件设备实施例。
参见图9,为本申请一实施例提供的一种媒体流发送装置的结构示意图,该装置可以是上述实施例所述的代理服务器,或者还可以是代理客户端。
进一步地,该装置包括:接收单元901、处理单元902和发送单元903,此外还可以包括其它功能模块或单元,比如存储单元等。其中,所述装置可以为服务器,用于执行上述实施例所述的媒体流发送方法,例如为经过同一代理客户端进入直播间的至少两个客户端提供直播媒体流。
具体地,当所述装置作为代理服务器时,接收单元901用于分别接收来自同一代理客户端发送的用于请求进入直播间的第一直播间请求消息和第二直播间请求消息,其中所述第一直播间请求消息来自第一客户端,所述第二直播间请求消息来自第二客户端;所述接收单元901还用于分别接收媒体服务器通过代理服务器向所述第一客户端发送的第一直播媒体流和向所述第二客户端发送的第二直播媒体流;处理单元902用于根据所述第一直播间请求消息确定所述第一客户端的角色,并根据所述第二直播间请求消息确定所述第二客户端的角色;发送单元903用于在确定所述第一客户端的角色为主用户、所述第二客户端的角色为仆用户的情况下,仅将所述第一直播媒体流发送给所述第一客户端和所述第二客户端。
其中,所述第一直播间请求消息中包括代理客户端的标识,和,所述第二直播间请求消息中包括所述代理客户端的标识;处理单元902还用于根据所述第一直播间请求消息包括的所述代理客户端的标识,和,所述第二直播间请求消息包括的所述代理客户端的标识,确定所述第一直播间请求消息和所述第二直播间请求消息来自同一代理客户端。
可选的,在本实施例的一种具体的实现方式中,处理单元902具体用于确定在接收到所述第二直播间请求消息时,所述直播间中是否存在通过所述代理客户端进入所述直播间的角色为主用户的客户端;如果存在,则确定所述第二客户端的角色是仆用户。反之,如果所述直播间中不存在,则确定所述第二客户端的角色是主用户。
可选的,在本实施例的另一种具体的实现方式中,接收单元901还用于将所述第一直播媒体流发送给所述代理客户端之后,接收代理客户端发送的退出直播间请求消息,所述退出直播间请求消息用于请求所述第一客户端退出所述直播间;处理单元902还用于在确定将所述第二客户端作为新的主用户时,将所述第二客户端的角色从所述仆用户变更为主用户,以及将向所述第二客户端发送的第一直播媒体流切换为所述第二直播媒体流。
可选的,在本实施例的又一种具体的实现方式中,向所述第二客户端发送的所述第一直播媒体流的最后一帧与向所述第二客户端发送的所述第二直播媒体流的第一帧为相邻帧;所述处理单元902还用于根据所述第一直播媒体流和所述第二直播媒体流识别分别属于所述第一直播媒体流和所述第二直播媒体流的第一I帧和第二I帧,所述第一I帧和所述第二I帧为相同视频帧;根据所述第一I帧和所述第二I帧确定相邻的且分别属于所述第一直播媒体流和所述第二直播媒体流的第一切换帧和第二切换帧,并将所述第一切换帧和所述第二切换帧分别作为向所述第二客户端发送的所述第一直播媒体流的最后一帧与向所述第一客户端发送的所述第二直播媒体流的第一帧;发送单元903还用于在确定所述第一切换帧和所述第二切换帧之后,还用于将所述第一客户端的退出直播间请求消息转发给所述媒体服务器。
可选的,在本实施例的又一种具体的实现方式中,处理单元902具体用于在接收到所述第二直播间请求消息时,判断通过所述代理客户端进入所述直播间的角色为主用户的客户端的数量是否达到预设上限,所述预设上限大于等于2;如果达到所述预设上限,则确定所述第二客户端的角色是仆用户。
对应地。如果所述主用户的客户端的数量不为0,且没有达到所述预设上限,则处理单元902确定所述第二客户端的角色是备份主用户。
可选的,在本实施例的又一种具体的实现方式中,在所述第一客户端是主要主用户,所述第二客户端是仆用户的情况下,接收单元901还用于接收来自所述第一客户端的退出直播间请求消息;处理单元902还用于在确定将所述第二客户端作为新的备份主用户时,将所述第二客户端的角色从所述仆用户变更为备份主用户;存储单元用于以GOP为单位缓存接收的所述第二直播媒体流。
可选的,在本实施例的又一种具体的实现方式中,在所述第一客户端是主要主用户,所述第二客户端是备份主用户的情况下,所述存储单元还用于以GOP为单位缓存接收的所述第二直播媒体流;所述处理单元902还用于根据所述第一直播媒体流和缓存的所述第二直播媒体流识别分别属于所述第一直播媒体流和所述第二直播媒体流的第一I帧和第二I帧,所述第一I帧和所述第二I帧为相同视频帧。
可选的,在本实施例的又一种具体的实现方式中,接收单元901还用于接收来自所述第一客户端的退出直播间请求消息;处理单元902还用于在确定将所述第二客户端作为新的主要主用户时,以及,根据所述第一I帧和所述第二I帧确定相邻的且分别属于所述第一直播媒体流和所述第二直播媒体流的第一切换帧和第二切换帧;根据所述第一切换帧和所述第二切换帧将向所述第二客户端发送的第一直播媒体流切换为所述第二直播媒体流;其中,向所述第二客户端发送的所述第一直播媒体流的最后一帧为所述第一切换帧,向所述第一客户端发送的所述第二直播媒体流的第一帧为所述第二切换帧。
可选的,在本实施例的又一种具体的实现方式中,存储单元用于以GOP为单位缓存所述第一直播媒体流和所述第二直播媒体流。
另外,当所述装置作为代理客户端时,接收单元901用于分别接收第一客户端发送的第一直播间请求消息,和,第二客户端发送的第二直播间请求消息;发送单元903用于通过代理服务器向媒体服务器发送所述第一直播间请求消息和所述第二直播间请求消息;接收单元901还用于接收所述代理服务器发送的第一直播媒体流,所述第一直播媒体流是所述媒体服务器通过所述代理服务器向第一客户端发送的媒体流,所述第一客户端的角色为主用户,所述第二客户端的角色为仆用户;发送单元903还用于将所述第一直播媒体流发送给所述第一客户端和所述第二客户端。
进一步地,处理单元902用于在发送所述第一直播间请求消息之前,将代理客户端的标识添加到所述第一直播间请求消息中,和,在发送所述第二直播间请求消息之前,将所述代理客户端的标识添加到所述第二直播间请求消息中。
还包括:存储单元用于以GOP为单位缓存所述第一直播媒体流。
可选的,在本实施例的一种具体的实现方式中,处理单元902还用于在接收到所述第一直播间请求消息的情况下,将所述第一客户端的角色标记为工作;在接收到所述第二直播间请求消息的情况下,将所述第二客户端的角色标记为工作;在接收到所述退出直播间请求消息的情况下,将所述第一客户端的角色标记为退出。
可选的,在本实施例的一种具体的实现方式中,处理单元902还用于在将所述第一直播媒体流发送给所述第二客户端之前,调整所述第一直播媒体流的时间戳,使得调整后的时间戳满足:向所述第二客户端发送的所述第一直播媒体流的第一帧的时间戳为0,并且,向所述第二客户端发送的所述第一直播媒体流的相邻帧的时间戳连续。
可选的,在本实施例的一种具体的实现方式中,在所述第一客户端请求退出直播间的情况下,接收单元901还用于接收所述代理服务器发送的第二直播媒体流,所述第二直播媒体流是所述媒体服务器通过所述代理客户端发送给第二客户端的媒体流,所述第二客户端是角色从仆用户变更为主用户的客户端;发送单元903还用于将所述第二直播媒体流发送给所述第二客户端。
可选的,在本实施例的一种具体的实现方式中,所述处理单元902还用于将所述第二直播媒体流发送给所述第二客户端之前,调整所述第二直播媒体流的时间戳,使得调整后的时间戳满足:向所述第二客户端发送的所述第二直播媒体流的第一帧的时间戳与向所述第二客户端发送的所述第一直播媒体流的最后一帧的时间戳连续。
在具体的硬件实现中,如图10所示,本申请还提供了一种网络设备,该网络设备可以是前述方法实施例中的代理服务器,或者是代理客户端,或者还可以CDN系统里的其他设备或装置。
具体地,该网络设备包括:收发器10、处理器20和存储器30,该网络设备还可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置,本申请对此不进行限定。
其中,收发器10用于接收和发送请求消息、响应消息、直播媒体流等,并与网络中的其他设备(客户端、媒体服务器等)进行数据传输。进一步地,收发器10可以包括接收机1001、发射机1002与天线1003等部件,或者还可以包括收发模块,进一步地,所述收发模块可以包括无线局域网(wireless local area network,WLAN)模块、蓝牙模块、基带(baseband)模块等通信模块,以及所述通信模块对应的射频(radio frequency,RF)电路,用于进行无线局域网络通信、蓝牙通信、红外线通信及/或蜂窝式通信系统通信,例如宽带码分多重接入(wideband code division multiple access,WCDMA)及/或高速下行封包存取(high speed downlink packet access,HSDPA)。所述收发模块用于控制网络设备中的各组件的通信,并且可以支持直接内存存取(direct memory access)。
处理器20为网络设备的控制中心,利用各种接口和线路连接整个设备的各个部分,通过运行或执行存储在存储器30内的软件程序和/或单元,以及调用存储在存储器30内的数据,以执行网络设备的各种功能和各种功能和/或处理数据。
进一步地,处理器20可以由集成电路(Integrated Circuit,IC)组成,例如可以由单颗封装的IC所组成,也可以由连接多颗相同功能或不同功能的封装IC而组成。举例来说,处理器可以仅包括中央处理器(Central Processing Unit,CPU),也可以是GPU、数字信号处理器(Digital Signal Processor,DSP)、及收发器中的控制芯片(例如基带芯片)的组合。
存储器30可以包括易失性存储器(volatile memory),例如随机存取内存(RandomAccess Memory,RAM);还可以包括非易失性存储器(non-volatile memory),例如快闪存储器(flash memory),硬盘(Hard Sisk Drive,HDD)或固态硬盘(Solid-State Drive,SSD);存储器还可以包括上述种类的存储器的组合。所述存储器中可以存储有程序或代码,处理器802通过执行所述程序或代码可以实现所述通信设备的功能。
在本实施例中,当所述网络设备作为代理服务器时,前述图9所示装置实施例中的接收单元901和发送单元903的功能可以由收发器10来实现,或者由处理器20控制的收发器10实现;所述处理单元902所要实现的功能则可以由处理器20实现,所述存储单元的功能可以由存储器30实现。
当所述网络设备作为代理客户端时,前述图9所示装置实施例中的接收单元901和发送单元903的功能可以由收发器10来实现,或者由处理器20控制的收发器10实现;所述处理单元902所要实现的功能则可以由处理器20实现,所述存储单元的功能可以由存储器30实现。
另外,本申请实施例还提供一种媒体流发送系统。该系统包括上述实施例图9所示的媒体流发送装置或图10所示的网络设备,还包括多个客户端、RDC、EDC和内容源等设备,以用于实现上述各个实施例中的媒体流发送方法。
可选的,所述媒体流发送系统为视频直播系统,例如CDN系统。
此外,本申请还提供一种计算机存储介质,其中,该计算机存储介质可存储有程序,该程序执行时可包括本申请提供的内容发送方法、内容接收方法的各实施例中的部分或全部步骤。所述的存储介质可为磁碟、光盘、只读存储记忆体ROM或随机存储记忆体RAM等。
在上述实施例中,可以全部或部分通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。
所述计算机程序产品包括一个或多个计算机指令。在计算机加载和执行所述计算机程序时,全部或部分地产生按照本申请上述各个实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络或者其他可编程装置。
所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网络节点、计算机、服务器或数据中心通过有线或无线方式向另一个站点、计算机或服务器进行传输。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于一种媒体流发送装置的实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。基于这样的理解,本发明实施例中的技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例或者实施例的某些部分所述的方法。
本说明书中各个实施例之间相同相似的部分互相参见即可。尤其,对于一种同步载频信号发送装置、接收装置的实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例中的说明即可。
此外,在本申请的描述中,除非另有说明,“多个”是指两个或多于两个。另外,为了便于清楚描述本申请实施例的技术方案,在本申请的实施例中,采用了“第一”、“第二”等字样对功能和作用基本相同的相同项或相似项进行区分。本领域技术人员可以理解“第一”、“第二”等字样并不对数量和执行次序进行限定,并且“第一”、“第二”等字样也并不限定一定不同。
以上所述的本申请实施方式并不构成对本申请保护范围的限定。
Claims (37)
1.一种媒体流发送方法,其特征在于,所述方法为进入直播间的客户端提供直播媒体流,所述方法包括:
代理服务器分别接收同一代理客户端发送的用于请求进入直播间的第一直播间请求消息和第二直播间请求消息,其中所述第一直播间请求消息来自第一客户端,所述第二直播间请求消息来自第二客户端;
所述代理服务器分别接收媒体服务器通过所述代理服务器向所述第一客户端发送的第一直播媒体流和向所述第二客户端发送的第二直播媒体流;
所述代理服务器根据所述第一直播间请求消息确定所述第一客户端的角色,并根据所述第二直播间请求消息确定所述第二客户端的角色;
所述代理服务器在确定所述第一客户端的角色为主用户、所述第二客户端的角色为仆用户的情况下,仅将所述第一直播媒体流发送给所述代理客户端,以使所述代理客户端将所述第一直播媒体流发送给所述第一客户端和所述第二客户端。
2.根据权利要求1所述的方法,其特征在于,所述第一直播间请求消息中包括代理客户端的标识,和,所述第二直播间请求消息中包括所述代理客户端的标识;
所述方法还包括:所述代理服务器根据所述第一直播间请求消息包括的所述代理客户端的标识,和,所述第二直播间请求消息包括的所述代理客户端的标识,确定所述第一直播间请求消息和所述第二直播间请求消息来自同一代理客户端。
3.根据权利要求1或2所述的方法,其特征在于,所述代理服务器根据所述第二直播间请求消息确定所述第二客户端的角色,包括:
所述代理服务器确定在接收到所述第二直播间请求消息时,所述直播间中是否存在通过所述代理客户端进入所述直播间的角色为主用户的客户端;
如果存在,则确定所述第二客户端的角色是仆用户。
4.根据权利要求3所述的方法,其特征在于,所述代理服务器将所述第一直播媒体流发送给所述代理客户端之后,还包括:
所述代理服务器接收代理客户端发送的退出直播间请求消息,所述退出直播间请求消息用于请求所述第一客户端退出所述直播间;
所述代理服务器在确定将所述第二客户端作为新的主用户时,将所述第二客户端的角色从所述仆用户变更为主用户;
所述代理服务器将向所述第二客户端发送的第一直播媒体流切换为所述第二直播媒体流。
5.根据权利要求4所述的方法,其特征在于,所述代理服务器向所述第二客户端发送的所述第一直播媒体流的最后一帧与向所述第二客户端发送的所述第二直播媒体流的第一帧为相邻帧;
所述代理服务器将向所述第二客户端发送的第一直播媒体流切换为所述第二直播媒体流之前,还包括:
所述代理服务器根据所述第一直播媒体流和所述第二直播媒体流识别分别属于所述第一直播媒体流和所述第二直播媒体流的第一I帧和第二I帧,所述第一I帧和所述第二I帧为相同视频帧;
所述代理服务器根据所述第一I帧和所述第二I帧确定相邻的且分别属于所述第一直播媒体流和所述第二直播媒体流的第一切换帧和第二切换帧,并将所述第一切换帧和所述第二切换帧分别作为向所述第二客户端发送的所述第一直播媒体流的最后一帧与向所述第一客户端发送的所述第二直播媒体流的第一帧;
所述代理服务器在确定所述第一切换帧和所述第二切换帧之后还包括,所述代理服务器将来自所述第一客户端的退出直播间请求消息转发给所述媒体服务器。
6.根据权利要求1或2所述的方法,其特征在于,根据所述第二直播间请求消息确定第二客户端的角色,包括:
所述代理服务器在接收到所述第二直播间请求消息时,判断通过所述代理客户端进入所述直播间的角色为主用户的客户端的数量是否达到预设上限,所述预设上限大于等于2;
如果达到所述预设上限,则确定所述第二客户端的角色是仆用户。
7.根据权利要求6所述的方法,其特征在于,还包括:
如果所述直播间中角色为主用户的客户端的数量不为0,且没有达到所述预设上限,则确定所述第二客户端的角色是备份主用户。
8.根据权利要求6所述的方法,其特征在于,在所述第一客户端是主要主用户,所述第二客户端是仆用户的情况下,还包括:
所述代理服务器接收来自所述第一客户端的退出直播间请求消息;
所述代理服务器在确定将所述第二客户端作为新的备份主用户时,将所述第二客户端的角色从所述仆用户变更为备份主用户;
所述代理服务器以图像组GOP为单位缓存接收的所述第二直播媒体流。
9.根据权利要求7所述的方法,其特征在于,在所述第一客户端是主要主用户,所述第二客户端是备份主用户的情况下,还包括:
所述代理服务器以GOP为单位缓存接收的所述第二直播媒体流;
所述代理服务器根据所述第一直播媒体流和缓存的所述第二直播媒体流识别分别属于所述第一直播媒体流和所述第二直播媒体流的第一I帧和第二I帧,所述第一I帧和所述第二I帧为相同视频帧。
10.根据权利要求9所述的方法,其特征在于,还包括:
所述代理服务器接收来自所述第一客户端的退出直播间请求消息;
所述代理服务器在确定将所述第二客户端作为新的主要主用户时,将所述第二客户端的角色从所述备份主用户变更为主要主用户;
所述代理服务器根据所述第一I帧和所述第二I帧确定相邻的且分别属于所述第一直播媒体流和所述第二直播媒体流的第一切换帧和第二切换帧;
所述代理服务器根据所述第一切换帧和所述第二切换帧将向所述第二客户端发送的第一直播媒体流切换为所述第二直播媒体流,其中,所述代理服务器向所述第二客户端发送的所述第一直播媒体流的最后一帧为所述第一切换帧,向所述第一客户端发送的所述第二直播媒体流的第一帧为所述第二切换帧。
11.根据权利要求1或2所述的方法,其特征在于,还包括:
所述代理服务器以GOP为单位缓存所述第一直播媒体流。
12.一种媒体流发送方法,其特征在于,所述方法为进入直播间的客户端提供直播媒体流,所述方法包括:
代理客户端分别接收第一客户端发送的用于请求进入直播间的第一直播间请求消息,和,第二客户端发送的用于请求进入所述直播间的第二直播间请求消息;
所述代理客户端通过代理服务器向媒体服务器发送所述第一直播间请求消息和所述第二直播间请求消息;
所述代理客户端接收所述代理服务器发送的第一直播媒体流,所述第一直播媒体流是所述媒体服务器通过所述代理服务器向所述第一客户端发送的媒体流,所述第一客户端的角色为主用户,所述第二客户端的角色为仆用户;
所述代理客户端将所述第一直播媒体流发送给所述第一客户端和所述第二客户端。
13.根据权利要求12所述的方法,其特征在于,
所述代理客户端通过代理服务器向媒体服务器发送所述第一直播间请求消息之前还包括:所述代理客户端将所述代理客户端的标识添加到所述第一直播间请求消息中;
所述代理客户端通过代理服务器向媒体服务器发送所述第二直播间请求消息之前还包括:所述代理客户端将所述代理客户端的标识添加到所述第二直播间请求消息中。
14.根据权利要求12或13所述的方法,其特征在于,所述代理客户端接收所述代理服务器发送的第一直播媒体流之后,还包括:
所述代理客户端以图像组GOP为单位缓存所述第一直播媒体流。
15.根据权利要求12或13所述的方法,其特征在于,所述代理客户端将所述第一直播媒体流发送给所述第二客户端之前,还包括:
所述代理客户端调整所述第一直播媒体流的时间戳,使得调整后的时间戳满足:所述代理客户端向所述第二客户端发送的所述第一直播媒体流的第一帧的时间戳为0,并且,向所述第二客户端发送的所述第一直播媒体流的相邻帧的时间戳连续。
16.根据权利要求12或13所述的方法,其特征在于,在所述第一客户端请求退出直播间的情况下,还包括:
所述代理客户端接收所述代理服务器发送的第二直播媒体流,所述第二直播媒体流是所述媒体服务器通过所述代理客户端发送给第二客户端的媒体流,所述第二客户端是角色从仆用户变更为主用户的客户端;
所述代理客户端将所述第二直播媒体流发送给所述第二客户端。
17.根据权利要求16所述的方法,其特征在于,所述代理客户端将所述第二直播媒体流发送给所述第二客户端之前,还包括:
所述代理客户端调整所述第二直播媒体流的时间戳,使得调整后的时间戳满足:所述代理客户端向所述第二客户端发送的所述第二直播媒体流的第一帧的时间戳与向所述第二客户端发送的所述第一直播媒体流的最后一帧的时间戳连续。
18.一种媒体流发送装置,其特征在于,所述装置包括:
接收单元,用于分别接收来自同一代理客户端发送的用于请求进入直播间的第一直播间请求消息和第二直播间请求消息,其中所述第一直播间请求消息来自第一客户端,所述第二直播间请求消息来自第二客户端;
所述接收单元,还用于分别接收媒体服务器通过代理服务器向所述第一客户端发送的第一直播媒体流和向所述第二客户端发送的第二直播媒体流;
处理单元,用于根据所述第一直播间请求消息确定所述第一客户端的角色,并根据所述第二直播间请求消息确定所述第二客户端的角色;
发送单元,用于在确定所述第一客户端的角色为主用户、所述第二客户端的角色为仆用户的情况下,仅将所述第一直播媒体流发送给所述代理客户端,以使所述代理客户端将所述第一直播媒体流发送给所述第一客户端和所述第二客户端。
19.根据权利要求18所述的装置,其特征在于,所述第一直播间请求消息中包括代理客户端的标识,和,所述第二直播间请求消息中包括所述代理客户端的标识;
处理单元,还用于根据所述第一直播间请求消息包括的所述代理客户端的标识,和,所述第二直播间请求消息包括的所述代理客户端的标识,确定所述第一直播间请求消息和所述第二直播间请求消息来自同一代理客户端。
20.根据权利要求18或19所述的装置,其特征在于,
所述处理单元,具体用于确定在接收到所述第二直播间请求消息时,所述直播间中是否存在通过所述代理客户端进入所述直播间的角色为主用户的客户端;如果存在,则确定所述第二客户端的角色是仆用户。
21.根据权利要求20所述的装置,其特征在于,
所述接收单元,还用于将所述第一直播媒体流发送给所述代理客户端之后,接收代理客户端发送的退出直播间请求消息,所述退出直播间请求消息用于请求所述第一客户端退出所述直播间;
所述处理单元,还用于在确定将所述第二客户端作为新的主用户时,将所述第二客户端的角色从所述仆用户变更为主用户;以及将向所述第二客户端发送的第一直播媒体流切换为所述第二直播媒体流。
22.根据权利要求21所述的装置,其特征在于,向所述第二客户端发送的所述第一直播媒体流的最后一帧与向所述第二客户端发送的所述第二直播媒体流的第一帧为相邻帧;
所述处理单元,还用于根据所述第一直播媒体流和所述第二直播媒体流识别分别属于所述第一直播媒体流和所述第二直播媒体流的第一I帧和第二I帧,所述第一I帧和所述第二I帧为相同视频帧;根据所述第一I帧和所述第二I帧确定相邻的且分别属于所述第一直播媒体流和所述第二直播媒体流的第一切换帧和第二切换帧,并将所述第一切换帧和所述第二切换帧分别作为向所述第二客户端发送的所述第一直播媒体流的最后一帧与向所述第一客户端发送的所述第二直播媒体流的第一帧;
所述发送单元,还用于在确定所述第一切换帧和所述第二切换帧之后,将来自所述第一客户端的退出直播间请求消息转发给所述媒体服务器。
23.根据权利要求18或19所述的装置,其特征在于,
所述处理单元,具体用于在接收到所述第二直播间请求消息时,判断通过所述代理客户端进入所述直播间的角色为主用户的客户端的数量是否达到预设上限,所述预设上限大于等于2;如果达到所述预设上限,则确定所述第二客户端的角色是仆用户。
24.根据权利要求23所述的装置,其特征在于,
所述处理单元,还用于在所述直播间中角色为主用户的客户端的数量不为0,且没有达到所述预设上限的情况下,确定所述第二客户端的角色是备份主用户。
25.根据权利要求23所述的装置,其特征在于,还包括存储单元,在所述第一客户端是主要主用户,所述第二客户端是仆用户的情况下,
所述接收单元,还用于接收来自所述第一客户端的退出直播间请求消息;
所述处理单元,还用于在确定将所述第二客户端作为新的备份主用户时,将所述第二客户端的角色从所述仆用户变更为备份主用户;
所述存储单元,用于以图像组GOP为单位缓存接收的所述第二直播媒体流。
26.根据权利要求24所述的装置,其特征在于,还包括存储单元,在所述第一客户端是主要主用户,所述第二客户端是备份主用户的情况下,
所述存储单元,用于以GOP为单位缓存接收的所述第二直播媒体流;
所述处理单元,还用于根据所述第一直播媒体流和缓存的所述第二直播媒体流识别分别属于所述第一直播媒体流和所述第二直播媒体流的第一I帧和第二I帧,所述第一I帧和所述第二I帧为相同视频帧。
27.根据权利要求26所述的装置,其特征在于,
所述接收单元,还用于接收来自所述第一客户端的退出直播间请求消息;
所述处理单元,还用于在确定将所述第二客户端作为新的主要主用户时,将所述第二客户端的角色从所述备份主用户变更为主要主用户,以及,根据所述第一I帧和所述第二I帧确定相邻的且分别属于所述第一直播媒体流和所述第二直播媒体流的第一切换帧和第二切换帧;根据所述第一切换帧和所述第二切换帧将向所述第二客户端发送的第一直播媒体流切换为所述第二直播媒体流;
其中,向所述第二客户端发送的所述第一直播媒体流的最后一帧为所述第一切换帧,向所述第一客户端发送的所述第二直播媒体流的第一帧为所述第二切换帧。
28.根据权利要求18或19所述的装置,其特征在于,还包括:
存储单元,用于以GOP为单位缓存所述第一直播媒体流。
29.一种媒体流发送装置,其特征在于,所述装置包括:
接收单元,用于分别接收第一客户端发送的用于请求进入直播间的第一直播间请求消息,和,第二客户端发送的用于请求进入所述直播间的第二直播间请求消息;
发送单元,用于通过代理服务器向媒体服务器发送所述第一直播间请求消息和所述第二直播间请求消息;
所述接收单元,还用于接收所述代理服务器发送的第一直播媒体流,所述第一直播媒体流是所述媒体服务器通过所述代理服务器向所述第一客户端发送的媒体流,所述第一客户端的角色为主用户,所述第二客户端的角色为仆用户;
所述发送单元,还用于将所述第一直播媒体流发送给所述第一客户端和所述第二客户端。
30.根据权利要求29所述的装置,其特征在于,还包括处理单元,
所述处理单元,用于在发送所述第一直播间请求消息之前,将代理客户端的标识添加到所述第一直播间请求消息中,和,在发送所述第二直播间请求消息之前,将所述代理客户端的标识添加到所述第二直播间请求消息中。
31.根据权利要求29或30所述的装置,其特征在于,还包括存储单元,
所述存储单元,用于以图像组GOP为单位缓存所述第一直播媒体流。
32.根据权利要求29或30所述的装置,其特征在于,
处理单元,用于将所述第一直播媒体流发送给所述第二客户端之前,调整所述第一直播媒体流的时间戳,使得调整后的时间戳满足:向所述第二客户端发送的所述第一直播媒体流的第一帧的时间戳为0,并且,向所述第二客户端发送的所述第一直播媒体流的相邻帧的时间戳连续。
33.根据权利要求29或30所述的装置,其特征在于,在所述第一客户端请求退出直播间的情况下,
所述接收单元,还用于接收所述代理服务器发送的第二直播媒体流,所述第二直播媒体流是所述媒体服务器通过所述代理客户端发送给第二客户端的媒体流,所述第二客户端是角色从仆用户变更为主用户的客户端;
所述发送单元,还用于将所述第二直播媒体流发送给所述第二客户端。
34.根据权利要求33所述的装置,其特征在于,
处理单元,用于将所述第二直播媒体流发送给所述第二客户端之前,调整所述第二直播媒体流的时间戳,使得调整后的时间戳满足:向所述第二客户端发送的所述第二直播媒体流的第一帧的时间戳与向所述第二客户端发送的所述第一直播媒体流的最后一帧的时间戳连续。
35.一种媒体流发送系统,其特征在于,所述系统包括至少一个客户端、代理客户端、代理服务器和媒体服务器,其中每个所述客户端通过所述代理客户端接入直播间;
所述代理客户端用于执行如权利要求12至17任一项所述媒体流发送方法;
所述代理服务器用于执行如权利要求1至11任一项所述媒体流发送方法。
36.一种网络设备,包括处理器,所述处理器与存储器耦合,其特征在于,
所述存储器,用于存储指令;
所述处理器,用于执行所述存储器中的指令,使得所述网络设备执行如权利要求1至17中任一项所述的方法。
37.一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,其特征在于,
当所述指令被运行时,实现如权利要求1至17中任一项所述的方法。
Priority Applications (7)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201910330890.5A CN111835697B (zh) | 2019-04-23 | 2019-04-23 | 一种媒体流发送方法、装置、设备和系统 |
| EP20796076.6A EP3890265B1 (en) | 2019-04-23 | 2020-04-23 | Media stream sending method, apparatus, device and system |
| PCT/CN2020/086335 WO2020216277A1 (zh) | 2019-04-23 | 2020-04-23 | 一种媒体流发送方法、装置、设备和系统 |
| JP2021542510A JP7259056B2 (ja) | 2019-04-23 | 2020-04-23 | メディアストリーム送信方法、装置、システム、およびデバイス |
| KR1020217021677A KR102457526B1 (ko) | 2019-04-23 | 2020-04-23 | 미디어 스트림 송신 방법, 장치, 시스템, 및 디바이스 |
| US17/369,580 US11330028B2 (en) | 2019-04-23 | 2021-07-07 | Media stream sending method, apparatus, system, and device |
| US17/675,236 US11848973B2 (en) | 2019-04-23 | 2022-02-18 | Media stream sending method, apparatus, system and device |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| CN201910330890.5A CN111835697B (zh) | 2019-04-23 | 2019-04-23 | 一种媒体流发送方法、装置、设备和系统 |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| CN111835697A CN111835697A (zh) | 2020-10-27 |
| CN111835697B true CN111835697B (zh) | 2021-10-01 |
Family
ID=72912479
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| CN201910330890.5A Active CN111835697B (zh) | 2019-04-23 | 2019-04-23 | 一种媒体流发送方法、装置、设备和系统 |
Country Status (6)
| Country | Link |
|---|---|
| US (2) | US11330028B2 (zh) |
| EP (1) | EP3890265B1 (zh) |
| JP (1) | JP7259056B2 (zh) |
| KR (1) | KR102457526B1 (zh) |
| CN (1) | CN111835697B (zh) |
| WO (1) | WO2020216277A1 (zh) |
Families Citing this family (3)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN114760485B (zh) * | 2021-01-08 | 2023-09-26 | 深圳市酷看文化传播有限公司 | 视频轮播方法、系统及相关设备 |
| CN113535063A (zh) * | 2021-08-12 | 2021-10-22 | 腾讯音乐娱乐科技(深圳)有限公司 | 直播页面切换方法、视频页面切换方法、电子设备及存储介质 |
| US11824914B1 (en) * | 2022-11-15 | 2023-11-21 | Motorola Solutions, Inc. | System and method for streaming media to a public safety access point without incurring additional user costs |
Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN102780916A (zh) * | 2012-04-12 | 2012-11-14 | 天脉聚源(北京)传媒科技有限公司 | 一种视频直播流汇聚分发方法 |
| CN104168300A (zh) * | 2013-05-17 | 2014-11-26 | 中国电信股份有限公司 | 内容加速方法与系统 |
| CN105308932A (zh) * | 2013-06-17 | 2016-02-03 | 高通股份有限公司 | 通过一个或多个服务的中介内容分发 |
| CN107332894A (zh) * | 2017-06-23 | 2017-11-07 | 广州市百果园信息技术有限公司 | 直播方法、装置及系统、服务器、存储介质 |
| US10044827B1 (en) * | 2014-11-13 | 2018-08-07 | Amazon Technologies, Inc. | Trigger-based session service cache population |
| CN109639635A (zh) * | 2018-11-05 | 2019-04-16 | 北京达佳互联信息技术有限公司 | Cdn代理拉流方法、服务器、cdn及客户端 |
Family Cites Families (28)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JPH1063598A (ja) * | 1996-08-22 | 1998-03-06 | Nippon Telegr & Teleph Corp <Ntt> | マルチキャスト通信方法及びマルチキャスト通信システムと、マルチキャスト通信用サーバ |
| US7031348B1 (en) | 1998-04-04 | 2006-04-18 | Optibase, Ltd. | Apparatus and method of splicing digital video streams |
| US6966009B1 (en) * | 2001-08-28 | 2005-11-15 | Tellabs Operations, Inc. | System and method for aligning data in a network environment |
| US6842825B2 (en) * | 2002-08-07 | 2005-01-11 | International Business Machines Corporation | Adjusting timestamps to preserve update timing information for cached data objects |
| JP2006352648A (ja) | 2005-06-17 | 2006-12-28 | Nippon Telegr & Teleph Corp <Ntt> | カメラ映像配信方法およびシステム |
| CN100563235C (zh) * | 2006-01-09 | 2009-11-25 | 华为技术有限公司 | 互通功能网元、csi终端与ims终端互通系统及其方法 |
| JP2008193500A (ja) | 2007-02-06 | 2008-08-21 | Canon Inc | データ送信装置及びデータ中継装置 |
| JP5353277B2 (ja) * | 2009-02-06 | 2013-11-27 | 日本電気株式会社 | ストリーム信号伝送装置及び伝送方法 |
| US8516253B1 (en) * | 2010-01-18 | 2013-08-20 | Viasat, Inc. | Self-keyed protection of anticipatory content |
| JP2013058817A (ja) | 2011-09-06 | 2013-03-28 | Onkyo Corp | コンテンツ再生システム |
| US9949038B2 (en) * | 2013-08-09 | 2018-04-17 | Sonova Ag | Hearing assistance system and method |
| CN105763832B (zh) * | 2014-12-16 | 2018-11-02 | 中国移动通信集团公司 | 一种视频互动、控制方法及装置 |
| CN106302566B (zh) | 2015-05-12 | 2019-07-23 | 华为技术有限公司 | 直播媒体数据的方法、设备和系统 |
| CN106502554B (zh) * | 2015-09-08 | 2021-09-17 | 腾讯科技(深圳)有限公司 | 一种显示控制方法及装置 |
| CN105141971B (zh) * | 2015-09-16 | 2018-08-28 | 深圳市前海智媒网络科技有限公司 | 一种基于会话初始化协议实现直播的方法及系统 |
| US20170134825A1 (en) * | 2015-11-09 | 2017-05-11 | Le Holdings (Beijing) Co., Ltd. | Method and device for processing panoramic live broadcast video resources |
| CN105307010B (zh) * | 2015-11-14 | 2018-01-26 | 华中科技大学 | 一种云视频直播平台的视频上传系统及方法 |
| CN105959772B (zh) * | 2015-12-22 | 2019-04-23 | 合一网络技术(北京)有限公司 | 流媒体与字幕即时同步显示、匹配处理方法、装置及系统 |
| JP6394620B2 (ja) | 2016-02-04 | 2018-09-26 | 日本電気株式会社 | サーバ管理システム、サーバ、サーバ管理方法およびサービスプロセッサ |
| US20180012192A1 (en) * | 2016-07-08 | 2018-01-11 | Cisco Technology, Inc. | User experiences in personal meeting rooms |
| CN107343220B (zh) * | 2016-08-19 | 2019-12-31 | 北京市商汤科技开发有限公司 | 数据处理方法、装置和终端设备 |
| CN106507161B (zh) * | 2016-11-29 | 2019-11-15 | 腾讯科技(深圳)有限公司 | 视频直播方法及直播装置 |
| US10687093B2 (en) * | 2016-12-30 | 2020-06-16 | Social Media Broadcaster, Inc. | Social-media-based TV show production, distribution, and broadcast system |
| CN108989264B (zh) | 2017-05-31 | 2020-04-03 | 华为技术有限公司 | 一种直播方法、系统以及相关设备 |
| CN109005204B (zh) * | 2017-06-07 | 2021-08-20 | 腾讯科技(深圳)有限公司 | 一种直播处理方法、装置及系统 |
| US10638192B2 (en) * | 2017-06-19 | 2020-04-28 | Wangsu Science & Technology Co., Ltd. | Live streaming quick start method and system |
| CN107896337B (zh) * | 2017-11-30 | 2020-12-22 | 广州酷狗计算机科技有限公司 | 信息推广方法、装置及存储介质 |
| CN109547812A (zh) * | 2019-01-22 | 2019-03-29 | 广州虎牙信息科技有限公司 | 一种直播方法、装置、移动终端与存储介质 |
-
2019
- 2019-04-23 CN CN201910330890.5A patent/CN111835697B/zh active Active
-
2020
- 2020-04-23 WO PCT/CN2020/086335 patent/WO2020216277A1/zh not_active Ceased
- 2020-04-23 EP EP20796076.6A patent/EP3890265B1/en active Active
- 2020-04-23 KR KR1020217021677A patent/KR102457526B1/ko active Active
- 2020-04-23 JP JP2021542510A patent/JP7259056B2/ja active Active
-
2021
- 2021-07-07 US US17/369,580 patent/US11330028B2/en active Active
-
2022
- 2022-02-18 US US17/675,236 patent/US11848973B2/en active Active
Patent Citations (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| CN102780916A (zh) * | 2012-04-12 | 2012-11-14 | 天脉聚源(北京)传媒科技有限公司 | 一种视频直播流汇聚分发方法 |
| CN104168300A (zh) * | 2013-05-17 | 2014-11-26 | 中国电信股份有限公司 | 内容加速方法与系统 |
| CN105308932A (zh) * | 2013-06-17 | 2016-02-03 | 高通股份有限公司 | 通过一个或多个服务的中介内容分发 |
| US10044827B1 (en) * | 2014-11-13 | 2018-08-07 | Amazon Technologies, Inc. | Trigger-based session service cache population |
| CN107332894A (zh) * | 2017-06-23 | 2017-11-07 | 广州市百果园信息技术有限公司 | 直播方法、装置及系统、服务器、存储介质 |
| CN109639635A (zh) * | 2018-11-05 | 2019-04-16 | 北京达佳互联信息技术有限公司 | Cdn代理拉流方法、服务器、cdn及客户端 |
Also Published As
| Publication number | Publication date |
|---|---|
| KR102457526B1 (ko) | 2022-10-20 |
| US11330028B2 (en) | 2022-05-10 |
| EP3890265A1 (en) | 2021-10-06 |
| CN111835697A (zh) | 2020-10-27 |
| JP2022517854A (ja) | 2022-03-10 |
| US20220174104A1 (en) | 2022-06-02 |
| JP7259056B2 (ja) | 2023-04-17 |
| EP3890265B1 (en) | 2023-04-26 |
| EP3890265A4 (en) | 2022-04-20 |
| WO2020216277A1 (zh) | 2020-10-29 |
| US20210337001A1 (en) | 2021-10-28 |
| KR20210100176A (ko) | 2021-08-13 |
| US11848973B2 (en) | 2023-12-19 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| CN111836059B (zh) | 一种媒体流发送方法、装置和设备 | |
| US9769236B2 (en) | Combined broadcast and unicast delivery | |
| JP5905957B2 (ja) | 空間的にセグメント化されたコンテンツの配信 | |
| EP3047627B1 (en) | Dash representations adaptations in network | |
| CN111835697B (zh) | 一种媒体流发送方法、装置、设备和系统 | |
| CN107079013B (zh) | 管理媒体流的并发流式传输 | |
| CN104093088A (zh) | 实现自适应流媒体播放控制的系统及方法 | |
| US20220295127A1 (en) | Consolidating content streams to conserve bandwidth | |
| CN111372103B (zh) | 一种组播方法、装置、设备和计算机存储介质 | |
| KR101452269B1 (ko) | 콘텐트 가상 세그멘테이션 방법과, 이를 이용한 스트리밍 서비스 제공 방법 및 시스템 | |
| WO2011136703A1 (en) | Method and arrangement for playing out a media object | |
| KR101780247B1 (ko) | 동적 적응 버퍼링 기반의 ott 데이터 처리 방법 | |
| KR101565137B1 (ko) | 무선 스트리밍 서비스 제공 방법 및 장치 | |
| HK40097773A (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 | ||
| GR01 | Patent grant | ||
| GR01 | Patent grant |