Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒体服务器.这个流媒体服务器可以支持RTMP和HLS(Live
Http Stream)
nginx配合ffmpeg做流媒体服务器的原理是: nginx通过rtmp模块提供rtmp服务,
ffmpeg推送一个rtmp流到nginx, 然后客户端通过访问nginx来收看实时视频流.
HLS也是差不多的原理,只是最终客户端是通过HTTP协议来访问的,但是ffmpeg推送流仍然是rtmp的.
下面是一款已经集成rtmp模块的windows版本的nginx。下载后,即可直接使用
下载链接:https://github.com/illuspas/nginx-rtmp-win32
1、rtmp端口配置
配置文件在/conf/nginx.conf
RTMP监听 1935 端口,启用live 和hls 两个application
HTTP监听 8080 端口,
- :8080/stat 查看stream状态
- :8080/index.html 为一个直播播放与直播发布测试器
- :8080/vod.html 为一个支持RTMP和HLS点播的测试器
2、启动nginx服务
在dos窗口下运行nginx.exe文件,即启动nginx服务
1)启动任务管理器,key看到nginx.exe进程
2)打开网页输入http://localhot:8080,出现如下画面:
即可说明ngix运行成功
3、rtmp协议介绍
rtmp(Real Time Messaging Protocol)实时消息传送协议是Adobe
Systems公司为Flash播放器和服务器之间音频、视频和数据传输开发的私有协议。
它有三种变种:
- 工作在TCP之上的明文协议,使用端口1935;
- RTMPT封装在HTTP请求之中,可穿越防火墙;
- RTMPS类似RTMPT,但使用的是HTTPS连接;
RTMP协议就像一个用来装数据包的容器,这些数据可以是AMF格式的数据,也可以是FLV中的视/音频数据。一个单一的连接可以通过不同的通道传输多路网络流。这些通道中的包都是按照固定大小的包传输的。
4、ffmpeg采集摄像头数据,编码为H.264,发布RTMP
ffmpeg -f dshow -i video=”PC
Camera” -s 640*480 -aspect 4:3 -r 15 -vcodec flv
flv rtmp://192.168.1.66:1935/live/demo