现在直播非常火爆,可以从PC或手机直播,然后从PC或是手机或是支持HTML5的浏览器收看。但是,你知道直播平台后面的技术和实现原理码?
正好去年过年的时候,一个朋友破解了AirPlay和Chromecast协议,然后开发了一套技术能够截获和播放任何手机(iOS或是Android)屏幕上的任何内容。想到的第一个应用是做一个直播的直播服务(如有感兴趣的投资人,可以联系)。比如,通过屏幕直播,你可以邀请朋友看你正在看的直播的电影,球赛,演唱会,晚会,不管是免费的还是付费的。当初的想法是将屏幕的内容,通过AirPlay或Chromecast,推送到后台服务器,然后,受邀的朋友就可以从浏览器或是其它视频播放器观看了。为此,我们搭建和开发了一个直播平台,现在把我们实现的过程记录下来和大家共享。
首先,视频有它的播放协议。原则上,RTSP,RTMP,HTTP都可以做直播和点播,但一般做直播用RTSP和RTMP,做点播用HTTP。我们选用的是RTMP协议。
RTMP协议
RTMP(RealTimeMessageProtocol/实时信息传输协议)是应用层协议,靠底层传输层协议(通常是TCP)来保证信息传输的可靠性的。在TCP链接建立后,RTMP协议也要客户端和服务器通过“握手”来建立RTMPConnection,然后在Connection上传输控制信息。RTMP协议传输时会对数据格式化,而实际传输的时候为了更好地实现多路复用、分包和信息的公平性,发送端会把Message划分为带有MessageID的Chunk,每个Chunk可能是一个单独的Message,也可能是Message的一部分,在接受端会根据Chunk中包含的data的长度,messageid和message的长度把chunk还原成完整的Message,从而实现信息的收发。
我们看看两个常用的视频服务。一个是由客户端向服务器发起请求推流到服务器,这个就是直播的播放服务,流程如下。
另一个是由客户端向服务器发起请求从服务器端接受数据,可以多次调用,这就是播放服务。流程如下。
RTMP是直播后面的协议,有很多的开源软件实现了,细节我们不再细说。下面,我们看看怎么搭建后台服务系统。
安装和配置LEMP
LEMP栈是指Linux(L),NGINX(E),MySQL(M),PHP(P),还记得LAMP吗?LEMP既是将NGINX(E)取代了Apache(A)。
首先,用以下命令安装和启动NGINXwebserver。
#sudoapt-getupdate#sudoapt-getinstallnginx#sudoservicenginxstart
接着,安装MySQL。
#sudoapt-getinstallmysql-servermysqlphp5-mysql
接着,安装和配置PHP。
#sudoapt-getinstallphp5-fpm
location~.php${try_files$uri=;fastcgi_passunix:/var/run/php5-fpm.sock;fastcgi_indexindex.php;fastcgi_paramSCRIPT_FILENAME$document_root$fastcgi_script_name;includefastcgi_params;}
最后,重新启动NGINXwebserver。
#sudoservicenginxrestart
这样,后台的webserver设置好了,可以对外提供网页和PHP服务了。但是,NGINX并不支持RTMP协议,我们需要下载,编译,安装和配置RTMP模块。
安装和配置nginx-rtmp-module
首先,下载NGINX的源代码,确保环境下能正确的编译。
#gitclone