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

nginx-rtmp-module--------------WIKI

Windows下编译nginx-rtmp-module