linux+nginx安装流媒体服务器
安装PCRE库
首先从剑桥大学计算机科学与技术系的FTP服务器下载PCRE库:
wget ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/pcre-8.40.tar.gz
解压和编译安装:
tar -xzvf pcre-8.40.tar.gz
cd pcre-8.40
./configure
make
make install
或者
yum install -y pcre pcre-devel
安装Nginx
参考来自博客的教程Nginx安装 安装Nginx。
下载Nginx流媒体所需的nginx-rtmp-module模块,请自行下载,按以下步骤操作:
链接:http://pan.baidu.com/s/1nv9E45b 密码:1pr8
mv nginx-rtmp-module-master.zip nginx-rtmp-module.zip
unzip nginx-rtmp-module.zip
解压后将文件夹重命名为相应的模块名称,例如“nginx-rtmp-module”。
接下来,在Nginx源代码目录下配置并编译Nginx,假设模块路径为/data/soft/nginx-rtmp-module
:
cd /path/to/nginx-source-directory
./configure --add-module=/data/soft/nginx-rtmp-module
make
如果之前已安装过Nginx且不想使用make install
,则可以手动替换新编译好的Nginx可执行文件,确保先停止旧版Nginx服务:
./nginx -s quit
cp /home/liwei/nginx-1.8.0/objs/nginx /usr/local/nginx/sbin/
添加Nginx RTMP支持。
编辑Nginx配置文件以包含RTMP相关的server块,指定一个如/data/rmtp/play
的目录作为存储位置。
同时创建日志文件夹,并初始化日志文件:
mkdir -p /usr/local/nginx/logs
touch /usr/local/nginx/logs/error.log
touch /usr/local/nginx/logs/access.log
mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/error.log logs/
cd /usr/local/nginx/sbin/
./nginx
安装FFmpeg
安装ffmpeg :官方下载链接
或者
链接:http://pan.baidu.com/s/1boWdoRX 密码:a2bf
从FFmpeg官网下载FFmpeg源码包,或使用给出的百度网盘链接下载并解压:
tar jxf ffmpeg-3.2.4.tar.bz2
cd ffmpeg-3.2.4
配置FFmpeg并安装至/usr/local/ffmpeg
:
./configure --disable-yasm --enable-shared --prefix=/usr/local/ffmpeg
make
make install
设置环境变量并在全局生效(编辑/etc/profile
文件):
vim /etc/profile
添加以下内容:
export FFMPEG_HOME=/data/soft/ffmpeg
export PATH=$FFMPEG_HOME/bin:$PATH
source /etc/profile # 刷新环境变量使其立即生效
实现推流(Pushing Stream)
例如rtmp://192.168.1.151:1935/live
,要将本地一个名为test.mp4
的视频文件推送到服务器:
# 使用FFmpeg向服务器推流
cd /data/soft/ffmpeg/bin
./ffmpeg -re -i /data/test.mp4 -c copy -f flv rtmp://192.168.1.151:1935/live/mystream
-re
参数表示以接近实时的速度读取输入文件。-i test.mp4
是输入文件路径。-c copy
表示尽可能直接复制编码格式,避免重新编码(如果原始视频编码格式已被服务器支持)。-f flv
指定输出格式为FLV,这是RTMP协议常用的封装格式。rtmp://192.168.1.151:1935/live/mystream
是推流目标URL,其中live
通常是服务器上的应用名,mystream
是流的名称。
实现拉流(Pulling/Pulling Stream)
要从服务器拉取刚才推上去的流并播放,同样可以使用FFmpeg结合ffplay工具或者其他支持RTMP协议的播放器(如VLC)。
使用FFplay拉流播放:
ffplay rtmp://192.168.1.151:1935/live/mystream
如果你想要将拉下来的流保存为文件或者转码后再分发,可以这样操作:
# 将拉流内容保存为新的MP4文件
ffmpeg -i rtmp://192.168.1.151:1935/live/mystream -c copy output.mp4
注意事项:
- 确保服务器配置正确,允许推流和拉流请求。
- 确认RTMP服务器的具体URL结构和所需的认证信息(如有必要)。
- 不同的流媒体服务器可能会有不同的API或控制台管理界面用于创建和管理流。
- 对于动态生成的流,比如来自摄像头或麦克风的实时音视频流,需要调用正确的设备作为输入源,并且可能需要额外的参数来进行音频和视频的同步和处理。
如果遇到动态链接库加载问题,如error while loading shared libraries: libavdevice.so.52
,解决办法是:
- 更新系统共享库缓存:
echo "/usr/local/ffmpeg/lib" >> /etc/ld.so.conf
ldconfig -v
- 调整相关目录权限:
chmod -R 777 /usr/local/ffmpeg/lib
使用Java推流和拉流(自行百度)
在Java中实现推流和拉流可以通过集成第三方库,如Red5 Client、JavaCV(基于FFmpeg的Java包装)、Xuggler等来完成。
最后,再次尝试运行FFmpeg命令推送流至Nginx RTMP服务器。当所有步骤顺利完成且无错误提示时,表明Nginx与FFmpeg均已成功安装并配置,可以进行实时音视频流传输。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 实操Deepseek接入个人知识库
· CSnakes vs Python.NET:高效嵌入与灵活互通的跨语言方案对比
· Plotly.NET 一个为 .NET 打造的强大开源交互式图表库
· 【.NET】调用本地 Deepseek 模型