zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    已经二叉树的前序遍历和中序遍历 写出后序遍历算法
    Windows GVim
    PHP PDO
    Html5 Geolocation获取地理位置信息
    Vim字符编码/中文乱码详解
    Vim常用操作命令
    三列布局,左右宽度固定,中间一列随浏览器窗口变化宽度
    Html5 跨域通信
    Http 与 Socket 区别
    浏览器对比不应该成为月经帖或季度帖
  • 原文地址:https://www.cnblogs.com/baixiuhua/p/13895930.html
Copyright © 2011-2022 走看看