无法使用nginx-rtmp-module进行重定时

时间:2017-05-16 05:23:37

标签: nginx ffmpeg

我无法使用命令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

1 个答案:

答案 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