Nginx RTMP服务中执行ffmpeg转码Bash脚本失败求助
问题分析与解决
你的Nginx RTMP配置不生效的核心原因是**exec指令的位置错误**——它被放在了application live的代码块外部,Nginx无法识别该指令属于live应用,因此不会触发脚本执行。
修正后的配置
将exec移至application live的大括号内部:
rtmp { server { listen 1935; chunk_size 4096; allow publish 127.0.0.1; deny publish all; application live { live on; record off; exec /my/path/to/transcode.sh $name; } } }
额外排查要点
- 确认Nginx已编译RTMP模块:执行
nginx -V查看编译参数,需包含--add-module=路径/到/rtmp-module相关内容,无此模块则RTMP功能和exec指令均无效。 - 脚本权限检查:除执行权限外,要确保Nginx运行用户(通常为
www-data或nginx)对脚本路径有读、执行权限,对脚本输出目录有写权限。 - 环境变量适配:终端可运行的脚本在Nginx上下文可能缺失环境变量(如ffmpeg路径),建议在脚本中使用ffmpeg绝对路径,例如
/usr/bin/ffmpeg而非直接写ffmpeg。 - 日志排查:查看Nginx错误日志(默认路径
/var/log/nginx/error.log),排查是否存在脚本找不到、权限不足等具体报错信息。
内容的提问来源于stack exchange,提问作者Alireza
相关产品推荐
相关产品推荐

