一、环境和工具
  1. ubuntu 14.04 desktop
  • 不用server的原因是一部分的演示用到了linux视频播放和直播软件,自己还要装桌面,麻烦。
  • 不建议使用 最新的16TLS,我一开始就用它来做的,但是各种坑,因为很多包都被废弃或者必须降级
 
  1. Nginx1.8.1
  • 这个是我之前装的版本,版本没什么大的影响
  • 我是源代码编译安装的,不建议用 apt-get install nginx
  1. nginx-rtmp-module
  1. 直播肯定用大名鼎鼎的OBS
  1. 观看目前只是用客户端观看,使用的是VLC media player
 
 
二、安装Ngnix
 
 
1、安装各种依赖包
 
$ apt-get install openssl libssl-dev libpcre3 libpcre3-dev
 
yum install -y pcre-devel zlib-devel openssl openssl-devel
 
2、编辑安装nginx与rtmp-module
 
nginx和nginx-rtmp-module是一起编译安装的。
 
编译安装Nginx
 
#注意nginx-rtmp-module-master的路径
$ ./configure --add-module=../nginx-rtmp-module-master --prefix=/opt/nginx --with-http_ssl_module
$ make
$ make install
 
 
sbin/nginx --options
 
三、配置直播服务器
 
所有的配置都基于 nginx-rtmp-module 的官方文档
 
 
因为我们这里只考虑直播,因此点播就不在记录了。
 
