在前天(2019.4.15)看见了爱慕爱慕大佬整的直播,就自己也试着整了一个,然后我按照爱慕大佬给的教程,emmmm都整不出来,QAQ~~~~然后就自己瞎整了一天给整了出来,废话不多说,教程如下:
运行环境&所需软件
- 一台干净的服务器(当然,也可以在自己原来的服务器上面整,我这样只是为了好讲解)
- CentOS7.5(为什么不推荐6.5或者其他呢?因为他们好像什么都没有,比如yun、wget和tar都没有,都需要自己安装,太麻烦了)
- Nginx1.8.1(用其他的也行)
- nginx-rtmp-module(这玩意是必需品)
- openssl(这个没有安装Nginx的时候好像会报错)
- OBS(全名Open Broadcaster Software,是一款大多数主播在用的推流软件)
让我们一起开始奇妙的流媒体之旅吧!
下载nginx-rtmp-module
nginx-rtmp-module的官方github地址:https://github.com/arut/nginx-rtmp-module
使用命令:git clone https://github.com/arut/nginx-rtmp-module.git
将nginx-rtmp-module下载到linux中
如果在linux中,软件下载失败,直接在windows下载完毕后,上传到linux中效果是一样的,解压后命名为nginx-rtmp-module
安装nginx
(以1.8.1为例,用其它版本的换版本号就行)
【2021.2.4更新:1.8.1版本爆出严重漏洞 故改为最新版1.16.1】
nginx的官方网站为:https://nginx.org/en/download.html
安装时候可能会报错没有安装openssl,需要执行命令:yum -y install openssl openssl-devel
如果在执行./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module时报
checking for OS
Linux 2.6.32-431.el6.x86_64 x86_64
checking for C compiler ... not found错误,则需要执行
yum -y install gcc gcc-c++ autoconf automake make
wget http://nginx.org/download/nginx-1.16.1.tar.gz
tar -zxvf nginx-1.16.1.tar.gz
cd nginx-1.16.1
./configure --prefix=/usr/local/nginx --add-module=../nginx-rtmp-module --with-http_ssl_module
make && make install
修改nginx配置文件
hls_path
需要可读可写的权限,因为 /usr/share/nginx/html/hls
在目录中还没有,所以使用以下命令创建目录mkdir -p /usr/share/nginx/html/hls
vi /usr/local/nginx/conf/nginx.conf
加入以下内容rtmp模块:(rtmp{}的内容和http{}为同级,位置不要放错直接放到文件最后就行了)
rtmp {
server {
listen 1935; #监听的端口可以自己改
chunk_size 4000;
application hls { #rtmp推流请求路径
live on;
hls on;
hls_path /usr/share/nginx/html/hls;
hls_fragment 5s;
}
}
}
修改http中的server模块(重点就是修改端口和location ):
server {
listen 85; #端口可自定义
server_name localhost;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
add_header Cache-Control no-cache;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
add_header 'Access-Control-Allow-Headers' 'Range';
root /usr/share/nginx/html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
然后启动nginx:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
访问http://你的IP:85。出现 403
,说明安装成功。(如果需要绑定域名,请看后面)
重启nginx的命令为:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload
这里说一句,你别跟我讲不知道怎么连上SSH....
SSH连接工具推荐:分享一款ssh工具——FinalShell
防火墙之开启/关闭/放行端口
Nginx整好后我们还需要放行端口:
阿里云,腾讯云什么的在控制台放行就行了,这里说的是在SSH里面修改
注意:CentOS6和7的防火墙不一样,我这里讲的是CentOS7,至于6自行百度firewalld的基本使用
启动: systemctl start firewalld
关闭: systemctl stop firewalld
查看状态: systemctl status firewalld
开机禁用 : systemctl disable firewalld
开机启用 : systemctl enable firewalld
那怎么开启一个端口呢
添加 firewall-cmd --zone=public --add-port=80/tcp --permanent
(--permanent永久生效,没有此参数重启后失效)
重新载入 firewall-cmd --reload
查看 firewall-cmd --zone= public --query-port=80/tcp
删除 firewall-cmd --zone= public --remove-port=80/tcp --permanent
更多操作推荐阅读:CentOS7使用firewalld打开关闭防火墙与端口
开始推流
好了环境配置好了,开始推流
先安装好OBS
怎么安装?百度吧,不然篇幅太长了
打开OBS,进入主界面
在文件->设置->串流 中填写信息:URL为 rtmp://xxx:1935/hls,xxx为你的服务器的IP地址(如我之前所说可以绑定域名),hls是用来存放流媒体的
秘钥可以随便填写一个,用来播放的时候识别播放哪个流媒体的,例如填写Citrons
填写完毕后,回主界面,点击开始推流,就说明我们的流媒体服务器搭建成功了
打开/usr/share/nginx/html/hls,里面出现Citrons.m3u8说明推流正常了
观看直播(拉流)
观看直播就比较简单了,可以简单的使用h5的vedio标签就可以观看了
可以访问http://xxx:85/hls/mystream.m3u8来观看直播,其中xxx为你的服务器IP地址
当然,不能让你们失望是不,这里推荐一个播放器,可以自动生成页面的————阿里云player播放器
我也提供一个页面,把推流地址换成你的就行了,就是 source
那一行的URL
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="x-ua-compatible" content="IE=edge" >
<meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
<title>Citrons博客-live</title>
<link rel="stylesheet" href="https://g.alicdn.com/de/prismplayer/2.8.1/skins/default/aliplayer-min.css" />
<script type="text/javascript" charset="utf-8" src="https://g.alicdn.com/de/prismplayer/2.8.1/aliplayer-min.js"></script>
<style>
.citrons{
position: absolute;
width: 100%;
height: 100%;
}
*{
margin: 0;
padding: 0;
overflow:hidden;
}
</style>
</head>
<body>
<div class="citrons">
<div class="prism-player" id="player-con"></div>
</div>
<script>
var player = new Aliplayer({
"id": "player-con",
"source": "https://live.imu.wang/live/imu.m3u8",
"width": "100%",
"height": "100%",
"autoplay": true,
"isLive": true,
"rePlay": false,
"playsinline": true,
"preload": true,
"controlBarVisibility": "hover",
"useH5Prism": true,
"skinLayout": [
{
"name": "bigPlayButton",
"align": "blabs",
"x": 30,
"y": 80
},
{
"name": "controlBar",
"align": "blabs",
"x": 0,
"y": 0,
"children": [
{
"name": "fullScreenButton",
"align": "tr",
"x": 10,
"y": 10
},
{
"name": "liveDisplay",
"align": "tlabs",
"x": 15,
"y": 6
}
]
}
]
}, function (player) {
player._switchLevel = 0;
player.on('liveStreamStop',function(e) {
alert('主播还没开播呢');
});
}
);
</script>
</body>
</html>
然后访问这个网站就能够观看直播了。延迟大概在20S左右
为什么延迟 那么高呢?这是因为服务器将视频流切断成一个个小的以.ts结尾的文件
而我们访问的是.m3u8文件,这个文件内容是将一个个ts文件串联起来的,这就达到了一个播放的效果,所以看起来会有很大的延迟
如果降低延迟也不是没有方法,可以设置切片生成的大小以及访问的速度,但是这样大大增加了服务器的压力
当然,我们也可以用rtmp拉流工具(VLC等)来看该直播,延迟大概在2-5S左右,拉流地址与推流地址一致
如何绑定域名
域名绑定需要编辑 Nginx 的配置文件完成,Nginx 配置文件是/usr/local/nginx/conf/nginx.conf,将默认的server {...}中的server_name 修改为你要绑定的域名,修改之后重启 Nginx 服务即可。
推荐阅读文章:Linux 服务器配置网站以及绑定域名
如何给绑定域名配置SSL
如果你的Nginx只挂了一个网站,没有用vhost,那么配置文件是 /usr/local/nginx/conf/nginx.conf
,如果你的Nginx挂了多个网站或者启用了vhost,那么配置文件是 /usr/local/nginx/conf/vhost/你的域名.conf
打开配置文件。在 server{ } 中加入以下内容(也可以将原本的注释符号删掉,修改就行了):
server {
listen 443 ssl;
server_name 你绑定的域名;
ssl on;
ssl_certificate xxx.pem的证书路径;
ssl_certificate_key xxx.key的证书路径;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location / {
add_header Cache-Control no-cache;
add_header 'Access-Control-Allow-Origin' '*' always;
add_header 'Access-Control-Expose-Headers' 'Content-Length,Content-Range';
add_header 'Access-Control-Allow-Headers' 'Range';
root /usr/share/nginx/html;
index index.html index.htm;
}
}
启动Nginx服务(安装后是没有启动的):/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
重启Nginx服务:/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf -s reload
关闭Nginx服务:pkill -9 nginx
推荐文章:Nginx的启动、停止与重启
OBS疑难杂症之win10捕捉屏幕黑屏
目前我就遇见这个问题
解决方法一:
尝试把程序兼容性设置成win7和管理员身份,具体操作:
右键快捷方式->属性->兼容性标签,记得勾选以管理员身份运行
解决方法二:
如果设置兼容还无法获取显示器,那么就是显示器使用的显卡,和OBS使用的显卡不是同一张
WIN+R 运行 dxdiag 切换到 显示 选项卡,设备中,就是当前显示器使用的显卡。
解决方法三:
右键OBS快捷方式->用图形处理器运行->更改默认图形处理器
打开
选择管理3D设置->程序设置->选择要自定义的程序->添加->选定OBS studio->添加即可
如果还是黑屏,就将为此程序选择首选图形处理器换一下,我换成集成图形就可以捕捉了
关于OBS基础设置和其他疑难杂症请自行百度
好啦,基础教程就到这了,如果有不明白的可以在评论区下方提出哦QAQ~~
附上我的直播地址:传送门
版权属于:Citrons
本文链接:https://www.citrons.cn/note/239.html
转载时须注明出处及本声明
6 comments
呜呜呜,我照着来,OBS一直提示无法连接。
防火墙端口开了,访问ip/stat也是有文件目录显示,因为没有推流,没有文件。
怎么解决呀,大佬知道吗。。。
虽然知道你解决了,但是我觉得还是应该冒个泡,证明我还活着
哇qwq
我也来整一个~~号腻害的感觉,发现野生大佬
嘤嘤嘤
1M宽带服务器瑟瑟发抖,在区域网跑应该还行
1M能跑128k-160k的样子,能支持一个人看高清QAQ