前言
现在的直播平台琳琅满目:一直播、虎牙TV、斗鱼TV、熊猫TV等等。看着这么多直播平台,作为一个程序员难道不想知道这东西是怎么运行的吗?或者自己做一个出来?跟女朋友炫耀也好啊~所以最近在做一个基于七牛云直播平台的直播APP,坑其实也挺多的,我希望通过我的博文,可以尽可能减少掉入坑的几率。
名词解释
推流
推流就是将摄像头采集到的素材通过RTMP协议将数据包发送至服务器的过程。
拉流
拉流就是根据指定的URL通过RTMP协议从服务器端获取到素材的过程。
RTMP
RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。
整体流程
当推流端发起推流请求之前,需要先向业务服务器发起流请求,业务服务器再向七牛云直播服务平台请求创建流,当流创建完成之后,七牛云会返回流信息给业务服务器,业务服务器根据流信息进行url拼接,再把URL返回给推流端,推流端根据相应的推流url进行推流,把采集到的数据推给七牛直播平台。七牛直播平台会把素材进行TS切片,并进行数据的持久化处理,保存在七牛的存储空间里。播放端点击一个直播间之后,首先向业务服务器发出请求播放url的请求,业务服务器与七牛云直播平台交互(这一步也可以在推流创建流的时候存到数据库中)获取到流信息,拼接URL,返回url,播放端根据url获取到素材并渲染出来。
直播框架图.png
功能
业务服务器
业务服务器主要是推流端和拉流端获取流信息的服务器,推流前需要通过业务服务器与七牛直播服务进行交互,返回流信息,业务服务器根据流信息拼接Url,形成对应关系,保存在本地数据库中;而拉流客户端也需要像业务服务器请求播放url。业务服务器只起到与七牛云直播服务交互的作用,真正的直播分流、切片、存储等功能还是在七牛云直播空间实现的。
推流端
推流端就是负责素材的采集,再通过RTMP协议发送到服务器。在采集端我们可以做些什么?
- 滤镜处理
- 手动、自动对焦
- 美颜
- 数码变焦
- 水印
这些功能我们通过七牛提供的PLDroidMediaStreaming 就可以轻松实现,当然我们可以定制一些服务,比如评论弹幕、送礼物这些。
播放端
播放端就是负责从服务器获取到素材渲染出来。那么在播放端我们可以做些什么呢?
- 画面旋转
- 画面预览
- 秒开直播
- 手势操作
这些功能我们也可以通过七牛提供的PLDroidPlayer轻松实现,同时我们可以定制服务,比如评论、送礼物等。
后记
当流程与功能大概梳理清楚了,我们可以进行编码操作了,下节将讲解如何快速创建一个直播空间以及快速搭建一个业务服务器。
PS:初次接触直播,如果东西解释得不清楚或者说错了,欢迎指正!!
网友评论