Nginx+rtmp 搭建流媒体服务器

目录

前言

环境准备及编译

测试

遇到的问题


前言

RTMP是Real Time Messaging Protocol(实时消息传输协议)的首字母缩写。该协议基于TCP,是一个协议族,包括RTMP基本协议及RTMPT/RTMPS/RTMPE等多种变种。RTMP是一种设计用来进行实时数据通信的网络协议,主要用来在Flash/AIR平台和支持RTMP协议的流媒体/交互服务器之间进行音视频和数据通信。——摘录自百度。 如果大家想对RTMP有更深的认识,可以参看这篇文章:《带你吃透RTMP》。

本文要处理的是:用 Nginx+rtmp 搭建流媒体服务器,用来做推拉流的中转。rtmp是开源的插件,Nginx是支持高并发的服务器。

ffmpeg推流到 Nginx 服务器,然后VLC从服务器拉流播放。那么这个服务器怎么搭建呢,下面就详细的记录一下。

环境准备及编译

1、win10上,装VMWare Workstation, 然后安装Ubuntu16.04. 

2、检查一下用到的工具,是否存在

 cmake ,gcc,  g++, libssl-dev, libpcre3-dev, git等,需要先配置好。检查的方式: 直接输入工具名,回车,就可以看到有没有了。

如果没有,就像下面这样去安装。安装不成的时候,头部加上sudo 就可以了,以管理员权限进行安装。

apt-get install libpcre3-dev

3、当上面的工具都准备好了,就可以进行下载

// 创建一个文件夹
mkdir nginx

// 进入文件夹
cd nginx

// 下载文件
wget http://nginx.org/download/nginx-1.12.1.tar.gz

// 解压
tar -zxvf nginx-1.12.1.tar.gz

4、rtmp作为一个模块,添加到nginx文件夹中。

//下载rtmp模块
git clone https://github.com/arut/nginx-rtmp-module.git

5、作为一个模块,编译到Nginx中。 切回到nginx-1.12.1目录下:

 // 用的绝对路径进行安装配置
./configure --add-module=/home/ht-dong/nginx/nginx-rtmp-module   

6、编译

make

7、安装

make install

8、至此,nginx就安装在了 /usr/local/nginx/下面。

9、切换到安装目录下的sbin ,

cd sbin

10、启动运行  

./nginx

如果不成功,用sudo ./nginx  (sudo是用管理员身份进行)

11、 然后查看是否启动成功

ps -ef|grep nginx

12、Chrome浏览器直接输入:http://192.168.87.6/。 显示如下:登录成功!

Welcome to nginx!

If you see this page, the nginx web server is successfully installed and working. 
Further configuration is required.

For online documentation and support please refer to nginx.org.
Commercial support is available at nginx.com.

Thank you for using nginx.

13、 关闭服务

sudo pkill nginx

================以上 完成了 Nginx的安装, 下面,进行rtmp的配置===================

1、进入到安装目录下

cd /usr/local/nginx/conf/

2、打开nginx.conf文件

sudo vim nginx.conf

3、添加信息, 在这个文件的最后添加,就可以。

rtmp
{
        server
        {
                listen 1935; // 端口
                chunk_size 4096;// 块尺寸
                application live  // 目录
                {
                        live on;
                }
        }
}

4、添加如下消息,就可以进行通过浏览器看到视频详细信息。

// 跟另外一个server平行设置的
server
    {
        listen 8080; // 端口
        location /stat
        {
                rtmp_stat all;
                rtmp_stat_stylesheet stat.xsl; //Excel表格样式,在浏览器中显示用的
        }
        location /stat.xsl
        {
                root /home/ht-dong/nginx/nginx-rtmp-module;//模块路径
        }
    }

这段信息添加完,就需要关闭服务/重启服务。

sudo pkill nginx

sudo ./nginx

在推拉流的过程中,在Chrome浏览器中输入:http://192.168.87.6:8080/stat

就可以看到详细信息列表了。

 

测试

测试一

进行到上面的第3步时,就可以进行推拉流测试了。

准备好我们下载的ffmpeg—shared版本,进入bin,找到 ffmpeg.exe, 在这个文件中放一个flv文件。

然后在这个文件夹的目录栏中,输入 cmd, 进入命令行:

ffmpeg  -i China.flv  -f flv rtmp://192.168.87.6/live

1》打开VLC, 媒体——>打开网络串流,输入:rtmp://192.168.87.6/live, 播放。这里的live,就是上面配置的文件路径。

可以看到推流的文件,进行播放了。

2》还可以用ffplay拉流播放。

ffplay rtmp://192.168.87.6/live -fflags nobuffer // 不要缓冲,会更快

测试二

进行上面第4步时,通过浏览器,可以看到推拉流视频文件的详细信息表。

在推拉流的过程中,在Chrome浏览器中输入:http://192.168.87.6:8080/stat

就可以看到详细信息列表了。

测试三

通过ffmpeg的代码,开发一个win32的控制台工程,进行推流。不用ffmpeg.exe进行推流。代码后续加上。

 

遇到的问题

重启服务,遇到的问题:

nginx: [emerg] listen() to 0.0.0.0:1935, backlog 511 failed (98: Address already in use)
......
nginx: [emerg] listen() to 0.0.0.0:1935, backlog 511 failed (98: Address already in use)
nginx: [emerg] still could not bind()

这是因为端口被占用,查看一下是否被占用:

sudo netstat -ntpl

当发现哪个线程被占用时,就kill哪个id, 或者根据没有进程id的时候,就需要单独kill掉端口。

sudo kill PID  // (PID是线程ID)

或者 sudo fuser -k 1935/tcp  // 按照端口号把进程干掉

然后就可以重启服务器了:sudo ./nginx

打开浏览器,http://192.168.87.6, 可以看到成功了!

 

你可能感兴趣的:(RTMP,ffmpeg音视频开发)