Nginx搭建RTMP推拉流服务器

如题,今天就来实现一个推拉流服务器,模拟下推流后被客户端拉流看到效果。

详细步骤如下
- 安装Nginx
- 安装FFmpeg
- 安装VLC客户端


安装Nginx

在Mac上有一个很好用的包管理插件,名为homebrew。 具体的安装可以自行去搜索下。下面就借助Homebrew来安装Nginx。

首先是拉取Nginx

$ brew tap home/nginx

执行安装

$ brew install nginx-full --with-rtmp-module

这里需要注意的就是后面的–with-rtmp-module参数,其意思就是带上rtmp的模块,这样我们才能借助Nginx实现一个rtmp的推拉流服务器。

安装过程中,homebrew或帮我们自动的安装如pcre,openssl等模块。因此相对于其他平台的安装方式或者源码安装方式,homebrew贼省心。
经过稍长的等待时间,带有rtmp模块的Nginx就安装好了。查看安装详情的命令为:

brew info nginx-full

就可以看到具体的安装信息了,比如配置文件在哪里,可执行文件又在哪里。
我这里有如下路径:
- 配置文件路径 /usr/local/etc/nginx/
- web容器路径 /usr/local/var/www
- 可执行文件路径/usr/local/Ceallar/nginx/

配置rtmp

在nginx.conf的HTTP节点后面添加一个同级别的rtmp接单。具体内容如下:

#user  nobody;
worker_processes  1;

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

error_log   /usr/local/var/logs/nginx/error.log debug;
pid         /usr/local/var/run/nginx.pid;

#pid        logs/nginx.pid;

