无法使用 nginx-rtmp-module 重新流式传输
Posted
技术标签:
【中文标题】无法使用 nginx-rtmp-module 重新流式传输【英文标题】:Fail to restream with nginx-rtmp-module 【发布时间】:2017-05-16 05:23:37 【问题描述】:我无法使用命令 exec
开始重新流式传输。我也试过exec_pull
。
它没有帮助。我的目标是将rtmp://ktv.s4c.link/live/livestream
url 重新传输到我的本地 nginx,到rtmp://localhost:1935/hls
。
/tmp/logs/ffmpeg.log
为空。
我猜exec
甚至没有被调用,但是为什么呢?
rtmp
server
listen 1935;
chunk_size 4096;
application live
allow play all;
live on;
record off;
#pull rtmp://ktv.s4c.link/live/livestream;
exec ffmpeg -i rtmp://localhost:1935/live -f flv rtmp://localhost:1935/hls 2>>/tmp/logs/ffmpeg.log;
application hls
allow play all;
live on;
record off;
我正在使用 nginx-1.12.0。 我关注了this tutorial,看了this
【问题讨论】:
【参考方案1】:所以,首先,请注意 Nginx 以 nobody
用户身份运行所有 exec 命令。你必须像这样在命令行中测试它:
sudo -u nobody ffmpeg -i rtmp://ktv.s4c.link/live/livestream -f flv rtmp://localhost:1935/hls
然后如果这个命令行有效 - 打印到 nginx.conf。
其次,使用完整路径。这非常重要,因为与您当前的用户环境相比,Nginx 运行的子进程具有不同的环境。
sudo -u nobody /usr/bin/ffmpeg -i rtmp://ktv.s4c.link/live/livestream -f flv rtmp://localhost:1935/hls
第三,我的错误是我使用了存储库中的 FFmpeg,而 FFmpeg 的版本为 2.8.11-0ubuntu0.16.04.1
。与此相关answer
FFmpeg 可以用librtmp 编译,这就是为什么 FFmpeg 可以要求 live=1 和引号(")。所以我复制到 nginx.conf 的最终命令是:
sudo -u nobody /usr/bin/ffmpeg -i "rtmp://ktv.s4c.link/live/livestream live=1" -f flv rtmp://localhost:1935/hls
我的最终 nginx.conf
rtmp
server
listen 1935;
chunk_size 4096;
application live
live on;
record off;
pull rtmp://ktv.s4c.link/live/livestream;
exec_play /usr/bin/ffmpeg -i "rtmp://ktv.s4c.link/live/livestream live=1" -f flv rtmp://localhost:1935/hls 2>>/tmp/ffmpeg-$name.log;
application hls
live on;
record off;
正如你所提到的,我添加了 FFmpeg 日志2>>/tmp/ffmpeg-$name.log
。
【讨论】:
以上是关于无法使用 nginx-rtmp-module 重新流式传输的主要内容,如果未能解决你的问题,请参考以下文章
nginx与nginx-rtmp-module搭建流媒体服务器
obs nginx-rtmp-module搭建流媒体服务器实现直播 ding
centos使用一键lnmp+nginx-rtmp-module插件,使用obs推流到nginx
./configure: 没有这样的文件或目录 - 在 Mac OS X 上构建 nginx-rtmp-module