关闭

使用nginx-rtmp搭建视频直播服务器

标签: nginx-rtmpnginx
739人阅读 评论(4) 收藏 举报

auth:robertkun@163.com

date:2016-06-23

参考文档:

http://blog.csdn.net/redstarofsleep/article/details/45092127
http://blog.csdn.net/cjsafty/article/details/9108587

安装nginx前需要几样准备工作

第一个需要C++编译器,在ubuntu下直接安装g++即可

sudo apt-get install g++

然后,这个版本的nginx默认需要的是pcre和zlib和openssl,分别去这两个官方网站下载最新的版本,我下载的是pcre-8.32.tar.gz,zlib-1.2.8.tar.gz,openssl-1.0.2h.tar.gz

tar -xzvf pcre-8.32.tar.gz
tar -xzvf zlib-1.2.8.tar.gz
tar -xzvf openssl-1.0.2h.tar.gz

我将这些包解压在了/home/robert用户目录下,解压在哪里无所谓

/home/robert/pcre-8.32
/home/robert/zlib-1.2.8
/home/robert/openssl-1.0.2h

然后解压nginx, 解压在了/home/robert用户目录下

tar -xzvf nginx-1.10.1.tar.gz
/home/robert/nginx

解压完后进入解压出来的目录

cd /home/robert/nginx

非常重要的rtmp模块:nginx-rtmp-module,使用github下载:

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

然后执行configure, 这是比较重要的一步

sudo ./configure --prefix=/usr/local/nginx --add-module=/home/robert/nginx-rtmp-module --with-pcre=/home/robert/pcre-8.32 --with-openssl=/home/robert/openssl-1.0.2h --with-zlib=/home/robert/zlib-1.2.8

prefix指定nginx安装的目录,后面两个是前面的两个模块,如果不需要安装这两个模块可以用–without-http_rewrite_module和–without-http_gzip_module
然后就是执行make和make install,如果没有报错的话nginx就安装完成了

sudo make
sudo make install

看一下/usr/local/nginx目录

robert@robert:/usr/local/nginx$ ll
total 48
drwxr-xr-x 12 root   root 4096 6月  22 11:21 ./
drwxr-xr-x 11 root   root 4096 6月  22 11:15 ../
drwx------  2 nobody root 4096 6月  22 11:21 client_body_temp/
drwxr-xr-x  2 root   root 4096 6月  22 17:43 conf/
drwxr-xr-x  2 root   root 4096 6月  22 11:19 conf_bak/ <手动备份>
drwx------  2 nobody root 4096 6月  22 11:21 fastcgi_temp/
drwxr-xr-x  2 root   root 4096 6月  22 17:32 html/
drwxr-xr-x  2 root   root 4096 6月  22 17:43 logs/
lrwxrwxrwx  1 root   root   16 6月  22 11:17 nginx -> /user/sbin/nginx
drwx------  2 nobody root 4096 6月  22 11:21 proxy_temp/
drwxr-xr-x  2 root   root 4096 6月  22 11:15 sbin/
drwx------  2 nobody root 4096 6月  22 11:21 scgi_temp/
drwx------  2 nobody root 4096 6月  22 11:21 uwsgi_temp/

进入sbin目录,执行nginx

sudo ./nginx 启动nginx

查看nginx进程

robert@robert:/usr/local/nginx$ ps aux | grep nginx
root      78775  0.0  0.1  32696  4848 ?        Ss   6月22   0:00 nginx: master process sbin/nginx -c conf/nginx_rtmp.conf
nobody    78776  0.0  0.2  33256  7648 ?        S    6月22   0:00 nginx: worker process
nobody    78777  0.0  0.2  32912  7244 ?        S    6月22   0:00 nginx: cache manager process
robert    79477  0.0  0.0  21292   944 pts/9    S+   09:54   0:00 grep --color=auto nginx

nginx的启动方法

nginx -c conf/nginx_rtmp.conf 使用指定的配置文件启动
nginx -s reload 重启nginx服务
nginx -s stop   停止nginx服务,强制快速结束
nginx -s quit   停止nginx服务,温柔的结束

打开浏览器输入http://ip可看到nginx已经启动的画面

http://192.168.2.48

配置nginx-rtmp模块

修改nginx配置文件,nginx_rtmp.conf

robert@robert:/usr/local/nginx/conf$ cat nginx_rtmp.conf 

#user  nobody;
worker_processes  1;

#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;
}


