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

开发环境

nginx的服务器的搭建

安装nginx的依赖库html

sudo apt-get update sudo apt-get install libpcre3 libpcre3-dev sudo apt-get install openssl libssl-dev
  • 1
  • 2
  • 3

配置并编译nginx 
使用nginx的默认配置,添加nginx的rtmp模块。 
这里写图片描述nginx

./configure --add-module=../nginx-rtmp-module-master make sudo make install
  • 1
  • 2
  • 3

运行测试nginx 
进入安装目录/usr/local/nginx,运行命令./sbin/nginxgit

注意:之后全部的命令都在/usr/local/nginx目录运行,也nginx配置文件的相对目录。github

打开浏览器在地址栏输入:localhost。若是,以下图显示那样就证实您的nginx服务器搭建成功了。 
这里写图片描述ubuntu

点播视频服务器的配置

经过上一步nginx服务器已经搭建完成,而后咱们就能够开启一个视频点播的服务了。打开配置文件nginx.conf,添加RTMP的配置。浏览器

worker_processes  1; events { worker_connections 1024; } rtmp { #RTMP服务 server { listen 1935; #//服务端口 chunk_size 4096; #//数据传输块的大小 application vod { play /opt/vide/vod; #//视频文件存放位置。 } } } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

配置目录/opt/video/vod为存放视频文件的位置了,那咱们就往里面放一个文件吧。我放了一个qq.mp4文件。这里写图片描述 
文件放好以后,那就让咱们从新启动一下nginx服务器

sudo ./sbin/nginx -s reloadapp

打开视频播放软件选用的是VLC media-> open network stream…. 
如图填写咱们要点播的节目地址rtmp://localhost/vod/qq.mp4 如图: 
这里写图片描述
点击play就能够播放了。 
固然点播不使用RTMP插件nginx自身也是能够实现点播服务的。那就是配置location部分,因为下面咱们要配置直播和回看功能因此选用了RTMP服务。ide

直播视频服务器的配置

接着咱们就在点播服务器配置文件的基础之上添加直播服务器的配置。一共2个位置,第一处就是给RTMP服务添加一个application这个名字能够任意起,也能够起多个名字,因为是直播我就叫作它live吧,若是打算弄多个频道的直播就能够live_cctv一、live_cctv2名字任意。第二处就是添加两个location字段,字段的内容请直接看文件吧。测试

worker_processes  1; events { worker_connections 1024; } rtmp { server { listen 1935; chunk_size 4096; application vod { play /opt/video/vod; } application live{ #第一处添加的直播字段 live on; } } } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; server { listen 80; server_name localhost; location /stat { #第二处添加的location字段。 rtmp_stat all; rtmp_stat_stylesheet stat.xsl; } location /stat.xsl { #第二处添加的location字段。 root /usr/local/nginx/nginx-rtmp-module/; } location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52

添加完这两处以后,从新启动nginx打开浏览器看看,是否有以下图显示: 
这里写图片描述
有没有看到红框框的live字样呢?若是能够显示出来,证实你的配置生效了。

还等什么让咱们推送一个节目看看(其实专业词叫录制,后面将会使用录制这个词。)吧。

此次推送我使用的是OBS(Open Broadcaster Software)有关它的安装请参考先前我写的Ubuntu安装OBS(Open Broadcaster Software)后面的博客里我会给你们介绍如何使用手机采集视频而且推送到服务器上。

配置OBS如图:

这里写图片描述

  1. 点击红圈添加“Media Source”,会弹出一个框框,里面的内容就按照图片显示配置就能够了。点击“OK”就能在你的屏幕上播放了。
  2. 配置节目的输出流如图所示: 这里写图片描述首先点击红圈“setting”进入设置界面。记得要正确填写要录制的服务器路径啊。配置好就能够点击OK了。退出后点击蓝圈,就开始录制节目了。
  3. 查看咱们的了录制的节目,服务器有没有接收到呢?打开个人服务器地址“http://localhost/stat”查看一下 ,你的显示是否和个人相同呢?若是相同证实服务器已经接收到了录制的节目,客户端能够进行播放了。 
    这里写图片描述
    播放的地址就是“rtmp://localhost/live/test”,若是您本地有支持rtmp协议的播放器就能够试试了。最后奉上一张观看直播的屏幕截图。 
    这里写图片描述

实时回看视频服务器的配置

咱们想想若是直播服务可以把节目录制在本地,咱们不就能够直接进行回看先前的节目了吗?回看一分钟、一小时甚至一天的。想一想就兴奋不用写代码有现成的可使用。怎么用呢?继续看nginx的配置吧。

worker_processes  1; events { worker_connections 1024; } rtmp { server { listen 1935; chunk_size 4096; application vod { play /opt/video/vod; } 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 { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; 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/; } location /live { #这里也是须要添加的字段。 types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } alias /opt/video/hls; expires -1; add_header Cache-Control no-cache; } location / { root html; index index.html index.htm; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68

1.添加完成后须要从新启动nginx,因为此次nginx须要向服务器写切片视频文件,但nginx我又没有给nginx指定用户名只能走默认的nobody用户和nogroup用户组,其实就是没有组。因此我对须要写入的目录作了增大权限的修改。 
以下图,这样作就是为了不因为权限问题而没法写文件。 
这里写图片描述 
2.如何给服务器录制视频,在上一节已经说过,这里就再也不说了。 
3.查看视频文件是否真的录制上没有,继续看图: 
这里写图片描述 
已经产生切片视频文件了。其中还有一个index.m3u8。 
4.播放视频,此次但是http开头的了,“http://localhost/live/test/index.m3u8”。 
5.已经能够播放了,如何回看呢?其实这个index.m3u8文件仅仅是目录。想回看那个就播放那个.ts文件就能够了。

到此已经结束。若有问题欢迎留言。

相关文章
相关标签/搜索