在Debian9上使用ffmpeg+nginx+rtmp+web搭建局域网视频直播服务器

项目简介:视频直播网站由三个部分构成:1.推流端 2.服务器 3.拉流端。在该项目中,推流端用ffmpeg完成,服务器由NGINX+RTMP模块完成,拉流端使用VLC或者网页完成。

一、开发环境简介:

推流端:系统:Debian9/或者任意安装了ffpmeg的局域网主机 工具:ffmpeg

服务器:系统:   Debian9 工具:NGINX+RTMP

拉流端:系统:WINDOWS 10   工具:VLC播放器,WEB


二、构建服务器

服务器由NGINX+RTMP构成。NGINX是HTTP服务器,RTMP是附加模块。

其中NGINX我选择的是用源码编译方式进行安装,因为这种方式可以自定义安装指定的模块以及最新版本。

首先配置各项依赖库。

1.安装gcc g++依赖库

sudo apt-get install build-essential
sudo apt-get install libtool

2.安装pcre依赖库

sudo apt-get update
sudo apt-get install libpcre3 libpcre3-dev


3.安装zlib依赖库

sudo apt-get install zlib1g-dev

4.安装SSL依赖库

sudo apt-get install openssl libssl-dev

5.安装NGINX

#下载NGINX(到HOME目录)

wget http://nginx.org/download/nginx-1.13.10.tar.gz

#解压

tar -zxvf nginx-1.13.10.tar.gz

#下载RTMP(到HOME目录)

git clone https://github.com/arut/nginx-rtmp-module.git

#进入NGINX解压目录

cd nginx-1.13.10

#配置

./configure --prefix=/usr/local/nginx --add-module=/root/nginx-rtmp-module --with-http_ssl_module

#编译

make

#安装

sudo make install

#打开nginx配置文件

cd /usr/local/nginx/conf/
sudo nano nginx.conf
#user  nobody;
worker_processes  auto;
#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;
#pid        logs/nginx.pid;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';
    #access_log  logs/access.log  main;
    sendfile        on;
    #tcp_nopush     on;
    #keepalive_timeout  0;
    keepalive_timeout  65;
    #gzip  on;
    server {
        listen       80;
        server_name  localhost;
location /stat {        
            rtmp_stat all;  
            rtmp_stat_stylesheet stat.xsl;  
  }  
  
    location /stat.xsl {    
        root /usr/local/nginx/nginx-rtmp-module/;  
    }          
#charset koi8-r;
        #access_log  logs/host.access.log  main;
        location / {
            root   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;
        }
        # proxy the PHP scripts to Apache listening on 127.0.0.1:80
        #
        #location ~ \.php$ {
        #    proxy_pass   http://127.0.0.1;
        #}
        # pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
        #
        #location ~ \.php$ {
        #    root           html;
        #    fastcgi_pass   127.0.0.1:9000;
        #    fastcgi_index  index.php;
        #    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
        #    include        fastcgi_params;
        #}
        # deny access to .htaccess files, if Apache's document root
        # concurs with nginx's one
        #
        #location ~ /\.ht {
        #    deny  all;
        #}
    }
    # another virtual host using mix of IP-, name-, and port-based configuration
    #
    #server {
    #    listen       8000;
    #    listen       somename:8080;
    #    server_name  somename  alias  another.alias;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
    # HTTPS server
    #
    #server {
    #    listen       443 ssl;
    #    server_name  localhost;
    #    ssl_certificate      cert.pem;
    #    ssl_certificate_key  cert.key;
    #    ssl_session_cache    shared:SSL:1m;
    #    ssl_session_timeout  5m;
    #    ssl_ciphers  HIGH:!aNULL:!MD5;
    #    ssl_prefer_server_ciphers  on;
    #    location / {
    #        root   html;
    #        index  index.html index.htm;
    #    }
    #}
}
rtmp {  
  
    server {  
  
        listen 1935;  #服务端口,默认1935,避开重要端口即可   
  
        application live {  
        live on;
    }  
        application hls_alic{
live on;
hls  on;
hls_path /tmp/hls;
}
}  
}

#开启nginx服务

cd /usr/local/nginx/sbin
sudo ./nginx

#创建软链接,便于启动

sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/sbin/

#如要查看NGINX服务是否开启,请打开浏览器并输入localhost,如果看到nginx页面即为成功,或使用以下代码

ps -ef| grep nginx
netstat -antup | grep 1935
防火墙的端口放行,否则后面会失败
firewall-cmd --permanent  --add-port=1935/tcp
firewall-cmd --reload
注意:如果nginx重启失败,记得先kill -9 杀掉nginx 然后加上配置文件启动
/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

三、配置推流端

简易的推流端使用ffmpeg即可完成。

1.     安装ffmpeg

sudoapt-get update
sudo apt-get install ffmpeg

2.启用ffmpeg进行推流

该命令适用于局域网内或者其他所有可以与服务器通讯的主机,也就是说可以在其他机器上推流,也可以在本机上推流。

ffmpeg -re -i 1.mp4 -c copy -f flv "rtmp://localhost/live"

四、配置拉流端

1.使用软件播放:

如果你想直接测试能否拉流,推荐使用VLC(www.videolan.org/),这是一个兼容各平台的工具。

1.1.下载并安装完成后,打开VLC,左上角媒体-打开网络流

1.2.在URL栏内输入服务器所在地址,rtmp://你的IP/live (此处也可以填网址,只要你做了DNS解析就可以,例如rtmp://zhibo.com/live)

2.如果你想要在网页中播放该视频,请新建一个html5文档。

2.1 新建一个工程并新建一个html5文件。

cd /usr/local/nginx/html

先删除原来的index.html,再新建一个新的

nano index.html

2.2  复制以下代码并用浏览器浏览,注意开启flashplayer


<html>
<head>
    <title>Live</title>
    <meta charset="utf-8">
    <link href="http://vjs.zencdn.net/5.5.3/video-js.css" rel="stylesheet">
    <!-- If you'd like to support IE8 -->
    <script src="http://vjs.zencdn.net/ie8/1.1.1/videojs-ie8.min.js"></script>
    <script src="http://vjs.zencdn.net/5.5.3/video.js"></script>
</head>
<body>
<video id="my-video" class="video-js" controls preload="auto" width="640" height="300"
       poster="http://ppt.downhot.com/d/file/p/2014/08/12/9d92575b4962a981bd9af247ef142449.jpg" data-setup="{}">
    <source src="rtmp://你的IP/live/" type="rtmp/flv">
    </p>
</video>
</body>
</html>

2.3测试

打开浏览器,输入你的RTMP服务器IP,效果应该如下

{9E4EB907-7219-4529-88B0-A644526A610C}_20190926170206.jpg

就成功了。


最后编辑于:2019/01/04作者: admin

发表评论