rtmp {
    server {
        listen 1935;

        application myapp {
            live on;
        }

        application hls {
            live on;
            hls on;
            hls_path /tmp/app;
            hls_fragment 5s;
        }
    }
}

http {
    server {
        listen 8080;

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

        location /stat.xsl {
            root /home/robert/nginx-rtmp-module;
        }

        location /control {
            rtmp_control all;
        }

        location /rtmp-publisher {
            root /home/robert/nginx-rtmp-module/test;
        }

        location /hls {
            types {
                application/vnd.apple.mpegurl m3u8;
                video/mp2t ts;
            }

            alias /tmp/app;
            expires -1;
        }

        location / {
            root /home/robert/nginx-rtmp-module/test/rtmp-publisher;
        }
    }
}

上面配置文件指定了两个application, 一个myapp,一个hls。
myapp来处理flash流,hls来处理m3u8文件,也就是苹果设备上的视频流。

配置好上面的nginx-rtmp-module路径后,重启nginx服务。

服务正常启动后,使用ffmpeg推一个本地视频流到nginx,注意这个本地视频的格式必须是
h264+aac格式的,否则不能正常播放。

向两个application推流:

ffmpeg -re -i s2.mp4 -vcodec copy -acodec copy -f flv rtmp://192.168.2.48/myapp/mystream

ffmpeg -re -i s2.mp4 -vcodec copy -acodec copy -f flv rtmp://192.168.2.48/hls/mystream

hls格式的用于在ios上播放。

修改对应的播放页面

我们在上面配置文件指定了根目录
/home/robert/nginx-rtmp-module/test/rtmp-publisher

查看一下根目录的文件
robert@robert:~/nginx-rtmp-module/test/rtmp-publisher$ ll
total 1664
drwxrwxr-x 2 robert robert    4096 6月  22 17:27 ./
drwxrwxr-x 4 robert robert    4096 6月  22 11:28 ../
-rw-rw-r-- 1 robert robert     618 6月  22 17:18 player.html
-rw-rw-r-- 1 robert robert     313 6月  22 17:00 playhls.html
-rw-rw-r-- 1 robert robert     513 6月  22 17:05 publisher.html
-rw-rw-r-- 1 robert robert     314 6月  22 10:46 README.md
-rw-rw-r-- 1 robert robert    2830 6月  22 10:46 RtmpPlayerLight.mxml
-rw-rw-r-- 1 robert robert   47222 6月  22 10:46 RtmpPlayerLight.swf
-rw-rw-r-- 1 robert robert    2133 6月  22 10:46 RtmpPlayer.mxml
-rw-rw-r-- 1 robert robert   47281 6月  22 10:46 RtmpPlayer.swf
-rw-rw-r-- 1 robert robert    2741 6月  22 10:46 RtmpPublisher.mxml
-rw-rw-r-- 1 robert robert   47496 6月  22 10:46 RtmpPublisher.swf
-rw-rw-r-- 1 robert robert 1507328 6月  22 17:27 s2.mp4
-rw-rw-r-- 1 robert robert   10220 6月  22 10:46 swfobject.js

我们修改一下player.html

<!DOCTYPE html>
<html>
<head>
    <title>RTMP Player</title>
    <script type="text/javascript" src="swfobject.js"></script>
    <script type="text/javascript">
        var flashVars = {
            streamer: 'rtmp://192.168.2.48/myapp',
            file:'mystream'
        };
        var params = {};
        params.allowfullscreen = "false";
        var attributes = {};
        swfobject.embedSWF("RtmpPlayer.swf", "rtmp-publisher", "640", "480", "9.0.0", null, flashVars, params, attributes);
    </script>
</head>
<body>
    <div id="rtmp-publisher">
        <p>Flash not installed</p>
    </div>
</body>
</html>

注意修改文件中这两个语句,这是我们使用ffmpeg推送的地址。
这里把localhost改成了机器ip, 用localhost有不出视频的情况。

streamer: 'rtmp://192.168.2.48/myapp',
file:'mystream'

播放HLS文件

HLS文件对应的Html:

<!DOCTYPE html>
<html>
<head>
    <title>HLS Player</title>
</head>
<body>
<video height="270" width="480" controls>
    <source src="http://server-ip-address:8080/hls/mystream.m3u8" type="application/vnd.apple.mpegurl" />
    <p class="warning">Your browser does not support HTML5 video.</p>
</video>
</body>
</html>

在ipad上播放地址:

http://server-ip-address:8080/hls/mystream.m3u8

