如何快速搭建一个直播平台?
缘由
首先呢,我是一个程序员,本篇文章简述如何快速使用现有的开源工具搭建一个直播平台,大概花了一天时间研究,现在要搭建也就是几分钟的事。
本来呢,是想要研究如何搭建一个视频流媒体服务器,为了使用手机或者电脑在任何地方都能看存在家里服务器上的电影、MV什么(~~小电影?~~你说啥?)的,并支持边下边播的功能,结果,研究的一半跑偏了,最后搭建了一个直播平台,但同时也学习了不少东西。我会写另外一篇继续完成我的目标。
原材料
硬件:Linux服务器
软件:Docker、Nginx、FFmpeg、nginx-rtmp-module、OBS Studio、VLC播放器
协议:RTMP/RTSP
你需要懂
- Docker的基本使用
- Nginx的配置使用
- 域名解析
开始操刀
服务器搭建
这里呢可以在阿里云上或者腾讯云上买,我呢是直接买了一个小服务器在家里(配上2800M路由器+7类网线不要太爽)。然后安装Docker(安装教程有很多,百度就可以,而且现在很多云服务可以直接购买带Docker的服务器),一定要用Linux的,我个人习惯用Ubuntu。
还有OBS Studio(直播软件)和VLC(流媒体播放器)这两个软件直接下载安装啊即可,官网连接已经附上。
快速搭建
经过资料查证,不得不说Nginx和FFmpeg是真的牛皮。这里我们要用到的是Nginx+nginx-rtmp-module模块实现一个流媒体服务器,但需要去编译,这个就比较头疼了。好在我突然想到另外一个牛皮的软件,Docker,在DockerHub里有成千上百的好东西,我找到了个这个哥们(真的是帮大忙了)的镜像tiangolo/nginx-rtmp简直完美,在看过他的DockerFile后,他已经将模块nginx-rtmp-module整合到Nginx中并且编译安装好了,并且配置了一个模板nginx.conf
(这个需要去GitHub上去寻找),你只需要把他的这个镜像拉倒你的服务器上。
代码我给你放这儿了:
docker pull tiangolo/nginx-rtmp
// 一下代码选一个执行
// 运行,一般有这个就够用了
docker run -d -p 1935:1935 --name nginx-rtmp tiangolo/nginx-rtmp
// 替换原有的配置文件,需要创建/var/nginx.conf,如果还需要配置其他的话,只需要重启容器就可以了
docker run -d -p 1935:1935 -v /var/nginx.conf:/etc/nginx/nginx.conf --name nginx-rtmp tiangolo/nginx-rtmp
或者牛皮的话,直接写一个新的DockerFile,按照你的需要求任意定制,GitHub上已经给出示范:
FROM tiangolo/nginx-rtmp
COPY nginx.conf /etc/nginx/nginx.conf
Nginx.conf示范:
worker_processes auto;
rtmp_auto_push on;
events {}
rtmp {
server {
listen 1935;
listen [::]:1935 ipv6only=on;
application live {
live on;
record off;
}
}
}
这个时候,服务器就搭建好了,是不是So easy。
访问
访问格式为:rtmp://<ip_of_host>/live/<key>
这里假设你的主机地址为:rtmp.local.com
那么你的访问地址为:rtmp://rtmp.local.com:1935/live/<key>
不要问为啥,先记住这个地址。
开启直播!
关于如何推流,那是另外的一种技术了,这里不做展开,有机会的话在研究。这里直接使用工具。
- 打开OBS Studio
- 设置
- 选择流部分
- 流类型选择:自定义流服务器
- url中输入
rtmp://rtmp.local.com:1935/live
,在秘钥中随意写一个单词,例如test
,那么你在访问时就应该访问:rtmp://rtmp.local.com:1935/live/test
。 - 回到主界面,选择一个视频源,捕获屏幕。
- 点击开始推流。
- 你就开始直播了!
用了这个软件,你就知道直播哪些切换场景什么的怎么做的的,会给你打开新世界的大门。
观看直播!
开了直播得看不是,这里也用软件VLC。
- 单击“媒体”菜单
- 点击“打开网络流”
- 输入上面的URL:
rtmp://rtmp.local.com:1935/live/test
- 点击“播放”
- 等一等
- 现在VLC应该开始播放从OBS Studio传输的任何内容
到这里,你就完美的开始直播了!
拓展
这是一个基本的实现,对于流量太大的问题,关于负载均衡和集群,参考Nginx配置,这个暂且不谈(网络上将负均衡的太多了)。
关于推流和播放的问题,通过FFmpeg都可以实现,但怎么实现,我觉得又可以写两篇文章,推流目前还没有研究,但关于播放,网上有太多的Demo,包括Android的几个视频框架都自带支持流媒体播放,所以直接永久好了。
关于做视频站的问题,这个我会再写一篇,这个也是用刀FFmpeg,但是是使用nginx-rtmp-module的配置实现服务器本地推流,或者使用其他服务器推流的方式。这个再说。
最后
如果你要是想开直播、当网红,你还是去第三方平台吧,这里只负责搭建,至于怎么运营是另外一门学问。这里仅共内部使用,玩耍,如果要搭建直播平台也可以,但还要配合其他技术。这里基于Docker和Nginx,灵活性很强,你可以任意配置。