引言
本文将通过nginx-rtmp-module搭建流媒体服务来帮助入门者了解基本的流媒体服务开发流程以及可以为架构师设计高可用可扩展的流媒体服务框架提供灵感。
1.安装与构建
nginx下载地址http://nginx.org/en/download.html解压后命令启动nginx.exe -c conf/nginx.conf ,在浏览器输入配置的地址如出现欢迎界面则表示nginx服务器安装成功,使用命令构建nginx-rtmp-module服务:
./configure --add-module=/path/to/nginx-rtmp-module
./configure --add-module=/path/to/nginx-rtmp-module --with-http_ssl_module
windows版本也可以通过第三方构建平台获得已经集成nginx-rtmp-module模块的nginx资源包,附地址如下:http://nginx-win.ecsds.eu/download/
2.配置与扩展
配置文件如下:
worker_processes 2;
events
{
worker_connections 8192;
}
# http服务器配置
http
{
server
{
listen 8080;
# 启动rtmp服务
location /stat
{
rtmp_stat all;
rtmp_stat_stylesheet stat.xsl;
}
# 启动rtmp服务
location /stat.xsl
{
root conf;
}
# hls拉流服务配置
location /hls
{
types
{
application/vnd.apple.mpegurl m3u8;
video/mp2t ts;
}
root temp;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
# flv拉流服务配置
location /flv
{
types
{
video/x-flv flv;
}
root temp;
add_header Cache-Control no-cache;
add_header Access-Control-Allow-Origin *;
}
}
}
# rtmp服务器配置
rtmp
{
server
{
listen 1935;
chunk_size 4000;
# 推流地址:rtmp://localhost:1935/hlsroom001 拉流地址:http://localhost:8080/hls/hlsroom001/index.m3u8
application hlsroom001
{
live on;
hls on;
hls_path temp/hls/hlsroom001;
hls_nested on;
}
# 拉流地址:rtmp://localhost:1935/flvroom001
application flvroom001
{
live on;
record all;
record_path temp/flv;
record_suffix flvroom001.flv;
}
# 拉流地址:rtmp://localhost:1935/transroom001
application transroom001
{
live on;
pull rtmp://58.200.131.2:1935/livetv/cctv5;
}
# 将本地摄像头采集的视频通过ffmpeg转码后推送到指定的流媒体服务
# 推流地址rtmp://localhost:1935/webcam
application webcam
{
live on;
exec_static ffmpeg -f video4linux2 -i /dev/video0 -c:v libx264 -an -f flv rtmp://localhost:1935/webcamroom;
}
# 拉流地址rtmp://localhost:1935/webcamroom
application webcamroom
{
live on;
record all;
record_path temp/flv;
record_suffix webcamroom.flv;
}
}
}
nginx-rtmp-module通过配置文件提供了外挂程序的接口,可以通过外挂ffmpeg.exe实现视频编码的转码功能,在上面的配置文件中有相关的案例可以参考,这种设计思想给流媒体服务的可扩展性提供了无限的可能,我们可以通过自定义程序实现特定的功能,使业务逻辑模块和主程序完全隔离。
附录