一场直播的直播服务 比如,通过屏幕直播,你可以邀请朋友看你正在看的直播的电影,球赛,演唱会,晚会,不管是免费的还是付费的。当初是将屏幕的内容,通过AirPlay或Chromecast,推送到后台服务器,然后,受邀的朋友就可以从浏览器或是其它视频播放器观看了。因此,我们搭建和开发了一个直播平台,现在把我们实现的过程记录下来和大家共享。
首先,视频有它的播放协议。原则上,RTSP,RTMP,HTTP都可以做直播和点播,但一般做直播用RTSP和RTMP,做点播用HTTP。我们选用的是RTMP协议。RTMP(Real Time Message Protocol/实时信息传输协议)是应用层协议,靠底层传输层协议(通常是TCP)来保证信息传输的可靠性的。在TCP链接建立后,RTMP协议也要客户端和服务器通过“握手”来建立RTMP Connection,然后在Connection上传输控制信息。RTMP协议传输时会对数据格式化,而实际传输的时候为了更好地实现多路复用、分包和信息的公平性,发送端会把Message划分为带有Message ID的Chunk,每个Chunk可能是一个单独的Message,也可能是Message的一部分,在接受端会根据Chunk中包含的data的长度,message id和message的长度把chunk还原成完整的Message,从而实现信息的收发。我们看看两个常用的视频服务。一个是由客户端向服务器发起请求推流到服务器,这个就是直播的播放服务.另一个是由客户端向服务器发起请求从服务器端接受数据,可以多次调用,这就是播放服务。
RTMP是直播后面的协议,有很多的开源软件实现了,细节我们不再细说。下面,我们看看怎么搭建后台服务系统。直播客户端(后面我们要介绍的OBS)将实时视频推送到NGINX的RTMP模块。RTMP模块会根据配置将视频流转换成HLS文件。这时,HLS文件可以使用两种模式播放。一是点播VOD模式,下载当前时间点可以获取到所有index文件和ts文件,并播放。这种模式允许客户端访问全部内容,不一定是实时内容。二是Live 模式,实时生成m3u8和ts文件。它的索引文件一直处于动态变化的,播放的时候需要不断下载index文件,以获得最新生成的ts文件播放视频。一般来说,实况直播时,会有一些延时。下面,来看一个JS实现的HLS player,嵌入到支持HTML5的浏览器就可以播放HLS文件。
基于上面描述的技术和开源系统,我们用PHP实现了一个简单的支持多用户的直播平台。用户可以注册,登录,follow/unfollow,评论,标签,收看,直播(每个用户有自己的直播密钥),等等。直播的精髓都应该讨论到了,如果将系统sharding,分层,SOA化,负载均衡,cache,就可以搭建出一个可扩展的大规模的直播平台。
为了让更多的直播人拥有属于自己的直播平台和为每一位直播人打造一个直播梦想作为理念,现在的直播软件源码有了更多有趣新颖的功能:游戏直播间、一对一直播、短视频、私密直播间、夺宝游戏等等,支持各种二次开发等等。如果您需要进军直播市场的直播平台,建议找我们专业的直播APP源码服务商为您搭建!