nginx-obs 直播服务搭建
环境:CentOS7.8
一、最小化安装CentOS7.8,ssh远程登录
(在模板机基础上克隆一台新的,搞过的机器毛病多)
二、安装yum
yum install -y wget
主要是为了源码安装 wget下载
三、换源 Centos7 默认源
3.1换成阿里云的源并更新源 建立缓存
#备份
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载阿里云yum配置
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#建立缓存 覆盖
yum makecache
3.2升级所有包
改变软件设置和系统设置,系统版本内核都升级,故需要几分钟。
yum update -y
3.3 安装步骤
- 安装构建环境
yum install git gcc make pcre-devel openssh-devel -y
#openssl-devel安装失败:需要先安装openssl
yum -y install openssl openssl-devel
- 下载nginx-rtmp-module
git clone git://github.com/arut/nginx-rtmp-module.git
- nginx-rtmp-module 安装Nginx的rtmp协议的扩展
#下载压缩包
wget http://nginx.org/download/nginx-1.15.0.tar.gz
#解压
tar xzf nginx-1.15.0.tar.gz
此步骤之后含两个目录:
- 进入到Nginx目录里进行配置(最后没有error才算配置成功)
cd nginx-1.15.0
./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
#http_ssl_module 叫模块/扩展/ 可以支持http/https访问
#nginx-rtmp-module 模块/扩展 用于推流
- 编译源码并安装 (需要有makefile文件才能执行此步骤)
make && make install
#make生成Makefile文件,make install安装
#把源码转化成git源
- 检查nginx是否安装成功
方法1:查看服务版本号
1)出现以下“nginx”才算编译已安装:
2)查看nginx版本:./nginx
方法2:直接启动nginx服务
#开启运行服务
cd /usr/local/nginx/sbin
./nginx #运行两次
出现以下提示说明服务可以正常运行——————>nginx安装很OK!
上图:nginx绑定端口失败(一个服务对应一个端口),一个应用要想跟人家通信首先得绑定端口,这里是绑定80端口失败了,这里监控了所有网段(0.0.0.0表示所有网段),98是错误码。出现以上情况说明服务已经起来了。
PS:此方式有时不管用,比如当80端口被占用。
扩展:80端口占用
一般安装L A M P环境会出现占用情况
L LInux
A Apache2.0 阿帕奇,做web服务(涉及web就会占用80端口)
方法3:
①通过80端口 浏览器的方式访问,如果出现nginx欢迎页面表示安装成功
②如果不是该欢迎页面,就需要修改nginx的默认80端口,可以改成8080,9000,9090,8888等等
可能是Linux防火墙(firewalld.service开启了,需要stop、disable)限制访问。解决防火墙问题:
systemctl stop firewalld.service
systemctl disable firewalld.service
systemctl state firewalld.service或者firewall-cmd --state
接下来刷新浏览器界面看是否出现欢迎界面,出现则是成功。
- 修改Nginx的conf文件
配置rtmp默认1935端口
在/usr/local/nginx/conf目录下编辑nginx.conf文件(操作前备份)
插入代码位置指示:
保存代码,退出
-
关闭nginx服务
/usr/local/nginx/sbin/nginx -s stop
-
启动并加载配置文件
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
命令行输入/usr/local/nginx/sbin/nginx
并回车,出现如下信息说明直播服务器已经搭建成功。
#到此处直播服务器已经配置成功。但是还直播不了。
- 实现推流
到官网下载OBS(安装时,都勾选)
软件设置如下:
下面点击开始推流(图片打错字了),冒绿
- 到/usr/local/nginx/html下寻找hls目录
如果没有,就是conf里没有配置,我们之前只配置了1935端口。
http服务里需要指定推流上来hls产生的ts切片的目录。
#放在server的第一个location后面,主流的视频app都用m3u8
location /hls {
#server hls fragments
types{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
alias /temp/hls;
expires -1;
}
#修改配置之后需要停止服务再次开启
/usr/local/nginx/sbin/nginx -s stop
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
启动服务之后,到obs点击停止推流,再次点击开始推流
此时:
注意:服务器端口已经搭建好,可以推流了,但是看不到切片目录(hls),原因:配置rtmp的时候没有指定ts切片放哪。
切片时长,一般本地才会有3秒这么快 。虎牙10s就不错了。
停止Nginx服务 /usr/local/nginx/sbin/nginx -s stop
启动并加载配置文件:
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf
点击obs软件的开始推流,过3-5秒查看/usr/local/nginx/html有ts切片目录hls,hls目录下含有切片(服务搭建成功):
此时苹果的同学可以播了,苹果电脑的同学在浏览器输入:http://10.0.0.100/hls/oldboy_live.m3u8
,只有苹果手机的也可以给电脑热点,连上热点也是一样的效果。
其中oldboy_live.m3u8
为上图的串流秘钥
3.4 拉流过程(播放)
编写:PC端_HLS播放器源代码(在win10编写,vim容易出毛病,保存为play.html,代码如下),rz上传到linux /usr/local/nginx/html
目录下
(rz需要安装:yum install lrzsz -y
)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>PC HLS video</title>
<link href="http://cdn.bootcss.com/video.js/6.0.0-RC.5/alt/video-js-cdn.min.css" rel="stylesheet">
</head>
<body>
<h1>PC 端播放 HLS(<code>.m3u8</code>) 视频</h1>
<p>借助 video.js 和 videojs-contrib-hls</p>
<p>由于 videojs-contrib-hls 需要通过 XHR 来获取解析 m3u8 文件, 因此会遭遇跨域问题, 请设置浏览器运行跨域</p>
<video id="hls-video" width="300" height="200" class="video-js vjs-default-skin"
playsinline webkit-playsinline
autoplay controls preload="auto"
x-webkit-airplay="true" x5-video-player-fullscreen="true" x5-video-player-typ="h5">
<!-- 直播的视频源 -->
<source src="http://live.zzbtv.com:80/live/live123/800K/tzwj_video.m3u8" type="application/x-mpegURL">
<!-- 点播的视频源 -->
<!--<source src="http://devstreaming.apple.com/videos/wwdc/2015/413eflf3lrh1tyo/413/hls_vod_mvp.m3u8" type="application/x-mpegURL">-->
</video>
<script src="http://cdn.bootcss.com/video.js/6.0.0-RC.5/video.js"></script>
<!-- PC 端浏览器不支持播放 hls 文件(m3u8), 需要 videojs-contrib-hls 来给我们解码 -->
<script src="http://cdn.bootcss.com/videojs-contrib-hls/5.3.3/videojs-contrib-hls.js"></script>
<script>
// XMLHttpRequest cannot load http://xxx/video.m3u8. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://192.168.198.98:8000' is therefore not allowed access.
// 由于 videojs-contrib-hls 需要通过 XHR 来获取解析 m3u8 文件, 因此会遭遇跨域问题, 请设置浏览器运行跨域
var player = videojs('hls-video');
player.play();
</script>
</body>
</html>
浏览器操作如下即可播放
play.html的视频地址可以更改,以后可以用来看剧。
CCTV视频地址:
*1:
##########################################
完结!
上一篇: 浅谈es6语法 (Proxy和Reflect的对比)
下一篇: 金子原来是这么生产出来的,感叹~