Centos7+Nginx+Rtmp+Ffmpeg搭建流媒体服务器

安装前需要的工具

#net-tool 查本地IP
#wget 下载安装包
#unzip 解压zip包
#gcc gcc-c++ perl 编译软件包用
yum install -y net-tools wget unzip gcc gcc-c++ perl

将Centos的yum源更换为国内的阿里云源

#备份yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup
#下载阿里源
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#清空缓存
yum makecache

安装nginx及rtmp


切换到 /home 下

cd /home

切换到 /home 下,下载并解压pcre

#下载pcre包
wget    https://netix.dl.sourceforge.net/project/pcre/pcre/8.41/pcre-8.41.tar.gz
#解压pcre包
tar -zxvf pcre-8.41.tar.gz

切换到 /home 下,下载并解压zlib

#下载zlib包
wget http://www.zlib.net/zlib-1.2.11.tar.gz
#解压zlib包
tar -zxvf zlib-1.2.11.tar.gz

切换到 /home 下,下载并安装openssl

#下载openssl包
wget https://www.openssl.org/source/old/1.0.1/openssl-1.0.1i.tar.gz
#解压openssl包
tar -zxvf openssl-1.0.1i.tar.gz
#切换到openssl里
cd openssl-1.0.1i
#生成配置文件 默认配置
./config --prefix=/usr/local --openssldir=/usr/local/openssl
#编译程序
make 
#安装程序
make install

切换到 /home 下,下载并解压nginx-rtmp-model

#下载rtmp包
wget https://github.com/arut/nginx-rtmp-module/archive/master.zip
#解压下载包
unzip -o master.zip
#修改文件夹名
mv master nginx-rtmp-module

切换到 /home 下,安装nginx

#下载nginx
wget http://nginx.org/download/nginx-1.12.2.tar.gz
#解压nignx 
tar -zxvf nginx-1.12.2.tar.gz
#切换到nginx中
cd nginx-1.12.2
#生成配置文件,将上述下载的文件配置到configure中
./configure --prefix=/usr/local/nginx --with-pcre=/home/pcre-8.41 --with-zlib=/home/zlib-1.2.11 --with-openssl=/home/openssl-1.0.1i --add-module=/home/nginx-rtmp-module  
#编译程序
make
#安装程序
make install

切换到 /home 下,安装ffmpeg

#安装epel包
yum install -y epel-release 
#导入签名
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7
#导入签名
rpm --import http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro 
#升级软件包
rpm -Uvh http://li.nux.ro/download/nux/dextop/el7/x86_64/nux-dextop-release-0-1.el7.nux.noarch.rpm
#更新软件包
yum update -y
#安装ffmpeg
yum install -y ffmpeg
#检查安装成功
ffmpeg -version

修改配置运行服务


 

修改nginx配置

vi /usr/local/nginx/conf/nginx.conf

修改之后的nginx配置

#user  nobody;

#工作进程
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#指定pid存放的路径
pid /usr/local/nginx/logs/nginx.pid;

events {
        #使用的网络I/O模型,linux系统推荐是epoll而freeBSD是kqueue
        use  epoll;
        #允许的连接数,最大的高并发连接数为worker_processes*worker_connections
        worker_connections  1024;
}

#RTMP配置
rtmp {
    server {
        #监听端口
        listen 1935;
        #直播流
        application myapp {
            live on;
            record off;
        }
        #hls配置
        application hls {
            live on;
            hls on;
            hls_path /tmp/hls;
        }
    }
}
http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    gzip  on;

    server {
        listen       80;
        server_name  服务器IP;

        #数据格式设置
        charset utf-8;

        location /stat {
                rtmp_stat all;
                rtmp_stat_stylesheet stat.xsl;
        }

        location /stat.xsl {
                #设置为你的nginx-rtmp-module文件夹路径,注意访问权限
                root /home/nginx-rtmp-module/;
        }

        location /rtmp-publisher {
                #设置为你的nginx-rtmp-module文件夹路径,注意访问权限
                root /home/nginx-rtmp-module/test;
        }

        location / {
            #设置为你的nginx-rtmp-module文件夹路径,注意访问权限,可使用默认设置
            root /home/nginx-rtmp-module/test/www;
            index  index.html index.htm;
        }

        #配置hls
        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }
            root /tmp;
            add_header Cache-Control no-cache;
        }
       
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

启动或重启nginx

/usr/local/nginx/sbin/nginx

或

/usr/local/nginx/sbin/nginx -s reload

可能会出现报错:Nginx: [error] open() "/usr/local/Nginx/logs/Nginx.pid" failed(2:No such file or directory)

解决办法:

/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

使用nginx -c的参数指定nginx.conf文件的位置

 

打开防火墙

/sbin/iptables -I INPUT -p tcp --dport 80 -j ACCEPT

 

在阿里云增加安全组规则,配置1935端口号

测试功能

1. 查看IP

ifconfig

2. 上传测试视频

在服务器的home文件夹下上传一个test.mp4视频

3. 推送rtmp流

同时,下载一个VLC软件,输入"rtmp://服务器IP:1935/myapp/推送后的视频名字"点击播放进行测试

ffmpeg -re -i "/home/test.mp4" -vcodec libx264 -vprofile baseline -acodec aac  -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://服务器IP:1935/myapp/推送后的视频名字 

推送hls流

写个HTML测试

ffmpeg -re -i "/home/test.mp4" -vcodec libx264 -vprofile baseline -acodec aac -ar 44100 -strict -2 -ac 1 -f flv -s 1280x720 -q 10 rtmp://服务器IP:1935/hls/推送后的视频名字

同时,打开你的HTML

<script src="https://cdn.jsdelivr.net/hls.js/latest/hls.min.js"></script>
<video id="video"></video>
<script>
  if(Hls.isSupported()) {
    var video = document.getElementById('video');
    var hls = new Hls();
    hls.loadSource('http://服务器IP/hls/推送后的视频名字.m3u8');
    hls.attachMedia(video);
    hls.on(Hls.Events.MANIFEST_PARSED,function() {
      video.play();
  });
 }
</script>

参考

 

  • https://juejin.im/post/6844903623017627656
  • https://blog.csdn.net/kingroc/article/details/50839994
  • https://blog.csdn.net/loyachen/article/details/50909854
  • https://blog.csdn.net/szydwy/article/details/78632222
posted @ 2020-10-29 11:46  悠悠乃  阅读(976)  评论(0编辑  收藏  举报