ffmpeg exec命令未在nginx rtmp中运行

Posted

技术标签:

【中文标题】ffmpeg exec命令未在nginx rtmp中运行【英文标题】:ffmpeg exec command not running in nginx rtmp 【发布时间】:2017-02-22 10:33:04 【问题描述】:

我正在使用 nginx 和 rtmp 模块来流式传输实时 hls 和 mpeg-dash。 这是我在 nginx .conf 中的 rtmp 命令

rtmp 
server 
    listen 1936;


    application mypull 
    live on ;
    meta copy;
    allow play all;

    pull rtmp://184.72.239.149/vod/BigBuckBunny_115k.mov name=test live=1;


    exec_push   /usr/bin/ffmpeg -re -i rtmp://localhost:1936/mypull/$name -vcodec libx264 -acodec libmp3lame -f flv rtmp://localhost:1936/hls/$name;





application dash 
        live on;
        dash on;
        dash_path /tmp/dash;
        dash_nested on;
        dash_fragment 5s;
        dash_playlist_length 30s;
    
     application hls 
        live on;
        hls on;
    hls_playlist_length 30s;
    hls_fragment 5s;
        hls_path /tmp/hls;
    


但它没有播放。似乎 ffmpeg 命令甚至没有运行。并且 hls 和 dash 文件夹是空的。有人可以帮我吗?

【问题讨论】:

用实际的streamID替换变量后,您的ffmpeg命令是否可以从命令行工作? 这是真实的id,我的nginx.conf就是这样的。它不会创建任何输出。 @GergelyLukacsy 没有。流 ID 被替换为 $name 变量。当您打开流时,URL 如下所示:rtmp://server.com:1935/mypull/12345 其中12345 是您的流 ID。我认为在这种情况下你可以替换任何东西,所以试试这是你的控制台:ffmpeg -re -i rtmp://localhost:1936/mypull/123 -vcodec libx264 -acodec libmp3lame -f flv rtmp://localhost:1936/hls/123 另外,确保在防火墙设置中打开端口。为什么 RTMP 使用 1936?默认值为 1935。 还有,系统的哪个部分不工作?您在这里列出了三个不同的应用程序。实时播放? HLS?硬盘驱动器? 我的流 id 是测试。我在 name=test 中声明了它,并且我还打开了端口(1936 年)。我的 hls 应用程序不工作,似乎它没有制作片段和 m3u8 文件,因为当我尝试在在线播放器上播放它时,使用 F12 它为 test.m3u8 @GergelyLukacsy 提供 404 【参考方案1】:

编辑您的 nginx.conf 文件并放入第一行:

user  root;

这将以 root 身份运行您的命令

【讨论】:

【参考方案2】:

将 ffmpeg 命令放入 bash 脚本中。例如,我的 bash 脚本名为 ff.sh,并存储在文件夹 /files

将整个 ffmpeg 命令放入脚本中,并使其可执行:

chmod +x /files/ff.sh

exec_push nginx.conf 中的脚本

application origin 
live on;
 exec_push /files/ff.sh;

您可能会发现这对您有用。

【讨论】:

【参考方案3】:

确保运行 nginx 的用户可以执行命令。通常它没有分配外壳。

【讨论】:

以上是关于ffmpeg exec命令未在nginx rtmp中运行的主要内容,如果未能解决你的问题,请参考以下文章

FFmpeg常用推流命令

FFmpeg常用推流命令

ffmpeg+nginx 实现rtsp转rtmp并通过nginx转发

如何将 ffmpeg 流中的音频传输到 nginx rtmp 服务器?

OrangePI通过ffmpeg和nginx把摄像头输出为rtmp

Windows使用Nginx+ffmpeg搭建RTMP服务器