Ubuntu 18.04下配置带RTMP模块的Nginx以启用MP3音频
以下是一步步排查和解决的方案:
1. 检查Nginx RTMP配置
打开Nginx的RTMP配置文件(通常是/etc/nginx/nginx.conf或单独的rtmp.conf),确认application块配置正确,无需额外限制音频编码,但要确保直播模式开启:
rtmp { server { listen 1935; chunk_size 4096; application live { live on; record off; # 按需开启录制功能 } } }
注意:RTMP原生支持MP3编码,若配置中手动设置了audio_codec,避免误设为仅支持AAC。
2. 修正推流端的编码与封装
如果使用FFmpeg推流,必须强制输出FLV封装(RTMP标准依赖格式),并明确指定音频编码为MP3。错误的推流命令会导致音频无法被RTMP识别,正确命令示例:
ffmpeg -i 你的输入文件.mp4 -c:v libx264 -preset fast -crf 23 -c:a libmp3lame -ar 44100 -ac 2 -b:a 128k -f flv rtmp://localhost/live/你的流名
关键参数说明:
-f flv:强制输出FLV封装,RTMP必须依赖此格式-c:a libmp3lame:指定音频编码为MP3-ar 44100 -ac 2:设置通用采样率和声道数,提升兼容性
3. 验证流的音频完整性
用FFprobe拉取流信息,确认音频流是否被正确推送:
ffprobe rtmp://localhost/live/你的流名
查看输出中是否存在Stream #0:1(音频流)条目,且包含Audio: mp3字样。如果没有音频流,说明推流端未正确输出音频;如果有音频流但无声音,排查播放器或Nginx转发问题。
4. 排查Nginx错误日志
查看Nginx错误日志,定位RTMP相关报错:
tail -f /var/log/nginx/error.log
若日志中出现audio codec not supported或invalid audio packet,说明推流的音频编码/封装不符合RTMP要求,回到步骤2修正推流命令。
5. 确认Nginx RTMP模块兼容性
检查Nginx编译参数,确保RTMP模块已正确安装:
nginx -V
输出需包含--with-rtmp-module。若未显示,需重新编译Nginx并添加RTMP模块:
# 安装编译依赖 sudo apt-get install build-essential libpcre3 libpcre3-dev libssl-dev zlib1g-dev # 下载源码 wget http://nginx.org/download/nginx-1.18.0.tar.gz wget https://github.com/arut/nginx-rtmp-module/archive/master.zip unzip master.zip tar -zxvf nginx-1.18.0.tar.gz cd nginx-1.18.0 # 编译安装 ./configure --prefix=/usr/local/nginx --with-rtmp-module=../nginx-rtmp-module-master make && sudo make install
(Ubuntu 18.04默认Nginx包通常不带RTMP模块,手动编译可确保兼容性)
6. 测试播放器兼容性
用FFplay直接拉流测试,排除前端播放器问题:
ffplay rtmp://localhost/live/你的流名
若FFplay能正常播放音频,说明问题出在前端播放器;若FFplay也无声音,回到前面步骤重新排查推流和Nginx配置。
内容的提问来源于stack exchange,提问作者mastersam

