在现代网络直播和视频流服务中,Nginx作为高性能的HTTP服务器,结合RTMP(Real-Time Messaging Protocol)和nginx-http-flv-module,可以实现流媒体的传输与播放。本文将介绍如何在CentOS 7上搭建Nginx + RTMP + nginx-http-flv-module环境。
一、环境准备
- 更新系统软件包
打开终端,执行以下命令更新系统的软件包:
sudo yum update -y
- 安装基础依赖
安装开发工具和开发库,以支持后续的Nginx编译:
sudo yum groupinstall "Development Tools" -y
sudo yum install pcre pcre-devel zlib zlib-devel openssl openssl-devel -y
二、安装Nginx和RTMP模块
- 下载Nginx源代码
访问nginx官网下载最新的Nginx版本。在本文中,我们以1.21.3版本为例:
cd /usr/local/src
sudo wget http://nginx.org/download/nginx-1.21.3.tar.gz
- 解压Nginx源代码
sudo tar -zxvf nginx-1.21.3.tar.gz
- 下载RTMP模块
使用Git克隆RTMP模块的代码库:
sudo git clone https://github.com/arut/nginx-rtmp-module.git
- 编译Nginx并添加RTMP模块
进入Nginx源代码目录,执行以下命令编译Nginx:
cd nginx-1.21.3
sudo ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module
sudo make
sudo make install
Nginx默认安装路径为/usr/local/nginx
。
三、配置Nginx
- 编辑Nginx配置文件
打开Nginx配置文件,通常是/usr/local/nginx/conf/nginx.conf
,进行如下配置:
# 在http部分之前添加
rtmp {
server {
listen 1935; # RTMP端口
chunk_size 4096;
application live {
live on;
record off; # 不记录流,若需要可以设置为 'record all;'
}
}
}
# http部分
http {
...
server {
listen 8080; # HTTP FLV播放端口
location /live {
flv;
proxy_pass http://localhost:1935/live;
}
}
}
- 启动Nginx
使用以下命令启动Nginx:
sudo /usr/local/nginx/sbin/nginx
如果需要重新加载配置,请使用:
sudo /usr/local/nginx/sbin/nginx -s reload
四、推流与播放
- 推流
使用推流工具(如OBS Studio或FFmpeg)进行流媒体推送。以下是使用FFmpeg的推流示例:
ffmpeg -re -i input.mp4 -c:v libx264 -preset veryfast -maxrate 1000k -bufsize 2000k -c:a aac -b:a 128k -f flv rtmp://your_server_ip/live/stream
- 播放
在浏览器中播放流媒体,可以通过以下HTML代码进行播放(使用flv.js等库):
<!DOCTYPE html>
<html lang="zh">
<head>
<meta charset="UTF-8">
<title>直播测试</title>
<script src="https://cdn.jsdelivr.net/npm/flv.js/dist/flv.min.js"></script>
</head>
<body>
<video id="videoElement" controls></video>
<script>
var video = document.getElementById('videoElement');
if (flvjs.isSupported()) {
var flvPlayer = flvjs.createMediaPlayer({
type: 'flv',
url: 'http://your_server_ip:8080/live/stream.flv'
});
flvPlayer.attachMediaElement(video);
flvPlayer.load();
flvPlayer.play();
}
</script>
</body>
</html>
五、总结
通过以上步骤,我们在CentOS 7上成功搭建了一个基于Nginx + RTMP + nginx-http-flv-module的流媒体服务。这个平台可以用于实时视频直播、录播回放等场景。在实际应用中,还可以通过SSL/TLS等方式进一步增强安全性,以满足更高的直播需求。