events {
    worker_connections  256;
}

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   /usr/local/var/logs/access.log  main;
    #access_log  logs/access.log  main;

    sendfile        on;
    port_in_redirect off;
    #tcp_nopush     on;

    #keepalive_timeout  0;
    keepalive_timeout  65;

    #gzip  on;

    server {
        listen       8080;
        server_name  localhost;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location / {
            #root   html;
            root    /usr/local/var/www;
            index  index.html index.htm index.php;
        }

        #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   /usr/local/var/www;
        }

        # 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$ {
            fastcgi_intercept_errors on;
            #root           html;
            root            /usr/local/var/www;
            fastcgi_pass   127.0.0.1:9000;
            #fastcgi_pass unix:/run/php/php7.0-fpm.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME  $document_root$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;
    #    }
    #}
    include servers/*;
}

rtmp {
server {
  listen 1935;
  chunk_size 4000;
  application rtmplive {
    live on;
    max_connections 1024;
  }

  application hls {
    live on;
    hls on;
    hls_path /usr/local/var/www/hls;
    hls_fragment 1s;
  }
}
}

最后面hls_path就是待会要用到的推流文件目录了。一般来说不必创建,如果出现文件夹权限问题的话,手动添加下可读可写权限就可以了。

安装ffmpeg

安装它在其他的平台上可能会超级费劲,但是在Mac上,有了homebrew,那就真的不是事了。

  $/opt nginx brew install ffmpeg
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (caskroom/cask).

==> Installing dependencies for ffmpeg: lame, x264, xvid
==> Installing ffmpeg dependency: lame
==> Downloading https://homebrew.bintray.com/bottles/lame-3.99.5.high_sierra.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring lame-3.99.5.high_sierra.bottle.1.tar.gz
��  /usr/local/Cellar/lame/3.99.5: 27 files, 2MB
==> Installing ffmpeg dependency: x264
==> Downloading https://homebrew.bintray.com/bottles/x264-r2795.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring x264-r2795.high_sierra.bottle.tar.gz
��  /usr/local/Cellar/x264/r2795: 11 files, 3.2MB
==> Installing ffmpeg dependency: xvid
==> Downloading https://homebrew.bintray.com/bottles/xvid-1.3.4.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring xvid-1.3.4.high_sierra.bottle.tar.gz
��  /usr/local/Cellar/xvid/1.3.4: 10 files, 1.2MB
==> Installing ffmpeg
==> Downloading https://homebrew.bintray.com/bottles/ffmpeg-3.4.high_sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring ffmpeg-3.4.high_sierra.bottle.tar.gz
��  /usr/local/Cellar/ffmpeg/3.4: 248 files, 50.9MB

安装VLC客户端

VLC客户端是一个很好用的可以拉流并进行读取的软件,Mac上挺好用的。

开始推流,拉流

推流

推流之前,先准备一个视频软件。我就直接用QQ的录屏来录制了一个视频,放在桌面上,名为demo.mp4

然后在命令行里面输入:

ffmpeg -re -i 本地视频路径如(如/Users/changba/Desktop/Player/demo.mp4)  -vcodec copy -f flv rtmp://localhost:1935/rtmplive/home

这里rtmplive是上面的配置文件中,配置的应用的路径名称;后面的room可以随便写,待会使用拉流软件的时候把地址对应上就可以了。

输入完之后,就可以打开VLC客户端了。

拉流

具体操作为:file–>>Open Network
然后在弹出的URL框中输入如下链接。

rtmp://localhost:1935/rtmplive/home

记得对应上名字就可以了,大致的拉流效果如下:

总结

至此,基于rtmp的推拉流的Nginx服务器就算是完成了。不妨来尝试一下,其实还是挺有意思的。

时间: 2024-09-20 06:27:36

Nginx搭建RTMP推拉流服务器的相关文章

nginx+ffmpeg搭建rtmp转播rtsp流的flash服务器

本文概要:         nginx是非常优秀的开源服务器,用它来做hls或者rtmp流媒体服务器是非常不错的选择.本文介绍了一种简易方法快速搭建rtmp流媒体服务器,也叫rtsp转播,数据源不是读取文件,而是采用获取rtspNal流后使用ffmpeg转播.csdn固本培元:leoluopy@gmail.com 开发环境:centos6.4 (主流的linux服务器选择,30%以上的市场占有率) 需要这几个包. 版本号:nginx 1.7.3  openssl 1.0.2   rtmp-mod

利用nginx搭建RTMP视频点播、直播、HLS服务器

开发环境 Ubuntu 14.04 server nginx-1.8.1 nginx-rtmp-module nginx的服务器的搭建 安装nginx的依赖库 sudo apt-get update sudo apt-get install libpcre3 libpcre3-dev sudo apt-get install openssl libssl-dev 配置并编译nginx 使用nginx的默认配置,添加nginx的rtmp模块.  ./configure --add-module=.

Linux上用nginx搭建RTMP服务器

参考文章:https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/ 我的环境ubuntu 1. 安装编译 nginx 所需要的库 sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev 1 1 2. 下载 nginx-1.9.15.tar.gz wget http://ngin

nginx搭建flv和mp4流媒体服务器例子

准备软件: nginx-1.6.0.tar.gz yamdi-1.9.tar.gz yamdi 是渐进式流支持模块,抓取视频资源关键帧实现播放时的随意拖动效果 下载地址:http://ncu.dl.sourceforge.net/project/yamdi/yamdi/1.9/yamdi-1.9.tar.gz flv视频可以通过http或rtmp方式发布.这里用http方式. 安装nginx及mp4支持模块和flv模块: nginx支持mp4模块下载地址:http://h264.code-sho

使用nginx搭建流媒体直播平台(该方式不适用与多人聊天)

一 概要说明 使用nginx搭建流媒体直播平台,目的就是要支持rtmp协议,实现用户使用rtmp(rtmp://192.168.201.128/myapp)协议推送流到服务器.然后其他用户点播该用户推送的视频流信息.既然是rtmp协议,所以客户端可以是flash程序,也可以OBS(Open Broadcaster Software)这种比较大众化的直播客户端.个人是比较喜欢使用OBS的,老实说我其实也是flash和flex开发者,开发个多款WEB视频程序和视频会议系统.java水平也是很高的.欢

视频直播推流拉流慢、卡顿解决方案

一.摘要 视频直播类App当前已经普遍采用CDN来实现访问加速,但还是经常遇到推拉流慢.卡顿的问题.这类问题一般是由于调度不精准.域名劫持.终端手机接入网络动态切换等因素导致,结合使用CDN和HTTPDNS可以比较完美解决此类问题. 二.视频直播经典加速架构 当前视频直播类App经典加速架构如下图所示: 图1 视频直播类App经典加速架构 经典加速架构中,推流阶段使用CDN就近接入实现推流加速,用户播放拉流阶段也可以使用CDN来做加速.由于CDN节点分布的广泛性与边缘性确保了客户能够就近接入与缓

流媒体测试笔记记录之————阿里云监控、OBS、FFmpeg拉流和推流变化比较记录

  OBS设置视频(512kbps)和音频(128kbps)比特率   阿里云监控结果:    使用FFmpeg拉流到Nginx 服务器测试比特率        第二次测试,修改视频和音频比特率   OBS设置   阿里云监控     Nginx 比特率变化    FFMPEG 拉流截图    

使用 nginx 和 rtmp 插件搭建视频直播和点播服务器

使用 nginx 和 rtmp 模块 ,可以很容易地搭建一个视频直播和点播服务器出来. 首先,看一下最经典的参考文献: How to set up your own private RTMP server using nginx 1. 安装 nginx 和 rtmp 模块 有关 nginx 的编译和安装比较简单,这里就不介绍了,看参考文献.这里提示以下几点: (1) 安装好 nginx 后,配置文件在这里: /usr/local/nginx/conf/nginx.conf (2) 启动 ngin

流媒体技术学习笔记之(二)RTMP和HLS分发服务器nginx.conmf配置文件(解决了,只能播放RTMP流而不能够播放HLS流的原因)

user www www; worker_processes 1; error_log logs/error.log debug; #pid logs/nginx.pid; events { worker_connections 65535; } rtmp { server { listen 1935; application live { live on; record off; } application live2 { live on; record off; } # applicatio