You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Windows版SRS 5.0.128中Exec/Transcode调用ffmpeg失败求助

问题描述

已将ffmpeg.exe复制到objs文件夹,但无法使用SRS的Exec或Transcode功能,以下是尝试的配置及错误日志:

Exec配置代码

exec {
    enabled on;
    publish ./objs/ffmpeg.exe -rtbufsize 10M -i rtmp://10.1.9.240/live/encoder  -vf scale=1080:720 -c:v libx264 -profile:v high -level 4.2 -preset fast -b:v 1500k -c:a aac -ac 2 -b:a 96k -f flv -y rtmp://10.1.9.240:1935/live/encoderlow/;
}

Exec错误日志

[2023-01-04 10:05:46.410][WARN][1309][01568ctu][11] EXEC: Ignore error, code=3028(FFmpegFork)(Failed to fork FFmpeg trancoder process) :
process start : vfork process failed, cli=./objs/ffmpeg.exe -rtbufsize 10M -i rtmp://10.1.9.240/live/encoder -vf scale=1080:720 -c:v libx264 -profile:v high -level 4.2 -preset fast -b:v 1500k -c:a aac -ac 2 -b:a 96k -f flv -y rtmp://10.1.9.240:1935/live/encoderlow/
thread [1309][01568ctu]: do_cycle() [./src/app/srs_app_ng_exec.cpp:108][errno=11]
thread [1309][01568ctu]: start() [./src/app/srs_app_process.cpp:197][errno=11]

Transcode配置代码

transcode {
    enabled     on;
    ffmpeg      ./objs/ffmpeg.exe;
    engine ff {
        enabled         on;
        vfilter {
        }
        vcodec          libx264;
        vthreads        4;
        vprofile        high;
        vpreset         fast;
        vbitrate        1500k;
        vparams {
        }
        acodec          libfdk_aac;
        aparams {
        }
        output          rtmp://127.0.0.1:[port]/[app]/[stream]_[engine]?vhost=[vhost];
    }
}

Transcode错误日志

[2023-01-04 11:04:45.295][WARN][1489][34r32764][11] Encoder: Ignore error, code=3028(FFmpegFork)(Failed to fork FFmpeg trancoder process) : ffmpeg start : vfork process failed, cli=./objs/ffmpeg.exe -f flv -i rtmp://127.0.0.1:1935/live?vhost=defaultVhost/encoder -vcodec libx264 -b:v 1500000 -threads 4 -profile:v high -preset fast -acodec libfdk_aac -f flv -y rtmp://127.0.0.1:1935/live/encoder_ff?vhost=defaultVhost 1 > ./objs/ffmpeg-encoder-defaultVhost-live-encoder-ff.log 2 > ./objs/ffmpeg-encoder-defaultVhost-live-encoder-ff.log
thread [1489][34r32764]: do_cycle() [./src/app/srs_app_encoder.cpp:117][errno=11]
thread [1489][34r32764]: start() [./src/app/srs_app_process.cpp:197][errno=11]


排查与解决步骤

错误核心为vfork进程失败(errno=11),按以下顺序排查:

  1. 替换FFmpeg路径为绝对路径
    放弃相对路径./objs/ffmpeg.exe,改用绝对路径,比如Windows环境用C:/srs/objs/ffmpeg.exe,Linux环境用/usr/local/srs/objs/ffmpeg.exe——相对路径可能因SRS启动目录不同导致找不到可执行文件。

  2. 直接验证FFmpeg命令可用性
    在命令行复制配置里的完整FFmpeg命令执行,比如Exec模块的命令:

    ./objs/ffmpeg.exe -rtbufsize 10M -i rtmp://10.1.9.240/live/encoder  -vf scale=1080:720 -c:v libx264 -profile:v high -level 4.2 -preset fast -b:v 1500k -c:a aac -ac 2 -b:a 96k -f flv -y rtmp://10.1.9.240:1935/live/encoderlow/
    

    如果命令本身报错,先解决FFmpeg自身问题,比如缺少编码库(如libfdk_aac)、RTMP源无法访问等。

  3. 检查权限与目录读写能力

    • Windows环境:确保SRS进程有读取objs文件夹、执行ffmpeg.exe的权限,同时有权限写入错误日志里指定的ffmpeg日志文件。
    • Linux环境:执行chmod +x ./objs/ffmpeg.exe赋予可执行权限,同时确保SRS运行用户对objs目录有读写权限。
  4. 系统资源与版本兼容性

    • errno=11对应EAGAIN,可能是系统进程数限制,检查当前系统可用进程数是否充足。
    • 确认FFmpeg版本与SRS版本兼容,优先使用SRS官方推荐的FFmpeg编译版本,避免用过于老旧或最新的非兼容版本。
  5. 调整编码选项适配FFmpeg能力
    如果你的FFmpeg未编译libfdk_aac编码库,将Transcode配置里的acodec改为aac,避免因缺少编码库导致FFmpeg启动失败。

内容的提问来源于stack exchange,提问作者diegosn79

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 02:01:07