关于视频点播服务器的配置可以查看上面作者的文章:[http://blog.csdn.net/kingroc/article/details/50839994] [9]
 
视频点播服务器和视频直播的不同我想不需要说明,一个实时推流,一个是也是播放视频流,但是是基于文件进行的。点播无非是通过播放某服务器上的文件进行推流,从而能够观看,而直播是有专门推流客户端进行实时推流。
 
我把我的nginx.conf的配置贴出来,需要注意的就是我监听的是一个域名,而不是ip,因为域名我是为了在局域网使用。
  1. 我的ubuntu IP是 192.168.124.129,hosts文件将rtmp-server指向了这个ip。
  2. 同时windows的hosts文件我也改过,同样将rtmp-server指向了192.168.124.129,这样子好处是,很轻松在windows上进行推流和观看
  3. rtmp上最重要的配置就是 push rtmp://rtmp-server/live;(详细查看下面注释)
 
#配置RTMP,这个配置格式在github的readme上有详细说明 rtmp { server { listen 1935; #服务端口--默认 chunk_size 4096; #数据传输块的大小--默认
#设置直播的application名称是 live application live{ live on; #live on表示开启直播模式 }
 
#设置推流的应用名称 application push{ live on; #开启直播 push rtmp://rtmp-server/live; #推流到上面的直播应用 } } }
如果打算弄多个频道的直播就可以live_cctv1、live_cctv2名字任意。
 
 
#下面的server是在http的一级配置标签下的 #上面的注释对懂nginx的人是废话,但是如果你不熟悉nginx,建议认真看看 http{ ...# 这里有一些其他的配置 server { listen 80; #端口 server_name rtmp-server;#设置http服务器监听的域名 hosts中配置了 #下面两个是加上去的,用来配置直播的http访问 #具体的意思可以在github的文档中查看 location /stat { rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { #注意这里的路径不能错误,直接写绝对路径就可以 root /usr/local/nginx-rtmp-module-master/; 也可以把这个文件复制到html目录下,不然有可能因为权限打不开 } location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
 
 
配置完之后,需要重新启动nginx
 
 
 
然后在浏览器输入 http://rtmp-server/stat ,stat就是上面server中配置的名称
 
如果能看到下面图片的内容,则证明配置没有问题,一般没啥问题,我是一次就成功的。如果无法访问,请关闭防火墙以及查看hosts文件等等。
 
点播配置
rtmp { #RTMP服务 server { listen 1935; #//服务端口 chunk_size 4096; #//数据传输块的大小 application vod { play /opt/media/vod; #//视频文件存放位置。 } } }
可以在上面目录放一个文件,如 starRTC.mp4
则打开地址为 rtmp://localhost/vod/starRTC.mp4 
 
点播不使用RTMP插件nginx自身也是可以实现点播服务的。那就是配置location部分,由于下面我们要配置直播和回看功能所以选用了RTMP服务。
 
四、进行直播,推流
 
下面是在windows上进行直播,
在linux下直播和观看当然也没有任何的问题:
 
  1. 在linux上安装obs直播(需要ffmpeg):http://blog.csdn.net/kingroc/article/details/50829213
  2. 在linux上使用OBS:http://blog.csdn.net/kingroc/article/details/50839994#t4
 
1、下载OBS并进行安装
 
2、使用OBS直播
 
打开之后,在来源那里点击加号,选择一个来源,比如我选择了摄像头,
 
选择文件可以:
 
 
3、配置串流服务
  1. 点击【设置】
  2. 选择【串流】
  3. 串流类型选择【自定义流媒体服务器】
  4. URL填写我们上面配置的push地址【rtmp://rtmp-server/push】
  5. 密钥没有配置,不需要填写。
  6. 【完成】
  7. 【开始串流】
 
 
 
FFmpeg 推流
循环推流:
ffmpeg -threads 2 -re -fflags +genpts -stream_loop -1 -i /mnt/test.mp4 -c:v copy -c:a aac -f flv rtmp://172.2.8.31:1935/live/test2
 
-re : 表示使用文件的原始帧率进行读取,因为ffmpeg读取视频帧的速度很快,如果不使用这个参数,ffmpeg可以在很短时间就把video.mp4中的视频帧全部读取完并进行推流,这样就无法体现出视频播放的效果了。官方文档中对这个参数的解释是:
-re (input)
Read input at native frame rate. Mainly used to simulate a grab device, or live input stream (e.g. when reading from a file). Should not be used with actual grab devices or live input streams (where it can cause packet loss). By default ffmpeg attempts to read the input(s) as fast as possible. This option will slow down the reading of the input(s) to the native frame rate of the input(s). It is useful for real-time output (e.g. live streaming).
 
 
ffmpeg -y -re -fflags +genpts -stream_loop -1 -probesize 1280 -i test.mp4 -c copy -f flv rtmp_url, 加黄色选项后重复播放时不会卡,会比较连贯一些。
 
 
五、观看直播
 
服务器有没有接收到呢?打开我的服务器地址“http://localhost/stat”查看一下 ,
 
直播使用VLC进行观看,其实很简单就是填一个链接就OK。
  1. 打开VLC media player,
  2. 选择【媒体】->【网络串流】
  3. 在地址输入:rtmp://rtmp-server/live(之前配置的live的地址)
  4. 确认后即可观看
 
或者用: ffplay rtmp://localhost/videotest
实时回看
如果直播服务能够把节目录制在本地,就可以直接回看先前的节目了
rtmp配置部分:
application live { live on; hls on; #这个参数把直播服务器改造成实时回放服务器。 wait_key on; #对视频切片进行保护,这样就不会产生马赛克了。 hls_path /opt/video/hls; #切片视频文件存放位置。 hls_fragment 10s; #每个视频切片的时长。 hls_playlist_length 60s; #总共可以回看的事件,这里设置的是1分钟。 hls_continuous on; #连续模式。 hls_cleanup on; #对多余的切片进行删除。 hls_nested on; #嵌套模式。 }
http部分
location /stat.xsl { root /usr/local/nginx/nginx-rtmp-module/; } location /live { #这里也是需要添加的字段。 types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } alias /opt/video/hls; expires -1; add_header Cache-Control no-cache; }
 
或
application myapp {
live on;
}
application hls {
live on;
hls on;
hls_path /tmp/hls;
}
 
 
由于这次nginx需要向服务器写切片视频文件,但nginx又没有给nginx指定用户名只能走默认的nobody用户和nogroup用户组,其实就是没有组。所以需要对写入的目录做增大权限的修改。 chmod -R 777 /opt/video/hls
六、问题
 
这个只是实现了推流然后能观看,依旧有很多问题。
  1. 在windows上直播观看延迟大约在5-10秒,如果非局域网这个速度没法看。
  2. 现在所有人只要填写推流地址,就能进行播放和查看,没有权限控制,虽然rtmp本身对ip有一个策略机制可以配置,但是并没有什么实际的用处,需要结合程序实现控制,也是后面需要实现的功能
  3. 目前还没有考虑网页上的观看,网页上考虑使用html5流媒体播放器,结合hls协议实现。
 
nginx配合ffmpeg做流媒体服务器的原理是:nginx通过rtmp模块提供rtmp服务,ffmpeg推送一个rtmp流到nginx,然后客户端通过访问nginx来收看实时视频流。HLS也是差不多的原理,只是最终客户端是通过HTTP协议来访问的,但是ffmpeg推送流仍然是rtmp的。
 
 
我的直播部分配置文件 只配置了rtmp和 http统计的部分,用的 rtmp://localhost/live/star就可以播放
 
 

利用Nginx搭建RTMP视频直播,点播服务器,ffmpeg推流,回看的更多相关文章

  1. 利用nginx搭建RTMP视频点播、直播、HLS服务器(转)

    开发环境 Ubuntu 14.04 server nginx-1.8.1 nginx-rtmp-module nginx的服务器的搭建 安装nginx的依赖库 sudo apt-get update ...

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

    开发环境 Ubuntu 14.04 server nginx-1.8.1 nginx-rtmp-module nginx的服务器的搭建 安装nginx的依赖库 sudo apt-get update ...

  3. 使用ckplayer搭建rtmp视频直播应用

    视频直播才有的是RTMP协议进行视频实时流传输,在这里我们用到的软件都是 adobe 公司的一个是:Flash Media Server4 另一个是flash media live encoder 这 ...

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

    一.开发环境 Nginx地址:  http://nginx.org/download/nginx-1.14.2.tar.gz Nginx-rtmp-module地址: https://github.c ...

  5. 搭建rtmp直播流服务之1:使用nginx搭建rtmp直播流服务器(nginx-rtmp模块的安装以及rtmp直播流配置)

    欢迎大家积极开心的加入讨论群 群号:371249677 (点击这里进群) 一.方案简要 首先通过对开发方案的仔细研究(实时监控.流媒体.直播流方案的数据源-->协议转换-->服务器--&g ...

  6. 利用Nginx搭建http和rtmp协议的流媒体服务器[转]

    利用nginx搭建http和rtmp协议的流媒体服务器 实验目的:让Nginx支持flv和mp4格式文件,同时支持Rtmp协议:同时打开rtmp的hls功能资料:HTTPLive Streaming( ...

  7. nginx视频直播/点播服务干货分享

    一.ubuntu14.04安装nginx及nginx_rtmp_module扩展 nginx根据是否已安装和安装的方式不同,有一下三种方式安装及扩展安装. 1.全新安装nginx和nginx_rtmp ...

  8. windows环境下基于nginx搭建rtmp服务器

    基于nginx搭建rtmp服务器需要引入rtmp模块,引入之后需重新编译nginx linux环境几个命令行就能实现编译,笔者未尝试,网上有很多教程. windows环境还需要安装一系列的编译环境,例 ...

  9. 利用 nodeJS 搭建一个简单的Web服务器(转)

    下面的代码演示如何利用 nodeJS 搭建一个简单的Web服务器: 1. 文件 WebServer.js: //-------------------------------------------- ...

随机推荐

  1. Android学习系列(16)--App列表之圆角ListView

    有些东西看多了,就厌烦了:extjs对我这种感觉最为强烈.甚至,有时觉得设计之殇是审美疲劳.直角看多了,就想看看圆角,不知何时,这几年刮起了一阵阵的圆角设计风:CSS新标准纳入圆角元素,iphone中 ...

  2. RabbitMQ 安装和监控[原,转]

    在Windows上安装Rabbit MQ 指南,最好的是这篇<Rabbit MQ Windows Installation guide>,其中还包括了使用.NET RabbitMQ.Cli ...

  3. Android 中日期对话框的应用

    import java.util.Calendar; import android.widget.DatePicker; import android.app.DatePickerDialog; // ...

  4. WebDav的java客户端开发包:sardine

    最近需要对WebDav服务器进行操作,查找了一下,基于java的开发包主要有这几个: slide Jackrabbit sardine webdavclient4j 其中slide是apache的一个 ...

  5. Storm 简单介绍

    Nimbus :负责资源分配和任务调度, 把任务相关的元信息写入Zookeeper 对应文件夹. Supervisor :负责接受nimbus 分配的任务,启动和停止属于自己管理的worker 进程. ...

  6. C#实现相似QQ的隐藏浮动窗口、消息闪动

    功能简单介绍 当语音客服系统登录成功进入主界面时,本聊天工具将会自己主动隐藏在左下角位置,当鼠标移动到左下角时,自己主动弹出,当鼠标移开聊天窗口时,自己主动隐藏.假设想让聊天窗口固定在桌面.仅仅要拖动 ...

  7. 转 MySQL中的行级锁,表级锁,页级锁

      对mysql乐观锁.悲观锁.共享锁.排它锁.行锁.表锁概念的理解 转载. https://blog.csdn.net/puhaiyang/article/details/72284702 实验环境 ...

  8. mark 百度Echarts统计图表

    mark http://git.oschina.net/seeyoui/kensite_cms/blob/master/src/main/java/com/seeyoui/kensite/framew ...

  9. 如何判断SCI期刊投稿难易度和审稿周期

    如何判断SCI期刊投稿难易度和审稿周期 要发SCI论文,前提当然是必须有一篇写好的英文论文,SCI都是英文的杂志,这个大家应该都懂的     首先谈谈投稿难易程度很多人似乎都一种误解,认为拒稿率高的杂 ...

  10. 关于使用REST API

    设计REST API的请求处理部分 REST API功能 通常, 我们希望借助REST API完成以下操作 - 创建一个新记录 - 读取一个list的记录 - 读取指定的记录 - 更新指定记录 - 删 ...