NGINX RTMP模块HLS_Variant功能失效,ffmpeg转流fname为空如何解决
问题排查&修复方案
1. 解决$name变量为空问题
- 首先确认OBS推流地址格式合规:需填写为
rtmp://服务器IP/Test/自定义流名,不能仅填到Testapplication层级,$name变量的取值就是你填写的自定义流名部分 - 临时注释掉
Testapplication下的on_publish、on_publish_done两行配置,重启nginx测试,排除认证脚本异常导致的参数丢失:若认证脚本未返回HTTP 200状态码,nginx-rtmp会中断推流参数解析,导致$name为空 - 在最外层
rtmp配置块中添加exec_options on;,开启exec类指令的变量解析能力,多数默认编译的nginx-rtmp模块默认关闭此开关,会导致变量无法正常解析
2. 解决替换固定流名后ffmpeg不启动问题
- 检查执行权限:确认nginx运行用户有权限调用
/usr/local/bin/ffmpeg,且有权限写入/tmp/Log.log,可执行以下命令验证:# 替换www为你的nginx运行用户 sudo -u www /usr/local/bin/ffmpeg -version sudo chmod 766 /tmp/Log.log - 手动执行完整ffmpeg命令(将
$name替换为实际推流名),排查参数错误:若推流无音频,需在ffmpeg参数中添加-an跳过音频编码,避免编码报错导致进程直接退出
3. HLS Variant配置补充修正
当前配置缺少分辨率参数,部分播放器无法正常识别多码率列表,可调整为:
application Z006 { live on; record off; hls on; hls_path /usr/local/www/stream/tmp/hls0; hls_nested on; # 新增切片配置降低延迟 hls_fragment 2s; hls_playlist_length 10s; hls_variant _low BANDWIDTH=288000 RESOLUTION=480x270; hls_variant _mid BANDWIDTH=832000 RESOLUTION=720x405; hls_variant _high BANDWIDTH=1152000 RESOLUTION=960x540; hls_variant _higher BANDWIDTH=2048000 RESOLUTION=1280x720; hls_variant _src BANDWIDTH=4096000; }
内容的提问来源于stack exchange,提问作者Dropye
相关产品推荐
相关产品推荐

