欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

nginx-obs 直播服务搭建

程序员文章站 2022-07-06 20:33:00
...

环境: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-obs 直播服务搭建

  • 进入到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”才算编译已安装:
nginx-obs 直播服务搭建
nginx-obs 直播服务搭建

2)查看nginx版本:./nginx
nginx-obs 直播服务搭建
方法2:直接启动nginx服务

#开启运行服务
cd  /usr/local/nginx/sbin 
./nginx #运行两次

出现以下提示说明服务可以正常运行——————>nginx安装很OK!
nginx-obs 直播服务搭建
上图: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-obs 直播服务搭建

②如果不是该欢迎页面,就需要修改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-obs 直播服务搭建
接下来刷新浏览器界面看是否出现欢迎界面,出现则是成功。


  • 修改Nginx的conf文件

配置rtmp默认1935端口

在/usr/local/nginx/conf目录下编辑nginx.conf文件(操作前备份)

nginx-obs 直播服务搭建
插入代码位置指示:nginx-obs 直播服务搭建
保存代码,退出

  • 关闭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并回车,出现如下信息说明直播服务器已经搭建成功。
nginx-obs 直播服务搭建
#到此处直播服务器已经配置成功。但是还直播不了。

  • 实现推流

到官网下载OBS(安装时,都勾选)
软件设置如下:
nginx-obs 直播服务搭建
nginx-obs 直播服务搭建
下面点击开始推流(图片打错字了),冒绿
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切片放哪。
nginx-obs 直播服务搭建
切片时长,一般本地才会有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目录下含有切片(服务搭建成功):
nginx-obs 直播服务搭建
此时苹果的同学可以播了,苹果电脑的同学在浏览器输入: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
nginx-obs 直播服务搭建

<!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>

浏览器操作如下即可播放
nginx-obs 直播服务搭建
play.html的视频地址可以更改,以后可以用来看剧。
nginx-obs 直播服务搭建
CCTV视频地址:
nginx-obs 直播服务搭建
*1:
nginx-obs 直播服务搭建
##########################################
完结!

相关标签: nginx