我无法使用命令exec
启动restream。我也尝试了exec_pull
。
它没有帮助。我的目标是将rtmp://ktv.s4c.link/live/livestream
网址重新发送到我的本地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
答案 0 :(得分:2)
所以,首先,请注意Nginx将所有exec命令作为nobody
用户运行。你必须在命令行中测试它,如下所示:
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
。