打开对应的网址,可以看到实际的效果:

1
0
查看评论

nginx+nginx-rtmp-module+ffmpeg搭建流媒体服务器

Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒体服务器. 这个流媒体服务器可以支持RTMP和HLS(Live Http Stream) 从安装开始...
  • redstarofsleep
  • redstarofsleep
  • 2015-04-17 09:03
  • 25196

使用Nginx-rtmp-module搭建hls直播

HTTP Live Streaming(缩写是 HLS)是一个由苹果公司提出的基于HTTP的流媒体网络传输协议。是苹果公司QuickTime X和iPhone软件系统的一部分。它的工作原理是把整个流分成一个个小的基于HTTP的文件来下载,每次只下载一些。当媒体流正在播放时,客户端可以选择从许多不同的...
  • tao_627
  • tao_627
  • 2014-03-27 10:29
  • 29518

搭建直播服务器,使用nginx与nginx-rtmp-module搭建流媒体服务器;

现在,一起学习一下如何自己搭建一个流媒体服务器吧! 本次搭建流媒体使用的环境是centos 7.0+nginx; 让我们一起开始奇妙的流媒体之旅吧! 1、下载nginx-rtmp-module: nginx-rtmp-module的官方github地址:https://githu...
  • qiandublog
  • qiandublog
  • 2016-11-21 15:52
  • 4134

windows下搭建nginx-rtmp服务器

windows下搭建nginx-rtmp服务器windows下搭建nginx-rtmp服务器 准备工作 安装MinGW 安装Mercurial 安装strawberryperl 安装nasm 下载nginx相关的源码包 编译nginx nginx-rtmp环境搭建 效果测试 最后说明
  • never715
  • never715
  • 2017-07-01 19:59
  • 2780

视频演示-Ubuntu 14搭建Nginx-RTMP流媒体服务器

(草稿版) 视频演示地址:PART1-https://www.bilibili.com/video/av18139213/ 第一步、准备工作 (1)设置远程连接Ubuntu root账户 apt-get install -y openssh-server 编辑vim /etc/ssh/ss...
  • u011298145
  • u011298145
  • 2017-12-24 09:45
  • 200

Nginx与Nginx-rtmp-module搭建RTMP视频直播和点播服务器

开发环境: Ubuntu 16.04.2 LTS nginx-1.8.1 nginx-rtmp-module Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较...
  • DaveBobo
  • DaveBobo
  • 2017-07-07 11:16
  • 1136

使用VLC搭建视频直播服务器

去年我们信息之夜我们进行过视频直播服务,当时我们使用了WMS(Windows Media Server)实现了这个服务,但是编码是微软的WMV,因而像iPhone/Android这样的智能手机无法观看,今天我给大家带来一种更简便的实现方式,并帮助所有平台用户都可以观看。 首先介绍一下,今天我们的工...
  • ituff
  • ituff
  • 2012-11-09 15:34
  • 39767

视频直播点播nginx-rtmp开发手册中文版

转自:http://www.cnblogs.com/zx-admin/p/5783523.html 2016年8月18日12:42:35 参照官方文档https://github.com/arut/nginx-rtmp-module/wiki/Directives 请注意这个是粗翻译版,...
  • kevinw9
  • kevinw9
  • 2016-10-31 18:32
  • 3728

用vlc搭建流媒体服务器

VLC是一种开源的播放器,同时也可以用作流媒体服务器。今天试验了几种搭建流媒体服务器的方法,这里做一个归纳总结。 本文使用的VLC版本为:2.1.5。 服务器平台操作系统:Windows 7 32位 旗舰版(Service Pack 1); 服务器IP地址:10.1.11.21; 客户端平台操作系统...
  • axu82119
  • axu82119
  • 2014-12-03 23:02
  • 2084

VLC搭建RTSP服务器的过程 -测试通过

第一步,打开VLC 第二步:在媒体下拉菜单下!有一个子菜单“串流”如图所示: 点击“串流”子菜单 弹出一个窗口!如下图所示。 添加一个你要串流的本地文件,我刚才传给你的那个长一点的文件。         第...
  • m372897500
  • m372897500
  • 2016-03-17 22:38
  • 5741
    个人资料
    • 访问:719188次
    • 积分:9001
    • 等级:
    • 排名:第2502名
    • 原创:182篇
    • 转载:125篇
    • 译文:1篇
    • 评论:109条
    博客专栏
    初识Qt

    文章:43篇

    阅读:148340
    文章分类
    最新评论